From 2e716f854e1c0ca69dabb6994216cc74c9085b53 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Fri, 18 Oct 2024 12:12:10 -0400 Subject: [PATCH 001/102] 2024-10-18 - feedback - external reviewer - serverl-side --- .../FeedbackExternalRecipient.java | 107 ++++++++++++++++++ .../FeedbackExternalRecipientCreateDTO.java | 55 +++++++++ .../FeedbackExternalRecipientServices.java | 18 +++ .../FeedbackExternalRecipientUpdateDTO.java | 40 +++++++ .../V116_feedback_external_recipient.sql | 9 ++ 5 files changed, 229 insertions(+) create mode 100644 server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java create mode 100644 server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientCreateDTO.java create mode 100644 server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java create mode 100644 server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientUpdateDTO.java create mode 100644 server/src/main/resources/db/common/V116_feedback_external_recipient.sql diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java new file mode 100644 index 0000000000..b728cdfd83 --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java @@ -0,0 +1,107 @@ +package com.objectcomputing.checkins.services.feedback_external_recipient; + +import io.micronaut.core.annotation.Introspected; +import io.micronaut.core.annotation.Nullable; +import io.micronaut.data.annotation.AutoPopulated; +import io.micronaut.data.annotation.TypeDef; +import io.micronaut.data.annotation.sql.ColumnTransformer; +import io.micronaut.data.model.DataType; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; +import java.util.Objects; +import java.util.UUID; + +@Entity +@Getter +@Setter +@Introspected +@Table(name = "feedback_external_recipient") +public class FeedbackExternalRecipient { + + @Id + @Column(name = "id") + @AutoPopulated + @TypeDef(type = DataType.STRING) + @Schema(description = "unique id of the feedback external recipient") + private UUID id; + + @NotNull + @Column(name="email") + @ColumnTransformer( + read = "pgp_sym_decrypt(workEmail::bytea,'${aes.key}')", + write = "pgp_sym_encrypt(?,'${aes.key}') " + ) + @Schema(description = "email of the feedback external recipient") + private String email; + + @Column(name = "firstname") + @ColumnTransformer( + read = "pgp_sym_decrypt(firstName::bytea,'${aes.key}')", + write = "pgp_sym_encrypt(?,'${aes.key}') " + ) + @Schema(description = "first name of the feedback external recipient") + private String firstName; + + @Column(name = "lastname") + @ColumnTransformer( + read = "pgp_sym_decrypt(lastName::bytea,'${aes.key}')", + write = "pgp_sym_encrypt(?,'${aes.key}') " + ) + @Schema(description = "last name of the feedback external recipient") + private String lastName; + + @Column(name = "company_name") + @ColumnTransformer( + read = "pgp_sym_decrypt(lastName::bytea,'${aes.key}')", + write = "pgp_sym_encrypt(?,'${aes.key}') " + ) + @Schema(description = "company of the feedback external recipient") + private String companyName; + + public FeedbackExternalRecipient( + @NotBlank String email, @Nullable String firstName, @Nullable String lastName, @Nullable String company + ) { + this.email = email; + this.firstName = firstName; + this.lastName = lastName; + this.companyName = company; + } + + public FeedbackExternalRecipient() {} + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + FeedbackExternalRecipient that = (FeedbackExternalRecipient) o; + return Objects.equals(id, that.id) + && Objects.equals(email, that.email) + && Objects.equals(firstName, that.firstName) + && Objects.equals(lastName, that.lastName) + && Objects.equals(companyName, that.companyName) + ; + } + + @Override + public int hashCode() { + return Objects.hash(id, email, firstName, lastName, companyName); + } + + @Override + public String toString() { + return "FeedbackRequest{" + + "id=" + id + + ", email='" + email + '\'' + + ", firstName='" + firstName + '\'' + + ", lastName='" + lastName + '\'' + + ", company='" + companyName + '\'' + + '}'; + } +} diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientCreateDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientCreateDTO.java new file mode 100644 index 0000000000..f746eae5df --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientCreateDTO.java @@ -0,0 +1,55 @@ +package com.objectcomputing.checkins.services.feedback_external_recipient; + +import io.micronaut.core.annotation.Introspected; +import io.micronaut.core.annotation.Nullable; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDate; +import java.util.Objects; +import java.util.UUID; + +@Getter +@Setter +@Introspected +public class FeedbackExternalRecipientCreateDTO { + + @NotBlank + @Schema(description = "email of the feedback-external-recipient") + private String email; + + @Nullable + @Schema(description = "first name of the feedback-external-recipient") + private String firstName; + + @Nullable + @Schema(description = "last name of the feedback-external-recipient") + private String lastName; + + @Nullable + @Schema(description = "company-name of the feedback-external-recipient") + private String companyName; + + @Override + public boolean equals(@Nullable Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + FeedbackExternalRecipientCreateDTO that = (FeedbackExternalRecipientCreateDTO) o; + return + Objects.equals(email, that.email) + && Objects.equals(firstName, that.firstName) + && Objects.equals(lastName, that.lastName) + && Objects.equals(companyName, that.companyName) + ; + } + + @Override + public int hashCode() { + return Objects.hash(email, firstName, lastName, companyName); + } + +} + diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java new file mode 100644 index 0000000000..f76a140151 --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java @@ -0,0 +1,18 @@ +package com.objectcomputing.checkins.services.feedback_external_recipient; + +import java.time.LocalDate; +import java.util.List; +import java.util.UUID; + +public interface FeedbackExternalRecipientServices { + FeedbackExternalRecipient save(FeedbackExternalRecipient feedbackExternalRecipient); + + FeedbackExternalRecipient update(FeedbackExternalRecipientUpdateDTO feedbackExternalRecipientUpdateDTO); + + void delete(UUID id); + + FeedbackExternalRecipient getById(UUID id); + + List findByValues(String email, String firstName, String lastName, String companyName); + +} diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientUpdateDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientUpdateDTO.java new file mode 100644 index 0000000000..57b984f738 --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientUpdateDTO.java @@ -0,0 +1,40 @@ +package com.objectcomputing.checkins.services.feedback_external_recipient; + +import io.micronaut.core.annotation.Introspected; +import io.micronaut.core.annotation.Nullable; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; + +import java.util.Objects; +import java.util.UUID; + +@Getter +@Setter +@Introspected +public class FeedbackExternalRecipientUpdateDTO { + + @NotNull + @Schema(description = "id of the feedback-external-recipient") + private UUID id; + + @NotBlank + @Schema(description = "email of the feedback-external-recipient") + private String email; + + @Nullable + @Schema(description = "first name of the feedback-external-recipient") + private String firstName; + + @Nullable + @Schema(description = "last name of the feedback-external-recipient") + private String lastName; + + @Nullable + @Schema(description = "company-name of the feedback-external-recipient") + private String companyName; + +} + diff --git a/server/src/main/resources/db/common/V116_feedback_external_recipient.sql b/server/src/main/resources/db/common/V116_feedback_external_recipient.sql new file mode 100644 index 0000000000..0e961bdb89 --- /dev/null +++ b/server/src/main/resources/db/common/V116_feedback_external_recipient.sql @@ -0,0 +1,9 @@ +CREATE TABLE feedback_external_recipient +( + id varchar PRIMARY KEY, + email varchar, + firstname varchar, + lastname varchar, + company_name varchar +); +ALTER TABLE feedback_requests ADD column external_recipient_id varchar; From 75895e8546bf475916a51a97c036448fafdfe43a Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Fri, 18 Oct 2024 21:56:19 -0400 Subject: [PATCH 002/102] 2024-10-18 - feedback - external reviewer - serverl-side --- .../feedback_request/FeedbackRequest.java | 38 ++++++--- .../FeedbackRequestController.java | 9 ++- .../FeedbackRequestCreateDTO.java | 6 +- .../FeedbackRequestRepository.java | 10 ++- .../FeedbackRequestResponseDTO.java | 7 +- .../FeedbackRequestServices.java | 4 +- .../FeedbackRequestServicesImpl.java | 79 +++++++++++++------ .../FeedbackRequestControllerTest.java | 23 ++++++ .../feedback_request/FeedbackRequestTest.java | 6 +- 9 files changed, 132 insertions(+), 50 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequest.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequest.java index 5753f7b98a..420e4f317d 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequest.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequest.java @@ -46,7 +46,6 @@ public class FeedbackRequest { private UUID requesteeId; @Column(name = "recipient_id") - @NotNull @TypeDef(type = DataType.STRING) @Schema(description = "id of the person who was requested to give feedback") private UUID recipientId; @@ -86,15 +85,26 @@ public class FeedbackRequest { @Schema(description = "the id of the review period in that this request was created for") private UUID reviewPeriodId; - public FeedbackRequest(UUID creatorId, - UUID requesteeId, - UUID recipientId, - UUID templateId, - LocalDate sendDate, - @Nullable LocalDate dueDate, - String status, - @Nullable LocalDate submitDate, - @Nullable UUID reviewPeriodId) { + @Column(name = "external_recipient_id") + @NotNull + @TypeDef(type = DataType.STRING) + @Schema(description = "id of the external person who was requested to give feedback") + private UUID externalRecipientId; + + + + public FeedbackRequest( + UUID creatorId, + UUID requesteeId, + @Nullable UUID recipientId, + UUID templateId, + LocalDate sendDate, + @Nullable LocalDate dueDate, + String status, + @Nullable LocalDate submitDate, + @Nullable UUID reviewPeriodId, + @Nullable UUID externalRecipientId + ) { this.id = null; this.creatorId = creatorId; this.requesteeId = requesteeId; @@ -105,6 +115,7 @@ public FeedbackRequest(UUID creatorId, this.status = status; this.submitDate = submitDate; this.reviewPeriodId = reviewPeriodId; + this.externalRecipientId = externalRecipientId; } public FeedbackRequest() {} @@ -123,12 +134,14 @@ public boolean equals(Object o) { && Objects.equals(dueDate, that.dueDate) && Objects.equals(status, that.status) && Objects.equals(submitDate, that.submitDate) - && Objects.equals(reviewPeriodId, that.reviewPeriodId); + && Objects.equals(reviewPeriodId, that.reviewPeriodId) + && Objects.equals(externalRecipientId, that.externalRecipientId) + ; } @Override public int hashCode() { - return Objects.hash(id, creatorId, recipientId, requesteeId, sendDate, templateId, dueDate, status, submitDate, reviewPeriodId); + return Objects.hash(id, creatorId, recipientId, requesteeId, sendDate, templateId, dueDate, status, submitDate, reviewPeriodId, externalRecipientId); } @Override @@ -144,6 +157,7 @@ public String toString() { ", status='" + status + ", submitDate='" + submitDate + ", reviewPeriodId='" + reviewPeriodId + + ", externalRecipientId='" + externalRecipientId + '}'; } } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java index 1e2fa3a278..0266ab1676 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java @@ -106,8 +106,8 @@ public HttpResponse getById(UUID id) { */ @RequiredPermission(Permission.CAN_VIEW_FEEDBACK_REQUEST) @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,requesteeIds}") - public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable List requesteeIds) { - return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, requesteeIds) + public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable List requesteeIds, @Nullable UUID externalRecipientId) { + return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, requesteeIds, externalRecipientId) .stream() .map(this::fromEntity) .toList(); @@ -125,6 +125,7 @@ private FeedbackRequestResponseDTO fromEntity(FeedbackRequest feedbackRequest) { dto.setStatus(feedbackRequest.getStatus()); dto.setSubmitDate(feedbackRequest.getSubmitDate()); dto.setReviewPeriodId(feedbackRequest.getReviewPeriodId()); + dto.setExternalRecipientId(feedbackRequest.getExternalRecipientId()); return dto; } @@ -139,6 +140,8 @@ private FeedbackRequest fromDTO(FeedbackRequestCreateDTO dto) { dto.getDueDate(), dto.getStatus(), dto.getSubmitDate(), - dto.getReviewPeriodId()); + dto.getReviewPeriodId(), + dto.getExternalRecipientId() + ); } } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestCreateDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestCreateDTO.java index 91674b498d..1535f12a5d 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestCreateDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestCreateDTO.java @@ -23,7 +23,7 @@ public class FeedbackRequestCreateDTO { @Schema(description = "id of the person who is getting feedback requested on them") private UUID requesteeId; - @NotNull + @Nullable @Schema(description = "id of the person who was requested to give feedback") private UUID recipientId; @@ -51,5 +51,9 @@ public class FeedbackRequestCreateDTO { @Schema(description = "the id of the review period in that this request was created for") private UUID reviewPeriodId; + @Nullable + @Schema(description = "id of the external person who was requested to give feedback") + private UUID externalRecipientId; + } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestRepository.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestRepository.java index db5c405fe7..1a5cb5e455 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestRepository.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestRepository.java @@ -30,9 +30,10 @@ public interface FeedbackRequestRepository extends CrudRepository= :oldestDate) " + "AND (:reviewPeriodId IS NULL OR review_period_id = :reviewPeriodId) " + "AND (:templateId IS NULL OR template_id = :templateId) " + - "AND (requestee_id = ANY(:requesteeIds)) " + "AND (requestee_id = ANY(:requesteeIds)) " + + "AND (:externalRecipientId IS NULL OR externalRecipientId = :externalRecipientId) " , nativeQuery = true) - List findByValues(@Nullable String creatorId, @Nullable String recipientId, @Nullable LocalDate oldestDate, @Nullable String reviewPeriodId, @Nullable String templateId, @TypeDef(type = DataType.STRING_ARRAY) List requesteeIds); + List findByValues(@Nullable String creatorId, @Nullable String recipientId, @Nullable LocalDate oldestDate, @Nullable String reviewPeriodId, @Nullable String templateId, @TypeDef(type = DataType.STRING_ARRAY) List requesteeIds, @Nullable String externalRecipientId); @Query(value = "SELECT * " + "FROM feedback_requests " + @@ -41,9 +42,10 @@ public interface FeedbackRequestRepository extends CrudRepository= :oldestDate) " + "AND (:reviewPeriodId IS NULL OR review_period_id = :reviewPeriodId) " + - "AND (:templateId IS NULL OR template_id = :templateId) " + "AND (:templateId IS NULL OR template_id = :templateId) " + + "AND (:externalRecipientId IS NULL OR externalRecipientId = :externalRecipientId) " , nativeQuery = true) - List findByValues(@Nullable String creatorId, @Nullable String requesteeId, @Nullable String recipientId, @Nullable LocalDate oldestDate, @Nullable String reviewPeriodId, @Nullable String templateId); + List findByValues(@Nullable String creatorId, @Nullable String requesteeId, @Nullable String recipientId, @Nullable LocalDate oldestDate, @Nullable String reviewPeriodId, @Nullable String templateId, @Nullable String externalRecipientId); List findBySendDateNotAfterAndStatusEqual(LocalDate sendDate, String status); } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestResponseDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestResponseDTO.java index 2b3f0a1457..b86c8021c1 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestResponseDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestResponseDTO.java @@ -19,7 +19,6 @@ public class FeedbackRequestResponseDTO { @Schema(description = "unique id of the feedback request") private UUID id; - @NotNull @Schema(description = "id of the person who was requested to give feedback") private UUID recipientId; @@ -27,7 +26,7 @@ public class FeedbackRequestResponseDTO { @Schema(description = "id of the feedback request creator") private UUID creatorId; - @NotNull + @Nullable @Schema(description = "id of the person who is getting feedback requested on them") private UUID requesteeId; @@ -55,4 +54,8 @@ public class FeedbackRequestResponseDTO { @Schema(description = "the id of the review period in that this request was created for") private UUID reviewPeriodId; + @Nullable + @Schema(description = "id of the external person who was requested to give feedback") + private UUID externalRecipientId; + } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServices.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServices.java index 90cfd09ce3..861a8d336e 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServices.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServices.java @@ -13,5 +13,5 @@ public interface FeedbackRequestServices { FeedbackRequest getById(UUID id); - List findByValues(UUID creatorId, UUID requesteeId, UUID recipientId, LocalDate oldestDate, UUID reviewPeriodId, UUID templateId, List requesteeIds); -} \ No newline at end of file + List findByValues(UUID creatorId, UUID requesteeId, UUID recipientId, LocalDate oldestDate, UUID reviewPeriodId, UUID templateId, List requesteeIds, UUID externalRecipientId); +} diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index 180d8fef35..db7ea3c330 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -7,6 +7,7 @@ import com.objectcomputing.checkins.notifications.email.EmailSender; import com.objectcomputing.checkins.notifications.email.MailJetFactory; import com.objectcomputing.checkins.services.email.Email; +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientServices; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; import com.objectcomputing.checkins.services.memberprofile.MemberProfileUtils; import com.objectcomputing.checkins.services.memberprofile.MemberProfileServices; @@ -23,7 +24,6 @@ import jakarta.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import java.io.BufferedReader; import java.time.format.DateTimeFormatter; import java.time.LocalDate; @@ -41,8 +41,8 @@ public class FeedbackRequestServicesImpl implements FeedbackRequestServices { private static final Logger LOG = LoggerFactory.getLogger(FeedbackRequestServicesImpl.class); - private final FeedbackRequestRepository feedbackReqRepository; + private final FeedbackExternalRecipientServices feedbackExternalRecipientServices; private final CurrentUserServices currentUserServices; private final MemberProfileServices memberProfileServices; private final ReviewPeriodRepository reviewPeriodRepository; @@ -62,13 +62,15 @@ private record ReviewPeriodInfo(String subject, LocalDate closeDate) {} @Value("classpath:mjml/supervisor_email.mjml") private Readable supervisorTemplate; - public FeedbackRequestServicesImpl(FeedbackRequestRepository feedbackReqRepository, - CurrentUserServices currentUserServices, - MemberProfileServices memberProfileServices, - ReviewPeriodRepository reviewPeriodRepository, - ReviewAssignmentRepository reviewAssignmentRepository, - @Named(MailJetFactory.MJML_FORMAT) EmailSender emailSender, - CheckInsConfiguration checkInsConfiguration + public FeedbackRequestServicesImpl( + FeedbackRequestRepository feedbackReqRepository, + CurrentUserServices currentUserServices, + MemberProfileServices memberProfileServices, + ReviewPeriodRepository reviewPeriodRepository, + ReviewAssignmentRepository reviewAssignmentRepository, + @Named(MailJetFactory.MJML_FORMAT) EmailSender emailSender, + CheckInsConfiguration checkInsConfiguration, + FeedbackExternalRecipientServices feedbackExternalRecipientServices ) { this.feedbackReqRepository = feedbackReqRepository; this.currentUserServices = currentUserServices; @@ -78,6 +80,7 @@ public FeedbackRequestServicesImpl(FeedbackRequestRepository feedbackReqReposito this.emailSender = emailSender; this.notificationSubject = checkInsConfiguration.getApplication().getFeedback().getRequestSubject(); this.webURL = checkInsConfiguration.getWebAddress(); + this.feedbackExternalRecipientServices = feedbackExternalRecipientServices; } private void validateMembers(FeedbackRequest feedbackRequest) { @@ -87,12 +90,26 @@ private void validateMembers(FeedbackRequest feedbackRequest) { throw new BadArgException("Cannot save feedback request with invalid creator ID"); } + if (feedbackRequest.getRecipientId() == null || feedbackRequest.getExternalRecipientId() == null) { + throw new BadArgException("Cannot save feedback request without recipient/external-recipient ID"); + } + try { - memberProfileServices.getById(feedbackRequest.getRecipientId()); + if (feedbackRequest.getRecipientId() != null) { + memberProfileServices.getById(feedbackRequest.getRecipientId()); + } } catch (NotFoundException e) { throw new BadArgException("Cannot save feedback request with invalid recipient ID"); } + try { + if (feedbackRequest.getExternalRecipientId() != null) { + memberProfileServices.getById(feedbackRequest.getExternalRecipientId()); + } + } catch (NotFoundException e) { + throw new BadArgException("Cannot save feedback request with invalid external-recipient ID"); + } + try { memberProfileServices.getById(feedbackRequest.getRequesteeId()); } catch (NotFoundException e) { @@ -129,26 +146,38 @@ public void sendNewRequestEmail(FeedbackRequest storedRequest) { MemberProfile reviewer = memberProfileServices.getById(storedRequest.getRecipientId()); MemberProfile requestee = memberProfileServices.getById(storedRequest.getRequesteeId()); String senderName = MemberProfileUtils.getFullName(creator); + UUID recipientOrExternalRecipientId; + String reviewerFirstName, reviewerEmail; + + if (memberProfileServices.getById(storedRequest.getExternalRecipientId()) != null) { + recipientOrExternalRecipientId = storedRequest.getExternalRecipientId(); + reviewerFirstName = ""; + reviewerEmail = ""; + } else { + reviewer = memberProfileServices.getById(storedRequest.getRecipientId()); + recipientOrExternalRecipientId = storedRequest.getRecipientId(); + reviewerFirstName = reviewer.getFirstName(); + reviewerEmail = reviewer.getWorkEmail(); + } String newContent = String.format( - templateToString(feedbackRequestTemplate), - reviewer.getFirstName(), senderName, - storedRequest.getRecipientId().equals(storedRequest.getRequesteeId()) ? - "" : - String.format("on %s ", - MemberProfileUtils.getFullName(requestee)), - storedRequest.getDueDate() == null ? + templateToString(feedbackRequestTemplate), + reviewerFirstName, senderName, + recipientOrExternalRecipientId.equals(storedRequest.getRequesteeId()) ? "" : String.format("on %s ", MemberProfileUtils.getFullName(requestee)), + storedRequest.getDueDate() == null ? "This request does not have a due date." : String.format("This request is due on %s %d, %d.", storedRequest.getDueDate().getMonth(), storedRequest.getDueDate().getDayOfMonth(), storedRequest.getDueDate().getYear()), String.format("%s/feedback/submit?request=%s", - webURL, storedRequest.getId().toString())); - - emailSender.sendEmail(senderName, creator.getWorkEmail(), - notificationSubject, newContent, - reviewer.getWorkEmail()); + webURL, storedRequest.getId().toString()) + ); + emailSender.sendEmail( + senderName, creator.getWorkEmail(), + notificationSubject, newContent, + reviewerEmail + ); } @Override @@ -283,7 +312,7 @@ public FeedbackRequest getById(UUID id) { } @Override - public List findByValues(UUID creatorId, UUID requesteeId, UUID recipientId, LocalDate oldestDate, UUID reviewPeriodId, UUID templateId, List requesteeIds) { + public List findByValues(UUID creatorId, UUID requesteeId, UUID recipientId, LocalDate oldestDate, UUID reviewPeriodId, UUID templateId, List requesteeIds, UUID externalRecipientId) { final UUID currentUserId = currentUserServices.getCurrentUser().getId(); if (currentUserId == null) { throw new PermissionException(NOT_AUTHORIZED_MSG); @@ -292,10 +321,10 @@ public List findByValues(UUID creatorId, UUID requesteeId, UUID List feedbackReqList = new ArrayList<>(); if (requesteeIds != null && !requesteeIds.isEmpty()) { LOG.debug("Finding feedback requests for {} requesteeIds.", requesteeIds.size()); - feedbackReqList.addAll(feedbackReqRepository.findByValues(Util.nullSafeUUIDToString(creatorId), Util.nullSafeUUIDToString(recipientId), oldestDate, Util.nullSafeUUIDToString(reviewPeriodId), Util.nullSafeUUIDToString(templateId), Util.nullSafeUUIDListToStringList(requesteeIds))); + feedbackReqList.addAll(feedbackReqRepository.findByValues(Util.nullSafeUUIDToString(creatorId), Util.nullSafeUUIDToString(recipientId), oldestDate, Util.nullSafeUUIDToString(reviewPeriodId), Util.nullSafeUUIDToString(templateId), Util.nullSafeUUIDListToStringList(requesteeIds), Util.nullSafeUUIDToString(externalRecipientId))); } else { LOG.debug("Finding feedback requests one or fewer requesteeIds: {}", requesteeId); - feedbackReqList.addAll(feedbackReqRepository.findByValues(Util.nullSafeUUIDToString(creatorId), Util.nullSafeUUIDToString(requesteeId), Util.nullSafeUUIDToString(recipientId), oldestDate, Util.nullSafeUUIDToString(reviewPeriodId), Util.nullSafeUUIDToString(templateId))); + feedbackReqList.addAll(feedbackReqRepository.findByValues(Util.nullSafeUUIDToString(creatorId), Util.nullSafeUUIDToString(requesteeId), Util.nullSafeUUIDToString(recipientId), oldestDate, Util.nullSafeUUIDToString(reviewPeriodId), Util.nullSafeUUIDToString(templateId), Util.nullSafeUUIDToString(recipientId))); } feedbackReqList = feedbackReqList.stream().filter((FeedbackRequest request) -> { diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index eded286109..5c1043e8fd 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -142,6 +142,29 @@ void testCreateFeedbackRequestByAdmin() { assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); } + @Test + void testCreateFeedbackRequestByAdminToExternalRecipient() { + //create two member profiles: one for normal employee, one for admin + final MemberProfile memberProfile = createADefaultMemberProfile(); + final MemberProfile admin = getMemberProfileRepository().save(mkMemberProfile("admin")); + final MemberProfile recipient = createADefaultRecipient(); + assignAdminRole(admin); + + //create feedback request + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, memberProfile, recipient); + final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); + + //send feedback request + final HttpRequest request = HttpRequest.POST("", dto) + .basicAuth(admin.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + //assert that content of some feedback request equals the test + assertEquals(HttpStatus.CREATED, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); + } + @Test void testCreateFeedbackRequestByAssignedPDL() { //create two member profiles: one for normal employee, one for PDL of normal employee diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestTest.java index aa4420298f..420edbda8e 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestTest.java @@ -6,6 +6,7 @@ import com.objectcomputing.checkins.notifications.email.MailJetFactory; import com.objectcomputing.checkins.services.MailJetFactoryReplacement; import com.objectcomputing.checkins.services.TestContainersSuite; +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientServices; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; import com.objectcomputing.checkins.services.memberprofile.MemberProfileServices; import com.objectcomputing.checkins.services.memberprofile.currentuser.CurrentUserServices; @@ -52,6 +53,9 @@ class FeedbackRequestTest extends TestContainersSuite { @Mock private FeedbackRequestRepository feedbackReqRepository; + @Mock + private FeedbackExternalRecipientServices feedbackExternalRecipientServices; + @Mock private CurrentUserServices currentUserServices; @@ -81,7 +85,7 @@ class FeedbackRequestTest extends TestContainersSuite { @BeforeAll void initMocks() { mockFinalizer = openMocks(this); - feedbackRequestServices = new FeedbackRequestServicesImpl(feedbackReqRepository, currentUserServices, memberProfileServices, reviewPeriodRepository, reviewAssignmentRepository, emailSender, checkInsConfiguration); + feedbackRequestServices = new FeedbackRequestServicesImpl(feedbackReqRepository, currentUserServices, memberProfileServices, reviewPeriodRepository, reviewAssignmentRepository, emailSender, checkInsConfiguration, feedbackExternalRecipientServices); server.getApplicationContext().inject(feedbackRequestServices); } From 3fbe561c1991d98647eb1a9a001c4511da89eaad Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 21 Oct 2024 09:39:26 -0400 Subject: [PATCH 003/102] 2024-10-21 - feedback - external reviewer - serverl-side --- ...FeedbackExternalRecipientServicesImpl.java | 34 +++++++++++++++++++ .../feedback_request/FeedbackRequest.java | 3 +- .../FeedbackRequestUpdateDTO.java | 4 +++ .../services/reports/ReportDataCollation.java | 3 +- .../reviews/ReviewPeriodServicesImpl.java | 32 ++++++++--------- .../V116_feedback_external_recipient.sql | 1 + .../fixture/FeedbackRequestFixture.java | 12 +++---- 7 files changed, 63 insertions(+), 26 deletions(-) create mode 100644 server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java new file mode 100644 index 0000000000..91e2535249 --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java @@ -0,0 +1,34 @@ +package com.objectcomputing.checkins.services.feedback_external_recipient; + +import jakarta.inject.Singleton; + +import java.util.List; +import java.util.UUID; + +@Singleton +public class FeedbackExternalRecipientServicesImpl implements FeedbackExternalRecipientServices { + @Override + public FeedbackExternalRecipient save(FeedbackExternalRecipient feedbackExternalRecipient) { + return null; + } + + @Override + public FeedbackExternalRecipient update(FeedbackExternalRecipientUpdateDTO feedbackExternalRecipientUpdateDTO) { + return null; + } + + @Override + public void delete(UUID id) { + + } + + @Override + public FeedbackExternalRecipient getById(UUID id) { + return null; + } + + @Override + public List findByValues(String email, String firstName, String lastName, String companyName) { + return List.of(); + } +} diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequest.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequest.java index 420e4f317d..440bb79fa0 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequest.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequest.java @@ -48,6 +48,7 @@ public class FeedbackRequest { @Column(name = "recipient_id") @TypeDef(type = DataType.STRING) @Schema(description = "id of the person who was requested to give feedback") + @Nullable private UUID recipientId; @Column(name = "template_id") @@ -86,7 +87,7 @@ public class FeedbackRequest { private UUID reviewPeriodId; @Column(name = "external_recipient_id") - @NotNull + @Nullable @TypeDef(type = DataType.STRING) @Schema(description = "id of the external person who was requested to give feedback") private UUID externalRecipientId; diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestUpdateDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestUpdateDTO.java index 6c25849ec5..d34831c2b4 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestUpdateDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestUpdateDTO.java @@ -35,4 +35,8 @@ public class FeedbackRequestUpdateDTO { @Schema(description = "the recipient of the request, used to reassign") private UUID recipientId; + @Nullable + @Schema(description = "the external recipient of the request, used to reassign") + private UUID externalRecipientId; + } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java b/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java index 969aa5aea5..bae5f353b0 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java @@ -227,8 +227,7 @@ private List getFeedbackType(FeedbackType type) { // We will need to cross-reference the templates. LocalDateRange dateRange = getDateRange(); List requests = - feedbackRequestServices.findByValues(null, memberId, null, - null, null, null, null); + feedbackRequestServices.findByValues(null, memberId, null, null, null, null, null, null); // Iterate over each request and find the template. Determine the purpose // of the template. diff --git a/server/src/main/java/com/objectcomputing/checkins/services/reviews/ReviewPeriodServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/reviews/ReviewPeriodServicesImpl.java index 96db2a6a24..9e64dc8582 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/reviews/ReviewPeriodServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/reviews/ReviewPeriodServicesImpl.java @@ -125,7 +125,7 @@ public Set findByValue(String name, ReviewStatus reviewStatus) { } public void delete(@NotNull UUID id) { - if (!feedbackRequestServices.findByValues(null, null, null, null, id, null, null).isEmpty()) { + if (!feedbackRequestServices.findByValues(null, null, null, null, id, null, null, null).isEmpty()) { throw new BadArgException(String.format("Review Period %s has associated feedback requests and cannot be deleted", id)); } reviewPeriodRepository.deleteById(id); @@ -179,13 +179,11 @@ public ReviewPeriod update(@NotNull ReviewPeriod reviewPeriod) { if (period.getReviewStatus() == ReviewStatus.OPEN) { // If the review period has been updated and is now open, we need // to create feedback requests for all involved in the review period - Set assignments = - reviewAssignmentRepository.findByReviewPeriodId(period.getId()); + Set assignments = reviewAssignmentRepository.findByReviewPeriodId(period.getId()); UUID reviewTemplateId = period.getReviewTemplateId(); UUID selfReviewTemplateId = period.getSelfReviewTemplateId(); LocalDate closeDate = period.getCloseDate().toLocalDate(); - LocalDate selfReviewCloseDate = - period.getSelfReviewCloseDate().toLocalDate(); + LocalDate selfReviewCloseDate = period.getSelfReviewCloseDate().toLocalDate(); // Log template id's that were not provided to the review period. // This is the reason a feedback request will not be created. @@ -221,7 +219,7 @@ public ReviewPeriod update(@NotNull ReviewPeriod reviewPeriod) { createReviewRequest( period, findCreatorId(assignment.getReviewerId()), assignment.getRevieweeId(), assignment.getReviewerId(), - reviewTemplateId, closeDate); + reviewTemplateId, closeDate, null); /** TODO Luch recipient Id **/ } } @@ -231,7 +229,7 @@ period, findCreatorId(assignment.getReviewerId()), createReviewRequest(period, findCreatorId(memberId), memberId, memberId, selfReviewTemplateId, - selfReviewCloseDate); + selfReviewCloseDate, null); /** TODO Luch recipient Id **/ } } @@ -346,17 +344,19 @@ private UUID findCreatorId(UUID memberId) { return profile.isEmpty() ? memberId : profile.get(0).getId(); } - private void createReviewRequest(ReviewPeriod period, - UUID creatorId, - UUID revieweeId, - UUID reviewerId, - UUID templateId, - LocalDate dueDate) { + private void createReviewRequest( + ReviewPeriod period, + UUID creatorId, + UUID revieweeId, + UUID reviewerId, + UUID templateId, + LocalDate dueDate, UUID externalRecipientId + ) { try { LocalDate sendDate = LocalDate.now(); FeedbackRequest request = new FeedbackRequest( creatorId, revieweeId, reviewerId, templateId, sendDate, - dueDate, "sent", null, period.getId()); + dueDate, "sent", null, period.getId(), externalRecipientId); feedbackRequestServices.save(request); } catch(Exception ex) { LOG.error(ex.toString()); @@ -437,9 +437,7 @@ void sendSelfReviewEmail(UUID reviewPeriodId, SelfReviewDate date) { Set recipients = new HashSet<>(); String templateId = null; List requests = - feedbackRequestRepository.findByValues(null, null, null, null, - reviewPeriodId.toString(), - templateId); + feedbackRequestRepository.findByValues(null, null, null, null, reviewPeriodId.toString(), templateId, null); for (FeedbackRequest request : requests) { if (request.getRecipientId().equals(request.getRequesteeId())) { Optional requesteeProfile = diff --git a/server/src/main/resources/db/common/V116_feedback_external_recipient.sql b/server/src/main/resources/db/common/V116_feedback_external_recipient.sql index 0e961bdb89..82dfbb8cbe 100644 --- a/server/src/main/resources/db/common/V116_feedback_external_recipient.sql +++ b/server/src/main/resources/db/common/V116_feedback_external_recipient.sql @@ -7,3 +7,4 @@ CREATE TABLE feedback_external_recipient company_name varchar ); ALTER TABLE feedback_requests ADD column external_recipient_id varchar; +ALTER TABLE feedback_external_recipient ADD CONSTRAINT feedback_requests_externalrecipientid_fkey FOREIGN KEY (id) REFERENCES feedback_requests(external_recipient_id) ON DELETE CASCADE; diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java index 8b1b1c6cc6..d517866d9c 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java @@ -21,7 +21,7 @@ public interface FeedbackRequestFixture extends RepositoryFixture, FeedbackTempl */ default FeedbackRequest createSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId) { LocalDate testDate = LocalDate.of(2010, 10, 8); - return new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, null); + return new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, null, null); /** TODO Luc reciplientg **/ } /** @@ -35,7 +35,7 @@ default FeedbackRequest createSampleFeedbackRequest(MemberProfile creator, Membe */ default FeedbackRequest createSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId, ReviewPeriod reviewPeriod) { LocalDate testDate = LocalDate.of(2010, 10, 8); - return new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, reviewPeriod.getId()); + return new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, reviewPeriod.getId(), null); /** TODO Luch reciplientg **/ } /** @@ -48,7 +48,7 @@ default FeedbackRequest createSampleFeedbackRequest(MemberProfile creator, Membe */ default FeedbackRequest saveSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId) { LocalDate testDate = LocalDate.of(2010, 10, 8); - return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, null)); + return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, null, null)); /** TODO Luch recipient **/ } /** @@ -61,12 +61,12 @@ default FeedbackRequest saveSampleFeedbackRequest(MemberProfile creator, MemberP */ default FeedbackRequest saveSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId, ReviewPeriod reviewPeriod) { LocalDate testDate = LocalDate.of(2010, 10, 8); - return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, reviewPeriod.getId())); + return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, reviewPeriod.getId(), null)); /** TODO Luch recipient **/ } default FeedbackRequest saveSampleFeedbackRequestWithStatus(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId, String status) { LocalDate testDate = LocalDate.of(2010, 10, 8); - return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, status, null, null)); + return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, status, null, null, null)); /** TODO Luch recipient **/ } default MemberProfile createADefaultRecipient() { @@ -115,6 +115,6 @@ default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile default List getFeedbackRequests(MemberProfile recipient) { return getFeedbackRequestRepository() - .findByValues(null, null, recipient.getId().toString(), null, null, null); + .findByValues(null, null, recipient.getId().toString(), null, null, null, null); /** TODO Luch recipient **/ } } From ff2e29b128000f7dd3b381d3ddfb1ecd24204785 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 21 Oct 2024 11:31:49 -0400 Subject: [PATCH 004/102] 2024-10-21 - feedback - external reviewer - serverl-side --- ...rnal_recipient.sql => V116__feedback_external_recipient.sql} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename server/src/main/resources/db/common/{V116_feedback_external_recipient.sql => V116__feedback_external_recipient.sql} (55%) diff --git a/server/src/main/resources/db/common/V116_feedback_external_recipient.sql b/server/src/main/resources/db/common/V116__feedback_external_recipient.sql similarity index 55% rename from server/src/main/resources/db/common/V116_feedback_external_recipient.sql rename to server/src/main/resources/db/common/V116__feedback_external_recipient.sql index 82dfbb8cbe..85ad8c12aa 100644 --- a/server/src/main/resources/db/common/V116_feedback_external_recipient.sql +++ b/server/src/main/resources/db/common/V116__feedback_external_recipient.sql @@ -7,4 +7,4 @@ CREATE TABLE feedback_external_recipient company_name varchar ); ALTER TABLE feedback_requests ADD column external_recipient_id varchar; -ALTER TABLE feedback_external_recipient ADD CONSTRAINT feedback_requests_externalrecipientid_fkey FOREIGN KEY (id) REFERENCES feedback_requests(external_recipient_id) ON DELETE CASCADE; +ALTER TABLE feedback_requests ADD CONSTRAINT feedback_requests_externalrecipientid_fkey FOREIGN KEY (external_recipient_id) REFERENCES feedback_external_recipient(id) ON DELETE CASCADE; From a68340dd761631a6752cd1768a7aa2ac8a8675a7 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 21 Oct 2024 11:46:33 -0400 Subject: [PATCH 005/102] 2024-10-21 - feedback - external reviewer - server-side --- .../services/feedback_request/FeedbackRequestServicesImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index db7ea3c330..1d3982cdd9 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -90,7 +90,7 @@ private void validateMembers(FeedbackRequest feedbackRequest) { throw new BadArgException("Cannot save feedback request with invalid creator ID"); } - if (feedbackRequest.getRecipientId() == null || feedbackRequest.getExternalRecipientId() == null) { + if (feedbackRequest.getRecipientId() == null && feedbackRequest.getExternalRecipientId() == null) { throw new BadArgException("Cannot save feedback request without recipient/external-recipient ID"); } From 1f5a7ed6542096ca2324b2d5bb6e0b13d778ebaf Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 21 Oct 2024 12:27:00 -0400 Subject: [PATCH 006/102] 2024-10-21 - feedback - external reviewer - server-side --- .../services/feedback_request/FeedbackRequestRepository.java | 4 ++-- .../feedback_request/FeedbackRequestControllerTest.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestRepository.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestRepository.java index 1a5cb5e455..2ca96b44e1 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestRepository.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestRepository.java @@ -31,7 +31,7 @@ public interface FeedbackRequestRepository extends CrudRepository findByValues(@Nullable String creatorId, @Nullable String recipientId, @Nullable LocalDate oldestDate, @Nullable String reviewPeriodId, @Nullable String templateId, @TypeDef(type = DataType.STRING_ARRAY) List requesteeIds, @Nullable String externalRecipientId); @@ -43,7 +43,7 @@ public interface FeedbackRequestRepository extends CrudRepository= :oldestDate) " + "AND (:reviewPeriodId IS NULL OR review_period_id = :reviewPeriodId) " + "AND (:templateId IS NULL OR template_id = :templateId) " + - "AND (:externalRecipientId IS NULL OR externalRecipientId = :externalRecipientId) " + "AND (:externalRecipientId IS NULL OR external_recipient_id = :externalRecipientId) " , nativeQuery = true) List findByValues(@Nullable String creatorId, @Nullable String requesteeId, @Nullable String recipientId, @Nullable LocalDate oldestDate, @Nullable String reviewPeriodId, @Nullable String templateId, @Nullable String externalRecipientId); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index 5c1043e8fd..30aaab22e2 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -394,9 +394,9 @@ void testCreateFeedbackRequestWithNoRecipients() { client.toBlocking().exchange(request, Map.class)); JsonNode body = responseException.getResponse().getBody(JsonNode.class).orElse(null); - String error = Objects.requireNonNull(body).get("_embedded").get("errors").get(0).get("message").asText(); + String error = Objects.requireNonNull(body).get("message").asText(); assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); - assertEquals("requestBody.recipientId: must not be null", error); + assertEquals("Cannot save feedback request without recipient/external-recipient ID", error); } @Test From 5c1c58490dac066d6a9864eeb1eceda688b53227 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 21 Oct 2024 13:45:13 -0400 Subject: [PATCH 007/102] 2024-10-21 - feedback - external reviewer - server-side --- .../services/feedback_request/FeedbackRequestController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java index 0266ab1676..9d2bae925b 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java @@ -49,7 +49,8 @@ public FeedbackRequestController(FeedbackRequestServices feedbackReqServices) { @RequiredPermission(Permission.CAN_CREATE_FEEDBACK_REQUEST) @Post public HttpResponse save(@Body @Valid @NotNull FeedbackRequestCreateDTO requestBody) { - FeedbackRequest savedFeedbackRequest = feedbackReqServices.save(fromDTO(requestBody)); + FeedbackRequest feedbackRequest = fromDTO(requestBody); + FeedbackRequest savedFeedbackRequest = feedbackReqServices.save(feedbackRequest); return HttpResponse.created(fromEntity(savedFeedbackRequest)) .headers(headers -> headers.location(URI.create("/feedback_request/" + savedFeedbackRequest.getId()))); } From 20ee8096e3b6d693af6c328ac66c1d423af95f22 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 21 Oct 2024 21:30:47 -0400 Subject: [PATCH 008/102] 2024-10-21 - feedback - external reviewer - server-side --- .../FeedbackExternalRecipient.java | 4 +-- .../FeedbackExternalRecipientRepository.java | 27 +++++++++++++++++++ ...FeedbackExternalRecipientServicesImpl.java | 9 ++++++- .../feedback_request/FeedbackRequest.java | 2 +- .../FeedbackRequestController.java | 22 +++++++++++++-- .../FeedbackRequestResponseDTO.java | 3 ++- .../FeedbackRequestServicesImpl.java | 5 ++-- 7 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientRepository.java diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java index b728cdfd83..85d03ae764 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java @@ -66,12 +66,12 @@ public class FeedbackExternalRecipient { private String companyName; public FeedbackExternalRecipient( - @NotBlank String email, @Nullable String firstName, @Nullable String lastName, @Nullable String company + @NotBlank String email, @Nullable String firstName, @Nullable String lastName, @Nullable String companyName ) { this.email = email; this.firstName = firstName; this.lastName = lastName; - this.companyName = company; + this.companyName = companyName; } public FeedbackExternalRecipient() {} diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientRepository.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientRepository.java new file mode 100644 index 0000000000..2ee066e1a6 --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientRepository.java @@ -0,0 +1,27 @@ +package com.objectcomputing.checkins.services.feedback_external_recipient; + +import com.objectcomputing.checkins.services.feedback_request.FeedbackRequest; +import io.micronaut.core.annotation.NonNull; +import io.micronaut.core.annotation.Nullable; +import io.micronaut.data.annotation.Query; +import io.micronaut.data.annotation.TypeDef; +import io.micronaut.data.jdbc.annotation.JdbcRepository; +import io.micronaut.data.model.DataType; +import io.micronaut.data.model.query.builder.sql.Dialect; +import io.micronaut.data.repository.CrudRepository; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; + +import java.time.LocalDate; +import java.util.List; +import java.util.UUID; + +@JdbcRepository(dialect = Dialect.POSTGRES) +public interface FeedbackExternalRecipientRepository extends CrudRepository { + + @Override + S save(@Valid @NotNull @NonNull S entity); + @Override + S update(@NotNull @NonNull S entity); +} + diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java index 91e2535249..cfe86d5d3a 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java @@ -7,9 +7,16 @@ @Singleton public class FeedbackExternalRecipientServicesImpl implements FeedbackExternalRecipientServices { + + private final FeedbackExternalRecipientRepository feedbackExternalRecipientRepository; + + public FeedbackExternalRecipientServicesImpl(FeedbackExternalRecipientRepository feedbackExternalRecipientRepository) { + this.feedbackExternalRecipientRepository = feedbackExternalRecipientRepository; + } + @Override public FeedbackExternalRecipient save(FeedbackExternalRecipient feedbackExternalRecipient) { - return null; + return feedbackExternalRecipientRepository.save(feedbackExternalRecipient); } @Override diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequest.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequest.java index 440bb79fa0..b386b8d20a 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequest.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequest.java @@ -46,9 +46,9 @@ public class FeedbackRequest { private UUID requesteeId; @Column(name = "recipient_id") + @Nullable @TypeDef(type = DataType.STRING) @Schema(description = "id of the person who was requested to give feedback") - @Nullable private UUID recipientId; @Column(name = "template_id") diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java index 9d2bae925b..598f1d35b2 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java @@ -1,5 +1,7 @@ package com.objectcomputing.checkins.services.feedback_request; +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipient; +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientServices; import com.objectcomputing.checkins.services.permissions.Permission; import com.objectcomputing.checkins.services.permissions.RequiredPermission; import io.micronaut.core.annotation.Nullable; @@ -35,9 +37,11 @@ public class FeedbackRequestController { private final FeedbackRequestServices feedbackReqServices; + private final FeedbackExternalRecipientServices feedbackExternalRecipientServices; - public FeedbackRequestController(FeedbackRequestServices feedbackReqServices) { + public FeedbackRequestController(FeedbackRequestServices feedbackReqServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices) { this.feedbackReqServices = feedbackReqServices; + this.feedbackExternalRecipientServices = feedbackExternalRecipientServices; } /** @@ -49,8 +53,22 @@ public FeedbackRequestController(FeedbackRequestServices feedbackReqServices) { @RequiredPermission(Permission.CAN_CREATE_FEEDBACK_REQUEST) @Post public HttpResponse save(@Body @Valid @NotNull FeedbackRequestCreateDTO requestBody) { + FeedbackRequest savedFeedbackRequest; FeedbackRequest feedbackRequest = fromDTO(requestBody); - FeedbackRequest savedFeedbackRequest = feedbackReqServices.save(feedbackRequest); + /* + FeedbackExternalRecipient feedbackExternalRecipient = new FeedbackExternalRecipient(); + feedbackExternalRecipient.setEmail("None@none.com"); + feedbackExternalRecipient.setCompanyName("OCI"); + feedbackExternalRecipient.setFirstName("None"); + feedbackExternalRecipient.setLastName("None"); + feedbackExternalRecipient = feedbackExternalRecipientServices.save(feedbackExternalRecipient); + feedbackRequest.setExternalRecipientId(feedbackExternalRecipient.getId()); + */ + try { + savedFeedbackRequest = feedbackReqServices.save(feedbackRequest); + } catch (Exception e) { + throw e; + } return HttpResponse.created(fromEntity(savedFeedbackRequest)) .headers(headers -> headers.location(URI.create("/feedback_request/" + savedFeedbackRequest.getId()))); } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestResponseDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestResponseDTO.java index b86c8021c1..c42c28fdc1 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestResponseDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestResponseDTO.java @@ -19,6 +19,7 @@ public class FeedbackRequestResponseDTO { @Schema(description = "unique id of the feedback request") private UUID id; + @Nullable @Schema(description = "id of the person who was requested to give feedback") private UUID recipientId; @@ -26,7 +27,7 @@ public class FeedbackRequestResponseDTO { @Schema(description = "id of the feedback request creator") private UUID creatorId; - @Nullable + @NotNull @Schema(description = "id of the person who is getting feedback requested on them") private UUID requesteeId; diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index 1d3982cdd9..a2afd53073 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -102,6 +102,7 @@ private void validateMembers(FeedbackRequest feedbackRequest) { throw new BadArgException("Cannot save feedback request with invalid recipient ID"); } + /** TODO Luch try { if (feedbackRequest.getExternalRecipientId() != null) { memberProfileServices.getById(feedbackRequest.getExternalRecipientId()); @@ -109,6 +110,7 @@ private void validateMembers(FeedbackRequest feedbackRequest) { } catch (NotFoundException e) { throw new BadArgException("Cannot save feedback request with invalid external-recipient ID"); } + **/ try { memberProfileServices.getById(feedbackRequest.getRequesteeId()); @@ -128,7 +130,6 @@ public FeedbackRequest save(FeedbackRequest feedbackRequest) { throw new BadArgException("Attempted to save feedback request with non-auto-populated ID"); } - if (feedbackRequest.getDueDate() != null && feedbackRequest.getSendDate().isAfter(feedbackRequest.getDueDate())) { throw new BadArgException("Send date of feedback request must be before the due date."); } @@ -149,7 +150,7 @@ public void sendNewRequestEmail(FeedbackRequest storedRequest) { UUID recipientOrExternalRecipientId; String reviewerFirstName, reviewerEmail; - if (memberProfileServices.getById(storedRequest.getExternalRecipientId()) != null) { + if (storedRequest.getExternalRecipientId() != null) { recipientOrExternalRecipientId = storedRequest.getExternalRecipientId(); reviewerFirstName = ""; reviewerEmail = ""; From d85c4dfa69569deb738fdc85b7c3e89c0c859f77 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 21 Oct 2024 21:49:37 -0400 Subject: [PATCH 009/102] 2024-10-21 - feedback - external reviewer - server-side --- .../services/feedback_request/FeedbackRequestController.java | 5 +++++ .../feedback_request/FeedbackRequestServicesImpl.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java index 598f1d35b2..b7c66f2f01 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java @@ -126,6 +126,11 @@ public HttpResponse getById(UUID id) { @RequiredPermission(Permission.CAN_VIEW_FEEDBACK_REQUEST) @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,requesteeIds}") public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable List requesteeIds, @Nullable UUID externalRecipientId) { + List feedbackRequestResponseDTOList = feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, requesteeIds, externalRecipientId) + .stream() + .map(this::fromEntity) + .toList(); + return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, requesteeIds, externalRecipientId) .stream() .map(this::fromEntity) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index a2afd53073..93f8c4d37f 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -325,7 +325,7 @@ public List findByValues(UUID creatorId, UUID requesteeId, UUID feedbackReqList.addAll(feedbackReqRepository.findByValues(Util.nullSafeUUIDToString(creatorId), Util.nullSafeUUIDToString(recipientId), oldestDate, Util.nullSafeUUIDToString(reviewPeriodId), Util.nullSafeUUIDToString(templateId), Util.nullSafeUUIDListToStringList(requesteeIds), Util.nullSafeUUIDToString(externalRecipientId))); } else { LOG.debug("Finding feedback requests one or fewer requesteeIds: {}", requesteeId); - feedbackReqList.addAll(feedbackReqRepository.findByValues(Util.nullSafeUUIDToString(creatorId), Util.nullSafeUUIDToString(requesteeId), Util.nullSafeUUIDToString(recipientId), oldestDate, Util.nullSafeUUIDToString(reviewPeriodId), Util.nullSafeUUIDToString(templateId), Util.nullSafeUUIDToString(recipientId))); + feedbackReqList.addAll(feedbackReqRepository.findByValues(Util.nullSafeUUIDToString(creatorId), Util.nullSafeUUIDToString(requesteeId), Util.nullSafeUUIDToString(recipientId), oldestDate, Util.nullSafeUUIDToString(reviewPeriodId), Util.nullSafeUUIDToString(templateId), Util.nullSafeUUIDToString(externalRecipientId))); } feedbackReqList = feedbackReqList.stream().filter((FeedbackRequest request) -> { From ed276b7476f4204022ad5838b98a61ecc0dfebaa Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Tue, 22 Oct 2024 09:20:44 -0400 Subject: [PATCH 010/102] 2024-10-22 - feedback - external reviewer - server-side --- ...FeedbackExternalRecipientServicesImpl.java | 9 ++++- .../FeedbackRequestController.java | 14 -------- .../FeedbackRequestServicesImpl.java | 33 ++++++++++++------- .../FeedbackRequestControllerTest.java | 2 +- 4 files changed, 30 insertions(+), 28 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java index cfe86d5d3a..8fa55acae3 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java @@ -1,8 +1,10 @@ package com.objectcomputing.checkins.services.feedback_external_recipient; +import com.objectcomputing.checkins.exceptions.NotFoundException; import jakarta.inject.Singleton; import java.util.List; +import java.util.Optional; import java.util.UUID; @Singleton @@ -31,7 +33,12 @@ public void delete(UUID id) { @Override public FeedbackExternalRecipient getById(UUID id) { - return null; + Optional optional = feedbackExternalRecipientRepository.findById(id); + if (optional.isEmpty()) { + throw new NotFoundException("No external recipient found with id: " + id); + } + FeedbackExternalRecipient feedbackExternalRecipient = optional.get(); + return feedbackExternalRecipient; } @Override diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java index b7c66f2f01..17cc313de7 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java @@ -55,15 +55,6 @@ public FeedbackRequestController(FeedbackRequestServices feedbackReqServices, Fe public HttpResponse save(@Body @Valid @NotNull FeedbackRequestCreateDTO requestBody) { FeedbackRequest savedFeedbackRequest; FeedbackRequest feedbackRequest = fromDTO(requestBody); - /* - FeedbackExternalRecipient feedbackExternalRecipient = new FeedbackExternalRecipient(); - feedbackExternalRecipient.setEmail("None@none.com"); - feedbackExternalRecipient.setCompanyName("OCI"); - feedbackExternalRecipient.setFirstName("None"); - feedbackExternalRecipient.setLastName("None"); - feedbackExternalRecipient = feedbackExternalRecipientServices.save(feedbackExternalRecipient); - feedbackRequest.setExternalRecipientId(feedbackExternalRecipient.getId()); - */ try { savedFeedbackRequest = feedbackReqServices.save(feedbackRequest); } catch (Exception e) { @@ -126,11 +117,6 @@ public HttpResponse getById(UUID id) { @RequiredPermission(Permission.CAN_VIEW_FEEDBACK_REQUEST) @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,requesteeIds}") public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable List requesteeIds, @Nullable UUID externalRecipientId) { - List feedbackRequestResponseDTOList = feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, requesteeIds, externalRecipientId) - .stream() - .map(this::fromEntity) - .toList(); - return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, requesteeIds, externalRecipientId) .stream() .map(this::fromEntity) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index 93f8c4d37f..c659d0cab2 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -7,6 +7,7 @@ import com.objectcomputing.checkins.notifications.email.EmailSender; import com.objectcomputing.checkins.notifications.email.MailJetFactory; import com.objectcomputing.checkins.services.email.Email; +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipient; import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientServices; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; import com.objectcomputing.checkins.services.memberprofile.MemberProfileUtils; @@ -90,8 +91,11 @@ private void validateMembers(FeedbackRequest feedbackRequest) { throw new BadArgException("Cannot save feedback request with invalid creator ID"); } - if (feedbackRequest.getRecipientId() == null && feedbackRequest.getExternalRecipientId() == null) { - throw new BadArgException("Cannot save feedback request without recipient/external-recipient ID"); + if (feedbackRequest.getExternalRecipientId() != null && feedbackRequest.getRecipientId() != null) { + throw new BadArgException("Cannot save feedback request with both recipient and external-recipient ID"); + } + if (feedbackRequest.getExternalRecipientId() == null && feedbackRequest.getRecipientId() == null) { + throw new BadArgException("Cannot save feedback request without both recipient and external-recipient ID"); } try { @@ -102,21 +106,20 @@ private void validateMembers(FeedbackRequest feedbackRequest) { throw new BadArgException("Cannot save feedback request with invalid recipient ID"); } - /** TODO Luch try { if (feedbackRequest.getExternalRecipientId() != null) { - memberProfileServices.getById(feedbackRequest.getExternalRecipientId()); + feedbackExternalRecipientServices.getById(feedbackRequest.getExternalRecipientId()); } } catch (NotFoundException e) { throw new BadArgException("Cannot save feedback request with invalid external-recipient ID"); } - **/ try { memberProfileServices.getById(feedbackRequest.getRequesteeId()); } catch (NotFoundException e) { throw new BadArgException("Cannot save feedback request with invalid requestee ID"); } + } @Override @@ -144,7 +147,8 @@ public FeedbackRequest save(FeedbackRequest feedbackRequest) { public void sendNewRequestEmail(FeedbackRequest storedRequest) { MemberProfile creator = memberProfileServices.getById(storedRequest.getCreatorId()); - MemberProfile reviewer = memberProfileServices.getById(storedRequest.getRecipientId()); + MemberProfile reviewerMemberProfile; + FeedbackExternalRecipient reviewerExternalRecipient; MemberProfile requestee = memberProfileServices.getById(storedRequest.getRequesteeId()); String senderName = MemberProfileUtils.getFullName(creator); UUID recipientOrExternalRecipientId; @@ -152,13 +156,15 @@ public void sendNewRequestEmail(FeedbackRequest storedRequest) { if (storedRequest.getExternalRecipientId() != null) { recipientOrExternalRecipientId = storedRequest.getExternalRecipientId(); - reviewerFirstName = ""; - reviewerEmail = ""; + reviewerExternalRecipient = feedbackExternalRecipientServices.getById(recipientOrExternalRecipientId); + reviewerFirstName = reviewerExternalRecipient.getFirstName(); + reviewerEmail = reviewerExternalRecipient.getEmail(); } else { - reviewer = memberProfileServices.getById(storedRequest.getRecipientId()); recipientOrExternalRecipientId = storedRequest.getRecipientId(); - reviewerFirstName = reviewer.getFirstName(); - reviewerEmail = reviewer.getWorkEmail(); + reviewerMemberProfile = memberProfileServices.getById(recipientOrExternalRecipientId); + recipientOrExternalRecipientId = storedRequest.getRecipientId(); + reviewerFirstName = reviewerMemberProfile.getFirstName(); + reviewerEmail = reviewerMemberProfile.getWorkEmail(); } String newContent = String.format( @@ -207,7 +213,10 @@ public FeedbackRequest update(FeedbackRequestUpdateDTO feedbackRequestUpdateDTO) reviewAssignmentsSet = reviewAssignmentRepository.findByReviewPeriodIdAndRevieweeId(feedbackRequest.getReviewPeriodId(), feedbackRequest.getRequesteeId()); } - boolean reassignAttempted = !Objects.equals(originalFeedback.getRecipientId(), feedbackRequest.getRecipientId()); + boolean reassignAttempted = false; + if ((!Objects.equals(originalFeedback.getRecipientId(), feedbackRequest.getRecipientId())) || (!Objects.equals(originalFeedback.getExternalRecipientId(), feedbackRequest.getExternalRecipientId()))) { + reassignAttempted = true; + } boolean dueDateUpdateAttempted = !Objects.equals(originalFeedback.getDueDate(), feedbackRequest.getDueDate()); boolean submitDateUpdateAttempted = !Objects.equals(originalFeedback.getSubmitDate(), feedbackRequest.getSubmitDate()); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index 30aaab22e2..3a91e3315b 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -396,7 +396,7 @@ void testCreateFeedbackRequestWithNoRecipients() { JsonNode body = responseException.getResponse().getBody(JsonNode.class).orElse(null); String error = Objects.requireNonNull(body).get("message").asText(); assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); - assertEquals("Cannot save feedback request without recipient/external-recipient ID", error); + assertEquals("Cannot save feedback request without both recipient and external-recipient ID", error); } @Test From a13ed8c0a76863d5e062ea4b3629b86505653e39 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Tue, 22 Oct 2024 09:35:58 -0400 Subject: [PATCH 011/102] 2024-10-22 - feedback - external reviewer - server-side --- .../FeedbackRequestServicesImpl.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index c659d0cab2..e8a20250a0 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -194,6 +194,10 @@ public FeedbackRequest update(FeedbackRequestUpdateDTO feedbackRequestUpdateDTO) * status has to be updated with any permissions--fired on submission from any recipient * submit date can be updated only when the recipient is logged in--fired on submission from any recipient */ + UUID recipientOrExternalRecipientId; + MemberProfile reviewerMemberProfile; + FeedbackExternalRecipient reviewerExternalRecipient; + String reviewerFirstName, reviewerEmail; final FeedbackRequest feedbackRequest = this.getFromDTO(feedbackRequestUpdateDTO); FeedbackRequest originalFeedback = null; @@ -255,7 +259,19 @@ public FeedbackRequest update(FeedbackRequestUpdateDTO feedbackRequestUpdateDTO) } FeedbackRequest storedRequest = feedbackReqRepository.update(feedbackRequest); - MemberProfile reviewer = memberProfileServices.getById(storedRequest.getRecipientId()); + + if (storedRequest.getExternalRecipientId() != null) { + recipientOrExternalRecipientId = storedRequest.getExternalRecipientId(); + reviewerExternalRecipient = feedbackExternalRecipientServices.getById(recipientOrExternalRecipientId); + reviewerFirstName = reviewerExternalRecipient.getFirstName(); + reviewerEmail = reviewerExternalRecipient.getEmail(); + } else { + recipientOrExternalRecipientId = storedRequest.getRecipientId(); + reviewerMemberProfile = memberProfileServices.getById(recipientOrExternalRecipientId); + reviewerFirstName = reviewerMemberProfile.getFirstName(); + reviewerEmail = reviewerMemberProfile.getWorkEmail(); + } + MemberProfile requestee = memberProfileServices.getById(storedRequest.getRequesteeId()); // Send email if the feedback request has been reopened for edits if (originalFeedback.getStatus().equals("submitted") && feedbackRequest.getStatus().equals("sent")) { @@ -263,12 +279,12 @@ public FeedbackRequest update(FeedbackRequestUpdateDTO feedbackRequestUpdateDTO) String senderName = MemberProfileUtils.getFullName(creator); String newContent = String.format( templateToString(updateRequestTemplate), - reviewer.getFirstName(), senderName, + reviewerFirstName, senderName, MemberProfileUtils.getFullName(requestee), String.format("%s/feedback/submit?request=%s", webURL, storedRequest.getId().toString())); - emailSender.sendEmail(senderName, creator.getWorkEmail(), notificationSubject, newContent, reviewer.getWorkEmail()); + emailSender.sendEmail(senderName, creator.getWorkEmail(), notificationSubject, newContent, reviewerEmail); } // Send email if the feedback request has been reassigned @@ -282,7 +298,8 @@ public FeedbackRequest update(FeedbackRequestUpdateDTO feedbackRequestUpdateDTO) } // Send email to reviewers. But, only when the requestee is the - // recipient (i.e., a self-review). + // recipient (i.e., a self-review) + // 2024-10-22 - This should not involve the external-recipient ID, only the recipient-id, since self-review should always only use recipient-id if (reviewAssignmentsSet != null && reviewAssignmentsSet.size() > 0 && feedbackRequest.getRequesteeId().equals(feedbackRequest.getRecipientId())) { sendSelfReviewCompletionEmailToReviewers(feedbackRequest, reviewAssignmentsSet); From 6723dc6330bb1e538d0515d2c681ecf3ca330471 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Tue, 22 Oct 2024 10:52:31 -0400 Subject: [PATCH 012/102] 2024-10-22 - feedback - external reviewer - server-side --- .../FeedbackRequestServicesImpl.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index e8a20250a0..f9949e0059 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -330,7 +330,8 @@ public FeedbackRequest getById(UUID id) { } final LocalDate sendDate = feedbackReq.get().getSendDate(); final UUID requesteeId = feedbackReq.get().getRequesteeId(); - final UUID recipientId = feedbackReq.get().getRecipientId(); + final UUID recipientId; + recipientId = feedbackReq.get().getRecipientId() != null ? feedbackReq.get().getRecipientId() : feedbackReq.get().getExternalRecipientId(); if (!getIsPermitted(requesteeId, recipientId, sendDate)) { throw new PermissionException(NOT_AUTHORIZED_MSG); } @@ -356,12 +357,14 @@ public List findByValues(UUID creatorId, UUID requesteeId, UUID feedbackReqList = feedbackReqList.stream().filter((FeedbackRequest request) -> { boolean visible = false; + final UUID recipientIdLocal; if (currentUserServices.isAdmin()) { visible = true; } else if (request != null) { if (currentUserId.equals(request.getCreatorId())) visible = true; if (isSupervisor(request.getRequesteeId(), currentUserId)) visible = true; - if (currentUserId.equals(request.getRecipientId())) visible = true; + recipientIdLocal = request.getRecipientId() != null ? request.getRecipientId() : request.getExternalRecipientId(); + if (currentUserId.equals(recipientIdLocal)) visible = true; } return visible; }).toList(); @@ -385,16 +388,16 @@ private boolean createIsPermitted(UUID requesteeId) { return isAdmin || currentUserId.equals(requesteePDL) || isRequesteesSupervisor || currentUserId.equals(requesteeId); } - private boolean getIsPermitted(UUID requesteeId, UUID recipientId, LocalDate sendDate) { + private boolean getIsPermitted(UUID requesteeId, UUID recipientOrExternalRecipientId, LocalDate sendDate) { LocalDate today = LocalDate.now(); final UUID currentUserId = currentUserServices.getCurrentUser().getId(); // The recipient can only access the feedback request after it has been sent - if (sendDate.isAfter(today) && currentUserId.equals(recipientId)) { + if (sendDate.isAfter(today) && currentUserId.equals(recipientOrExternalRecipientId)) { throw new PermissionException("You are not permitted to access this request before the send date."); } - return createIsPermitted(requesteeId) || currentUserId.equals(recipientId); + return createIsPermitted(requesteeId) || currentUserId.equals(recipientOrExternalRecipientId); } private boolean updateDueDateIsPermitted(FeedbackRequest feedbackRequest) { @@ -427,6 +430,7 @@ private FeedbackRequest getFromDTO(FeedbackRequestUpdateDTO dto) { feedbackRequest.setStatus(dto.getStatus()); feedbackRequest.setSubmitDate(dto.getSubmitDate()); feedbackRequest.setRecipientId(dto.getRecipientId()); + feedbackRequest.setExternalRecipientId(dto.getExternalRecipientId()); return feedbackRequest; } From 72f24b2548b07c20f5e1e61d1655623701fd0c82 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Tue, 22 Oct 2024 11:47:50 -0400 Subject: [PATCH 013/102] 2024-10-22 - feedback - external reviewer - server-side --- .../FeedbackExternalRecipient.java | 2 +- .../FeedbackRequestControllerTest.java | 49 ++++++++++--------- .../FeedbackExternalRecipientFixture.java | 22 +++++++++ .../fixture/FeedbackRequestFixture.java | 40 +++++++++++---- .../services/fixture/RepositoryFixture.java | 6 +++ 5 files changed, 85 insertions(+), 34 deletions(-) create mode 100644 server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackExternalRecipientFixture.java diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java index 85d03ae764..67a5871fba 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java @@ -35,7 +35,7 @@ public class FeedbackExternalRecipient { @NotNull @Column(name="email") @ColumnTransformer( - read = "pgp_sym_decrypt(workEmail::bytea,'${aes.key}')", + read = "pgp_sym_decrypt(email::bytea,'${aes.key}')", write = "pgp_sym_encrypt(?,'${aes.key}') " ) @Schema(description = "email of the feedback external recipient") diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index 3a91e3315b..8a951bfad9 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -5,10 +5,12 @@ import com.objectcomputing.checkins.notifications.email.MailJetFactory; import com.objectcomputing.checkins.services.MailJetFactoryReplacement; import com.objectcomputing.checkins.services.TestContainersSuite; +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipient; import com.objectcomputing.checkins.services.feedback_template.FeedbackTemplate; import com.objectcomputing.checkins.services.fixture.FeedbackRequestFixture; import com.objectcomputing.checkins.services.fixture.FeedbackTemplateFixture; import com.objectcomputing.checkins.services.fixture.MemberProfileFixture; +import com.objectcomputing.checkins.services.fixture.FeedbackExternalRecipientFixture; import com.objectcomputing.checkins.services.fixture.ReviewPeriodFixture; import com.objectcomputing.checkins.services.fixture.RoleFixture; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; @@ -45,7 +47,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; @Property(name = "replace.mailjet.factory", value = StringUtils.TRUE) -class FeedbackRequestControllerTest extends TestContainersSuite implements MemberProfileFixture, FeedbackTemplateFixture, FeedbackRequestFixture, RoleFixture, ReviewPeriodFixture { +class FeedbackRequestControllerTest extends TestContainersSuite implements MemberProfileFixture, FeedbackTemplateFixture, FeedbackRequestFixture, RoleFixture, ReviewPeriodFixture, FeedbackExternalRecipientFixture { @Inject @Client("/services/feedback/requests") @@ -80,6 +82,7 @@ private FeedbackRequestCreateDTO createDTO(FeedbackRequest feedbackRequest) { dto.setDueDate(feedbackRequest.getDueDate()); dto.setStatus(feedbackRequest.getStatus()); dto.setSubmitDate(feedbackRequest.getSubmitDate()); + dto.setExternalRecipientId(feedbackRequest.getExternalRecipientId()); return dto; } @@ -120,7 +123,7 @@ private void assertResponseEqualsEntity(FeedbackRequest feedbackRequest, Feedbac } @Test - void testCreateFeedbackRequestByAdmin() { + void testCreateFeedbackRequestByAdminToRecipient() { //create two member profiles: one for normal employee, one for admin final MemberProfile memberProfile = createADefaultMemberProfile(); final MemberProfile admin = getMemberProfileRepository().save(mkMemberProfile("admin")); @@ -128,7 +131,7 @@ void testCreateFeedbackRequestByAdmin() { assignAdminRole(admin); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, memberProfile, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, memberProfile, recipient); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); //send feedback request @@ -147,11 +150,11 @@ void testCreateFeedbackRequestByAdminToExternalRecipient() { //create two member profiles: one for normal employee, one for admin final MemberProfile memberProfile = createADefaultMemberProfile(); final MemberProfile admin = getMemberProfileRepository().save(mkMemberProfile("admin")); - final MemberProfile recipient = createADefaultRecipient(); + final FeedbackExternalRecipient feedbackExternalRecipient = createADefaultFeedbackExternalRecipient(); assignAdminRole(admin); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, memberProfile, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithExternalRecipient(admin, memberProfile, feedbackExternalRecipient); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); //send feedback request @@ -174,7 +177,7 @@ void testCreateFeedbackRequestByAssignedPDL() { final MemberProfile recipient = createADefaultRecipient(); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, employeeMemberProfile, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(pdlMemberProfile, employeeMemberProfile, recipient); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); //send feedback request @@ -198,7 +201,7 @@ void testCreateFeedbackRequestSendsEmailNow() { final MemberProfile recipient = createADefaultRecipient(); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, employeeMemberProfile, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(pdlMemberProfile, employeeMemberProfile, recipient); feedbackRequest.setSendDate(LocalDate.now()); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -230,7 +233,7 @@ void testCreateFeedbackRequestSendsEmailFuture() { final MemberProfile recipient = createADefaultRecipient(); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, employeeMemberProfile, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(pdlMemberProfile, employeeMemberProfile, recipient); feedbackRequest.setSendDate(LocalDate.now().plusDays(1)); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -253,7 +256,7 @@ void testCreateFeedbackRequestByUnassignedPdl() { MemberProfile recipient = createAnUnrelatedUser(); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequest(memberProfileForPDL, memberProfile, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(memberProfileForPDL, memberProfile, recipient); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); //send feedback request @@ -273,7 +276,7 @@ void testCreateFeedbackRequestByMember() { MemberProfile recipient = createAnUnrelatedUser(); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequest(requesteeProfile, memberProfile, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(requesteeProfile, memberProfile, recipient); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); //send feedback request @@ -293,7 +296,7 @@ void testCreateFeedbackRequestWithInvalidCreatorId() { assignAdminRole(admin); // Create feedback request with invalid creator ID - final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); feedbackRequest.setCreatorId(UUID.randomUUID()); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -315,7 +318,7 @@ void testCreateFeedbackRequestWithInvalidRecipientId() { assignAdminRole(admin); // Create feedback request with invalid recipient ID - final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); feedbackRequest.setRecipientId(UUID.randomUUID()); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -337,7 +340,7 @@ void testCreateFeedbackRequestWithInvalidRequesteeId() { assignAdminRole(admin); // Create feedback request with invalid requestee ID - final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); feedbackRequest.setRequesteeId(UUID.randomUUID()); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -359,7 +362,7 @@ void testCreateFeedbackRequestWithNoRequestee() { assignAdminRole(admin); // Create feedback request with no requestee - final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); feedbackRequest.setRequesteeId(null); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -383,7 +386,7 @@ void testCreateFeedbackRequestWithNoRecipients() { assignAdminRole(admin); // Create feedback request with no recipient(s) - final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); feedbackRequest.setRecipientId(null); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -407,7 +410,7 @@ void testCreateFeedbackRequestWithNoSelectedTemplate() { assignAdminRole(admin); // Create feedback request with no template - final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); feedbackRequest.setTemplateId(null); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -431,7 +434,7 @@ void testCreateFeedbackRequestWithSendDateAfterDueDate() { assignAdminRole(admin); // Create feedback request with invalid requestee ID - final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); feedbackRequest.setSendDate(LocalDate.of(1111, 11, 2)); feedbackRequest.setDueDate(LocalDate.of(1111, 11, 1)); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -1006,7 +1009,7 @@ void testUpdateSubmitDateNotAuthorized() { MemberProfile recipient = createADefaultRecipient(); // Save feedback request that has not been submitted yet - final FeedbackRequest feedbackReq = createFeedbackRequest(pdl, requestee, recipient); + final FeedbackRequest feedbackReq = createFeedbackRequestWithRecipient(pdl, requestee, recipient); feedbackReq.setSubmitDate(null); getFeedbackRequestRepository().save(feedbackReq); @@ -1030,7 +1033,7 @@ void testUpdateSubmitDateWhenPdlEnablesEdits() { MemberProfile recipient = createADefaultRecipient(); // Save feedback request that has already been submitted - final FeedbackRequest feedbackReq = createFeedbackRequest(pdl, requestee, recipient); + final FeedbackRequest feedbackReq = createFeedbackRequestWithRecipient(pdl, requestee, recipient); feedbackReq.setSubmitDate(LocalDate.now()); getFeedbackRequestRepository().save(feedbackReq); @@ -1055,7 +1058,7 @@ void testFeedbackRequestEnableEditsSendsEmail() { MemberProfile recipient = createADefaultRecipient(); // Save feedback request that has already been submitted - final FeedbackRequest feedbackReq = createFeedbackRequest(pdl, requestee, recipient); + final FeedbackRequest feedbackReq = createFeedbackRequestWithRecipient(pdl, requestee, recipient); feedbackReq.setSubmitDate(LocalDate.now()); feedbackReq.setStatus("submitted"); getFeedbackRequestRepository().save(feedbackReq); @@ -1272,7 +1275,7 @@ void testRecipientGetBeforeSendDateNotAuthorized() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); MemberProfile recipient = createADefaultRecipient(); - FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, requestee, recipient); + FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(pdlMemberProfile, requestee, recipient); feedbackRequest.setSendDate(LocalDate.now().plusDays(1)); getFeedbackRequestRepository().save(feedbackRequest); @@ -1296,7 +1299,7 @@ void testRecipientGetBeforeSendDateAsAdminAuthorized() { assignAdminRole(adminUser); // Save feedback request with send date in the future - FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, requestee, recipient); + FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(pdlMemberProfile, requestee, recipient); feedbackRequest.setSendDate(LocalDate.now().plusDays(1)); getFeedbackRequestRepository().save(feedbackRequest); @@ -1318,7 +1321,7 @@ void testRecipientGetBeforeSendDateAsPdlAuthorized() { MemberProfile recipient = createADefaultRecipient(); // Save feedback request with send date in the future - FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, requestee, recipient); + FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(pdlMemberProfile, requestee, recipient); feedbackRequest.setSendDate(LocalDate.now().plusDays(1)); getFeedbackRequestRepository().save(feedbackRequest); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackExternalRecipientFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackExternalRecipientFixture.java new file mode 100644 index 0000000000..402dca8ba7 --- /dev/null +++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackExternalRecipientFixture.java @@ -0,0 +1,22 @@ +package com.objectcomputing.checkins.services.fixture; + +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipient; +import com.objectcomputing.checkins.services.memberprofile.MemberProfile; + +import java.time.LocalDate; +import java.util.Map; + +public interface FeedbackExternalRecipientFixture extends RepositoryFixture { + + default FeedbackExternalRecipient createADefaultFeedbackExternalRecipient() { + String email = "externalRecipient@example.com"; + String firstName = "External-01"; + String lastName = "Recipient"; + String companyName = "Company Name"; + + return getFeedbackExternalRecipientRepository().save(new FeedbackExternalRecipient( + email, firstName, lastName, companyName + )); + } + +} diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java index d517866d9c..a94ec13b29 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java @@ -1,4 +1,5 @@ package com.objectcomputing.checkins.services.fixture; +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipient; import com.objectcomputing.checkins.services.feedback_request.FeedbackRequest; import com.objectcomputing.checkins.services.feedback_template.FeedbackTemplate; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; @@ -19,9 +20,22 @@ public interface FeedbackRequestFixture extends RepositoryFixture, FeedbackTempl * @param templateId The UUID of the FeedbackTemplate * @return The created {@link FeedbackRequest} */ - default FeedbackRequest createSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId) { + default FeedbackRequest createSampleFeedbackRequestWithRecipient(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId) { LocalDate testDate = LocalDate.of(2010, 10, 8); - return new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, null, null); /** TODO Luc reciplientg **/ + return new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, null, null); + } + + /** + * Creates a sample feedback request + * @param creator The {@link MemberProfile} of the creator of the feedback request + * @param requestee The {@link MemberProfile} of the requestee of the feedback request + * @param externalRecipient The {@link MemberProfile} of the member giving feedback + * @param templateId The UUID of the FeedbackTemplate + * @return The created {@link FeedbackRequest} + */ + default FeedbackRequest createSampleFeedbackRequestWithExternalRecipient(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient externalRecipient, UUID templateId) { + LocalDate testDate = LocalDate.of(2010, 10, 8); + return new FeedbackRequest(creator.getId(), requestee.getId(), null, templateId, testDate, null, "pending", null, null, externalRecipient.getId()); } /** @@ -33,7 +47,7 @@ default FeedbackRequest createSampleFeedbackRequest(MemberProfile creator, Membe * @param reviewPeriod the {@link ReviewPeriod} that this feedback request is associated with * @return The created {@link FeedbackRequest} */ - default FeedbackRequest createSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId, ReviewPeriod reviewPeriod) { + default FeedbackRequest createSampleFeedbackRequestWithRecipient(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId, ReviewPeriod reviewPeriod) { LocalDate testDate = LocalDate.of(2010, 10, 8); return new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, reviewPeriod.getId(), null); /** TODO Luch reciplientg **/ } @@ -85,30 +99,36 @@ default MemberProfile createASecondDefaultRecipient() { null, null, null, false, false, null)); } - default FeedbackRequest createFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient) { + default FeedbackRequest createFeedbackRequestWithRecipient(MemberProfile creator, MemberProfile requestee, MemberProfile recipient) { + FeedbackTemplate template = createFeedbackTemplate(creator.getId()); + getFeedbackTemplateRepository().save(template); + return createSampleFeedbackRequestWithRecipient(creator, requestee, recipient, template.getId()); + } + + default FeedbackRequest createFeedbackRequestWithExternalRecipient(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient externalRecipient) { FeedbackTemplate template = createFeedbackTemplate(creator.getId()); getFeedbackTemplateRepository().save(template); - return createSampleFeedbackRequest(creator, requestee, recipient, template.getId()); + return createSampleFeedbackRequestWithExternalRecipient(creator, requestee, externalRecipient, template.getId()); } - default FeedbackRequest createFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, ReviewPeriod reviewPeriod) { + default FeedbackRequest createFeedbackRequestWithRecipient(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, ReviewPeriod reviewPeriod) { FeedbackTemplate template = createAnotherFeedbackTemplate(creator.getId()); getFeedbackTemplateRepository().save(template); - return createSampleFeedbackRequest(creator, requestee, recipient, template.getId(), reviewPeriod); + return createSampleFeedbackRequestWithRecipient(creator, requestee, recipient, template.getId(), reviewPeriod); } default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient) { - final FeedbackRequest feedbackRequest = createFeedbackRequest(creator, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(creator, requestee, recipient); return saveSampleFeedbackRequest(creator, requestee, recipient, feedbackRequest.getTemplateId()); } default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, ReviewPeriod reviewPeriod) { - final FeedbackRequest feedbackRequest = createFeedbackRequest(creator, requestee, recipient, reviewPeriod); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(creator, requestee, recipient, reviewPeriod); return saveSampleFeedbackRequest(creator, requestee, recipient, feedbackRequest.getTemplateId(), reviewPeriod); } default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, LocalDate sendDate) { - final FeedbackRequest feedbackRequest = createFeedbackRequest(creator, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(creator, requestee, recipient); feedbackRequest.setSendDate(sendDate); return getFeedbackRequestRepository().save(feedbackRequest); } diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/RepositoryFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/RepositoryFixture.java index 2e3cd798e0..fd861e5662 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/fixture/RepositoryFixture.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/RepositoryFixture.java @@ -11,6 +11,8 @@ import com.objectcomputing.checkins.services.checkindocument.CheckinDocumentRepository; import com.objectcomputing.checkins.services.checkins.CheckInRepository; import com.objectcomputing.checkins.services.demographics.DemographicsRepository; +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipient; +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientRepository; import com.objectcomputing.checkins.services.feedback_template.template_question.TemplateQuestionRepository; import com.objectcomputing.checkins.services.feedback_answer.FeedbackAnswerRepository; import com.objectcomputing.checkins.services.feedback_request.FeedbackRequestRepository; @@ -238,4 +240,8 @@ default DocumentRepository getDocumentRepository() { default RoleDocumentationRepository getRoleDocumentationRepository() { return getEmbeddedServer().getApplicationContext().getBean(RoleDocumentationRepository.class); } + + default FeedbackExternalRecipientRepository getFeedbackExternalRecipientRepository() { + return getEmbeddedServer().getApplicationContext().getBean(FeedbackExternalRecipientRepository.class); + } } From f8cee94025b2da0a097129b451be2852454ca8d2 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Tue, 22 Oct 2024 14:19:32 -0400 Subject: [PATCH 014/102] 2024-10-22 - feedback - external reviewer - server-side --- .../FeedbackRequestRepository.java | 2 +- .../FeedbackRequestServicesImpl.java | 2 +- .../FeedbackRequestControllerTest.java | 398 ++++++++++++++++-- .../fixture/FeedbackRequestFixture.java | 40 +- 4 files changed, 400 insertions(+), 42 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestRepository.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestRepository.java index 2ca96b44e1..3ea7034ab0 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestRepository.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestRepository.java @@ -33,7 +33,7 @@ public interface FeedbackRequestRepository extends CrudRepository findByValues(@Nullable String creatorId, @Nullable String recipientId, @Nullable LocalDate oldestDate, @Nullable String reviewPeriodId, @Nullable String templateId, @TypeDef(type = DataType.STRING_ARRAY) List requesteeIds, @Nullable String externalRecipientId); + List findByValuesWithRequesteeIds(@Nullable String creatorId, @Nullable String recipientId, @Nullable LocalDate oldestDate, @Nullable String reviewPeriodId, @Nullable String templateId, @Nullable String externalRecipientId, @TypeDef(type = DataType.STRING_ARRAY) List requesteeIds); @Query(value = "SELECT * " + "FROM feedback_requests " + diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index f9949e0059..63a14fd1c9 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -349,7 +349,7 @@ public List findByValues(UUID creatorId, UUID requesteeId, UUID List feedbackReqList = new ArrayList<>(); if (requesteeIds != null && !requesteeIds.isEmpty()) { LOG.debug("Finding feedback requests for {} requesteeIds.", requesteeIds.size()); - feedbackReqList.addAll(feedbackReqRepository.findByValues(Util.nullSafeUUIDToString(creatorId), Util.nullSafeUUIDToString(recipientId), oldestDate, Util.nullSafeUUIDToString(reviewPeriodId), Util.nullSafeUUIDToString(templateId), Util.nullSafeUUIDListToStringList(requesteeIds), Util.nullSafeUUIDToString(externalRecipientId))); + feedbackReqList.addAll(feedbackReqRepository.findByValuesWithRequesteeIds(Util.nullSafeUUIDToString(creatorId), Util.nullSafeUUIDToString(recipientId), oldestDate, Util.nullSafeUUIDToString(reviewPeriodId), Util.nullSafeUUIDToString(templateId), Util.nullSafeUUIDToString(externalRecipientId), Util.nullSafeUUIDListToStringList(requesteeIds))); } else { LOG.debug("Finding feedback requests one or fewer requesteeIds: {}", requesteeId); feedbackReqList.addAll(feedbackReqRepository.findByValues(Util.nullSafeUUIDToString(creatorId), Util.nullSafeUUIDToString(requesteeId), Util.nullSafeUUIDToString(recipientId), oldestDate, Util.nullSafeUUIDToString(reviewPeriodId), Util.nullSafeUUIDToString(templateId), Util.nullSafeUUIDToString(externalRecipientId))); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index 8a951bfad9..77a19aaa37 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -99,6 +99,7 @@ private FeedbackRequestUpdateDTO updateDTO(FeedbackRequest feedbackRequest) { dto.setStatus(feedbackRequest.getStatus()); dto.setSubmitDate(feedbackRequest.getSubmitDate()); dto.setRecipientId(feedbackRequest.getRecipientId()); + dto.setExternalRecipientId(feedbackRequest.getExternalRecipientId()); return dto; } @@ -120,6 +121,7 @@ private void assertResponseEqualsEntity(FeedbackRequest feedbackRequest, Feedbac assertEquals(feedbackRequest.getSendDate(), dto.getSendDate()); assertEquals(feedbackRequest.getDueDate(), dto.getDueDate()); assertEquals(feedbackRequest.getRecipientId(), dto.getRecipientId()); + assertEquals(feedbackRequest.getExternalRecipientId(), dto.getExternalRecipientId()); } @Test @@ -131,7 +133,7 @@ void testCreateFeedbackRequestByAdminToRecipient() { assignAdminRole(admin); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, memberProfile, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, memberProfile, recipient); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); //send feedback request @@ -154,7 +156,7 @@ void testCreateFeedbackRequestByAdminToExternalRecipient() { assignAdminRole(admin); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequestWithExternalRecipient(admin, memberProfile, feedbackExternalRecipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, memberProfile, feedbackExternalRecipient); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); //send feedback request @@ -169,7 +171,7 @@ void testCreateFeedbackRequestByAdminToExternalRecipient() { } @Test - void testCreateFeedbackRequestByAssignedPDL() { + void testCreateFeedbackRequestByAssignedPdlToRecipient() { //create two member profiles: one for normal employee, one for PDL of normal employee final MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); @@ -177,7 +179,7 @@ void testCreateFeedbackRequestByAssignedPDL() { final MemberProfile recipient = createADefaultRecipient(); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(pdlMemberProfile, employeeMemberProfile, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, employeeMemberProfile, recipient); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); //send feedback request @@ -191,9 +193,31 @@ void testCreateFeedbackRequestByAssignedPDL() { assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); } + @Test + void testCreateFeedbackRequestByAssignedPdlToExternalRecipient() { + //create two member profiles: one for normal employee, one for PDL of normal employee + final MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + final MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient feedbackExternalRecipient = createADefaultFeedbackExternalRecipient(); + + //create feedback request + final FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, employeeMemberProfile, feedbackExternalRecipient); + final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); + + //send feedback request + final HttpRequest request = HttpRequest.POST("", dto) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + //assert that content of some feedback request equals the test + assertEquals(HttpStatus.CREATED, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); + } @Test - void testCreateFeedbackRequestSendsEmailNow() { + void testCreateFeedbackRequestSendsEmailNowToRecipient() { //create two member profiles: one for normal employee, one for PDL of normal employee final MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); @@ -201,7 +225,7 @@ void testCreateFeedbackRequestSendsEmailNow() { final MemberProfile recipient = createADefaultRecipient(); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(pdlMemberProfile, employeeMemberProfile, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, employeeMemberProfile, recipient); feedbackRequest.setSendDate(LocalDate.now()); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -225,7 +249,39 @@ void testCreateFeedbackRequestSendsEmailNow() { } @Test - void testCreateFeedbackRequestSendsEmailFuture() { + void testCreateFeedbackRequestSendsEmailNowToExternalRecipient() { + //create two member profiles: one for normal employee, one for PDL of normal employee + final MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + final MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + + //create feedback request + final FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient); + feedbackRequest.setSendDate(LocalDate.now()); + final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); + + //send feedback request + final HttpRequest request = HttpRequest.POST("", dto) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + String fromName = pdlMemberProfile.getFirstName() + " " + pdlMemberProfile.getLastName(); + //verify appropriate email was sent + assertTrue(response.getBody().isPresent()); + assertEquals(1, emailSender.events.size()); + EmailHelper.validateEmail("SEND_EMAIL", + fromName, + pdlMemberProfile.getWorkEmail(), + checkInsConfiguration.getApplication().getFeedback().getRequestSubject(), + "You have received a feedback request", + externalRecipient.getEmail(), + emailSender.events.getFirst() + ); + } + + @Test + void testCreateFeedbackRequestSendsEmailFutureToRecipient() { //create two member profiles: one for normal employee, one for PDL of normal employee final MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); @@ -233,7 +289,7 @@ void testCreateFeedbackRequestSendsEmailFuture() { final MemberProfile recipient = createADefaultRecipient(); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(pdlMemberProfile, employeeMemberProfile, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, employeeMemberProfile, recipient); feedbackRequest.setSendDate(LocalDate.now().plusDays(1)); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -248,7 +304,30 @@ void testCreateFeedbackRequestSendsEmailFuture() { } @Test - void testCreateFeedbackRequestByUnassignedPdl() { + void testCreateFeedbackRequestSendsEmailFutureToExternalRecipient() { + //create two member profiles: one for normal employee, one for PDL of normal employee + final MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + final MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + + //create feedback request + final FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient); + feedbackRequest.setSendDate(LocalDate.now().plusDays(1)); + final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); + + //send feedback request + final HttpRequest request = HttpRequest.POST("", dto) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + //verify appropriate email was not sent + assertTrue(response.getBody().isPresent()); + assertEquals(0, emailSender.events.size()); + } + + @Test + void testCreateFeedbackRequestByUnassignedPdlToRecipient() { //create two member profiles: one for normal employee, one for PDL of normal employee MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile memberProfileForPDL = createASecondDefaultMemberProfile(); @@ -256,7 +335,7 @@ void testCreateFeedbackRequestByUnassignedPdl() { MemberProfile recipient = createAnUnrelatedUser(); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(memberProfileForPDL, memberProfile, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(memberProfileForPDL, memberProfile, recipient); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); //send feedback request @@ -269,14 +348,35 @@ void testCreateFeedbackRequestByUnassignedPdl() { } @Test - void testCreateFeedbackRequestByMember() { + void testCreateFeedbackRequestByUnassignedPdlToExternalRecipient() { + //create two member profiles: one for normal employee, one for PDL of normal employee + MemberProfile memberProfile = createADefaultMemberProfile(); + MemberProfile memberProfileForPDL = createASecondDefaultMemberProfile(); + assignPdlRole(memberProfileForPDL); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + + //create feedback request + final FeedbackRequest feedbackRequest = createFeedbackRequest(memberProfileForPDL, memberProfile, externalRecipient); + final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); + + //send feedback request + final HttpRequest request = HttpRequest.POST("", dto) + .basicAuth(memberProfileForPDL.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertUnauthorized(responseException); + } + + @Test + void testCreateFeedbackRequestByMemberToRecipient() { //create two member profiles: one for normal employee, one for PDL of normal employee MemberProfile memberProfile = createADefaultMemberProfile(); MemberProfile requesteeProfile = createASecondDefaultMemberProfile(); MemberProfile recipient = createAnUnrelatedUser(); //create feedback request - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(requesteeProfile, memberProfile, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(requesteeProfile, memberProfile, recipient); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); //send feedback request @@ -289,14 +389,56 @@ void testCreateFeedbackRequestByMember() { } @Test - void testCreateFeedbackRequestWithInvalidCreatorId() { + void testCreateFeedbackRequestByMemberToExternalRecipient() { + //create two member profiles: one for normal employee, one for PDL of normal employee + MemberProfile memberProfile = createADefaultMemberProfile(); + MemberProfile requesteeProfile = createASecondDefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + + //create feedback request + final FeedbackRequest feedbackRequest = createFeedbackRequest(requesteeProfile, memberProfile, externalRecipient); + final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); + + //send feedback request + final HttpRequest request = HttpRequest.POST("", dto) + .basicAuth(requesteeProfile.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertEquals(HttpStatus.FORBIDDEN, responseException.getStatus()); + } + + @Test + void testCreateFeedbackRequestWithInvalidCreatorIdToRecipient() { MemberProfile admin = createADefaultMemberProfile(); MemberProfile requestee = createASecondDefaultMemberProfile(); MemberProfile recipient = createADefaultRecipient(); assignAdminRole(admin); // Create feedback request with invalid creator ID - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); + feedbackRequest.setCreatorId(UUID.randomUUID()); + final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); + + // Post feedback request + final HttpRequest request = HttpRequest.POST("", dto) + .basicAuth(admin.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); + assertEquals("Cannot save feedback request with invalid creator ID", responseException.getMessage()); + } + + @Test + void testCreateFeedbackRequestWithInvalidCreatorIdToExternalRecipient() { + MemberProfile admin = createADefaultMemberProfile(); + MemberProfile requestee = createASecondDefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + assignAdminRole(admin); + + // Create feedback request with invalid creator ID + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, externalRecipient); feedbackRequest.setCreatorId(UUID.randomUUID()); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -318,7 +460,7 @@ void testCreateFeedbackRequestWithInvalidRecipientId() { assignAdminRole(admin); // Create feedback request with invalid recipient ID - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); feedbackRequest.setRecipientId(UUID.randomUUID()); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -333,14 +475,36 @@ void testCreateFeedbackRequestWithInvalidRecipientId() { } @Test - void testCreateFeedbackRequestWithInvalidRequesteeId() { + void testCreateFeedbackRequestWithInvalidExternalRecipientId() { + MemberProfile admin = createADefaultMemberProfile(); + MemberProfile requestee = createASecondDefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + assignAdminRole(admin); + + // Create feedback request with invalid recipient ID + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, externalRecipient); + feedbackRequest.setExternalRecipientId(UUID.randomUUID()); + final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); + + // Post feedback request + final HttpRequest request = HttpRequest.POST("", dto) + .basicAuth(admin.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); + assertEquals("Cannot save feedback request with invalid external-recipient ID", responseException.getMessage()); + } + + @Test + void testCreateFeedbackRequestWithInvalidRequesteeIdToRecipient() { MemberProfile admin = createADefaultMemberProfile(); MemberProfile requestee = createASecondDefaultMemberProfile(); MemberProfile recipient = createADefaultRecipient(); assignAdminRole(admin); // Create feedback request with invalid requestee ID - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); feedbackRequest.setRequesteeId(UUID.randomUUID()); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -355,14 +519,60 @@ void testCreateFeedbackRequestWithInvalidRequesteeId() { } @Test - void testCreateFeedbackRequestWithNoRequestee() { + void testCreateFeedbackRequestWithInvalidRequesteeIdToExternalRecipient() { + MemberProfile admin = createADefaultMemberProfile(); + MemberProfile requestee = createASecondDefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + assignAdminRole(admin); + + // Create feedback request with invalid requestee ID + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, externalRecipient); + feedbackRequest.setRequesteeId(UUID.randomUUID()); + final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); + + // Post feedback request + final HttpRequest request = HttpRequest.POST("", dto) + .basicAuth(admin.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); + assertEquals("Cannot save feedback request with invalid requestee ID", responseException.getMessage()); + } + + @Test + void testCreateFeedbackRequestWithNoRequesteeToRecipient() { MemberProfile admin = createADefaultMemberProfile(); MemberProfile requestee = createASecondDefaultMemberProfile(); MemberProfile recipient = createADefaultRecipient(); assignAdminRole(admin); // Create feedback request with no requestee - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); + feedbackRequest.setRequesteeId(null); + final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); + + // Post feedback request + final HttpRequest request = HttpRequest.POST("", dto) + .basicAuth(admin.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + JsonNode body = responseException.getResponse().getBody(JsonNode.class).orElse(null); + String error = Objects.requireNonNull(body).get("_embedded").get("errors").get(0).get("message").asText(); + assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); + assertEquals("requestBody.requesteeId: must not be null", error); + } + + @Test + void testCreateFeedbackRequestWithNoRequesteeToExternalRecipient() { + MemberProfile admin = createADefaultMemberProfile(); + MemberProfile requestee = createASecondDefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + assignAdminRole(admin); + + // Create feedback request with no requestee + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, externalRecipient); feedbackRequest.setRequesteeId(null); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -386,7 +596,7 @@ void testCreateFeedbackRequestWithNoRecipients() { assignAdminRole(admin); // Create feedback request with no recipient(s) - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); feedbackRequest.setRecipientId(null); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -402,6 +612,31 @@ void testCreateFeedbackRequestWithNoRecipients() { assertEquals("Cannot save feedback request without both recipient and external-recipient ID", error); } + @Test + void testCreateFeedbackRequestWithBothRecipientsAndExternalRecipients() { + MemberProfile admin = createADefaultMemberProfile(); + MemberProfile requestee = createASecondDefaultMemberProfile(); + MemberProfile recipient = createADefaultRecipient(); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + assignAdminRole(admin); + + // Create feedback request with both a recipient and an external recipient + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); + feedbackRequest.setExternalRecipientId(externalRecipient.getId()); + final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); + + // Post feedback request + final HttpRequest request = HttpRequest.POST("", dto) + .basicAuth(admin.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + JsonNode body = responseException.getResponse().getBody(JsonNode.class).orElse(null); + String error = Objects.requireNonNull(body).get("message").asText(); + assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); + assertEquals("Cannot save feedback request with both recipient and external-recipient ID", error); + } + @Test void testCreateFeedbackRequestWithNoSelectedTemplate() { MemberProfile admin = createADefaultMemberProfile(); @@ -410,7 +645,7 @@ void testCreateFeedbackRequestWithNoSelectedTemplate() { assignAdminRole(admin); // Create feedback request with no template - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); feedbackRequest.setTemplateId(null); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -434,7 +669,7 @@ void testCreateFeedbackRequestWithSendDateAfterDueDate() { assignAdminRole(admin); // Create feedback request with invalid requestee ID - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(admin, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(admin, requestee, recipient); feedbackRequest.setSendDate(LocalDate.of(1111, 11, 2)); feedbackRequest.setDueDate(LocalDate.of(1111, 11, 1)); final FeedbackRequestCreateDTO dto = createDTO(feedbackRequest); @@ -450,7 +685,7 @@ void testCreateFeedbackRequestWithSendDateAfterDueDate() { } @Test - void testGetFeedbackRequestByAdmin() { + void testGetFeedbackRequestByAdminToRecipient() { //Create users MemberProfile adminMemberProfile = createADefaultMemberProfile(); MemberProfile pdlMemberProfile = createASecondDefaultMemberProfile(); @@ -476,7 +711,32 @@ void testGetFeedbackRequestByAdmin() { } @Test - void testGetFeedbackRequestByAssignedPDL() { + void testGetFeedbackRequestByAdminToExternalRecipient() { + //Create users + MemberProfile adminMemberProfile = createADefaultMemberProfile(); + MemberProfile pdlMemberProfile = createASecondDefaultMemberProfile(); + MemberProfile requesteeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + + //Setup Roles and permissions for users + assignAdminRole(adminMemberProfile); + assignPdlRole(pdlMemberProfile); + assignMemberRole(requesteeMemberProfile); + + FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requesteeMemberProfile, externalRecipient); + + //get feedback request + final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())) + .basicAuth(adminMemberProfile.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); + } + + @Test + void testGetFeedbackRequestByAssignedPDLToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); @@ -494,7 +754,25 @@ void testGetFeedbackRequestByAssignedPDL() { } @Test - void testGetFeedbackRequestByUnassignedPdl() { + void testGetFeedbackRequestByAssignedPDLToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient); + + //get feedback request + final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); + } + + @Test + void testGetFeedbackRequestByUnassignedPdlToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); MemberProfile unrelatedPdl = createASecondDefaultMemberProfile(); assignPdlRole(unrelatedPdl); @@ -512,7 +790,25 @@ void testGetFeedbackRequestByUnassignedPdl() { } @Test - void testGetFeedbackRequestByRequestee() { + void testGetFeedbackRequestByUnassignedPdlToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + MemberProfile unrelatedPdl = createASecondDefaultMemberProfile(); + assignPdlRole(unrelatedPdl); + MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient); + + //get feedback request + final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())) + .basicAuth(unrelatedPdl.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertUnauthorized(responseException); + } + + @Test + void testGetFeedbackRequestByRequesteeToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); @@ -530,6 +826,25 @@ void testGetFeedbackRequestByRequestee() { assertUnauthorized(responseException); } + @Test + void testGetFeedbackRequestByRequesteeToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + MemberProfile memberProfile2 = createASecondDefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient); + + //get feedback request + final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())) + .basicAuth(memberProfile2.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + // requestee should not be able to get the feedback request about them + assertUnauthorized(responseException); + } + @Test void testGetFeedbackRequestByRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); @@ -549,6 +864,25 @@ void testGetFeedbackRequestByRecipient() { assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); } + @Test + void testGetFeedbackRequestByExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient); + + //get feedback request + final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())) + .basicAuth(externalRecipient.getEmail(), RoleType.Constants.MEMBER_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + // recipient must be able to get the feedback request + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); + } + @Test void testGetFeedbackRequestByReviewPeriodId() { ReviewPeriod reviewPeriod = createADefaultReviewPeriod(); @@ -1009,7 +1343,7 @@ void testUpdateSubmitDateNotAuthorized() { MemberProfile recipient = createADefaultRecipient(); // Save feedback request that has not been submitted yet - final FeedbackRequest feedbackReq = createFeedbackRequestWithRecipient(pdl, requestee, recipient); + final FeedbackRequest feedbackReq = createFeedbackRequest(pdl, requestee, recipient); feedbackReq.setSubmitDate(null); getFeedbackRequestRepository().save(feedbackReq); @@ -1033,7 +1367,7 @@ void testUpdateSubmitDateWhenPdlEnablesEdits() { MemberProfile recipient = createADefaultRecipient(); // Save feedback request that has already been submitted - final FeedbackRequest feedbackReq = createFeedbackRequestWithRecipient(pdl, requestee, recipient); + final FeedbackRequest feedbackReq = createFeedbackRequest(pdl, requestee, recipient); feedbackReq.setSubmitDate(LocalDate.now()); getFeedbackRequestRepository().save(feedbackReq); @@ -1058,7 +1392,7 @@ void testFeedbackRequestEnableEditsSendsEmail() { MemberProfile recipient = createADefaultRecipient(); // Save feedback request that has already been submitted - final FeedbackRequest feedbackReq = createFeedbackRequestWithRecipient(pdl, requestee, recipient); + final FeedbackRequest feedbackReq = createFeedbackRequest(pdl, requestee, recipient); feedbackReq.setSubmitDate(LocalDate.now()); feedbackReq.setStatus("submitted"); getFeedbackRequestRepository().save(feedbackReq); @@ -1275,7 +1609,7 @@ void testRecipientGetBeforeSendDateNotAuthorized() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); MemberProfile recipient = createADefaultRecipient(); - FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(pdlMemberProfile, requestee, recipient); + FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, requestee, recipient); feedbackRequest.setSendDate(LocalDate.now().plusDays(1)); getFeedbackRequestRepository().save(feedbackRequest); @@ -1299,7 +1633,7 @@ void testRecipientGetBeforeSendDateAsAdminAuthorized() { assignAdminRole(adminUser); // Save feedback request with send date in the future - FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(pdlMemberProfile, requestee, recipient); + FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, requestee, recipient); feedbackRequest.setSendDate(LocalDate.now().plusDays(1)); getFeedbackRequestRepository().save(feedbackRequest); @@ -1321,7 +1655,7 @@ void testRecipientGetBeforeSendDateAsPdlAuthorized() { MemberProfile recipient = createADefaultRecipient(); // Save feedback request with send date in the future - FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(pdlMemberProfile, requestee, recipient); + FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, requestee, recipient); feedbackRequest.setSendDate(LocalDate.now().plusDays(1)); getFeedbackRequestRepository().save(feedbackRequest); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java index a94ec13b29..e6979fbc9f 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java @@ -62,7 +62,20 @@ default FeedbackRequest createSampleFeedbackRequestWithRecipient(MemberProfile c */ default FeedbackRequest saveSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId) { LocalDate testDate = LocalDate.of(2010, 10, 8); - return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, null, null)); /** TODO Luch recipient **/ + return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, null, null)); + } + + /** + * Saves a sample feedback request + * @param creator The {@link MemberProfile} of the creator of the feedback request + * @param externalRecipient The {@link FeedbackExternalRecipient} of the external-recipient giving feedback + * @param requestee The {@link MemberProfile} of the requestee of the feedback request + * @param templateId The UUID of the FeedbackTemplate + * @return The saved {@link FeedbackRequest} + */ + default FeedbackRequest saveSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient externalRecipient, UUID templateId) { + LocalDate testDate = LocalDate.of(2010, 10, 8); + return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), null, templateId, testDate, null, "pending", null, null, externalRecipient.getId())); } /** @@ -99,42 +112,53 @@ default MemberProfile createASecondDefaultRecipient() { null, null, null, false, false, null)); } - default FeedbackRequest createFeedbackRequestWithRecipient(MemberProfile creator, MemberProfile requestee, MemberProfile recipient) { + default FeedbackRequest createFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient) { FeedbackTemplate template = createFeedbackTemplate(creator.getId()); getFeedbackTemplateRepository().save(template); return createSampleFeedbackRequestWithRecipient(creator, requestee, recipient, template.getId()); } - default FeedbackRequest createFeedbackRequestWithExternalRecipient(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient externalRecipient) { + default FeedbackRequest createFeedbackRequest(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient externalRecipient) { FeedbackTemplate template = createFeedbackTemplate(creator.getId()); getFeedbackTemplateRepository().save(template); return createSampleFeedbackRequestWithExternalRecipient(creator, requestee, externalRecipient, template.getId()); } - default FeedbackRequest createFeedbackRequestWithRecipient(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, ReviewPeriod reviewPeriod) { + default FeedbackRequest createFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, ReviewPeriod reviewPeriod) { FeedbackTemplate template = createAnotherFeedbackTemplate(creator.getId()); getFeedbackTemplateRepository().save(template); return createSampleFeedbackRequestWithRecipient(creator, requestee, recipient, template.getId(), reviewPeriod); } default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient) { - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(creator, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(creator, requestee, recipient); return saveSampleFeedbackRequest(creator, requestee, recipient, feedbackRequest.getTemplateId()); } default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, ReviewPeriod reviewPeriod) { - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(creator, requestee, recipient, reviewPeriod); + final FeedbackRequest feedbackRequest = createFeedbackRequest(creator, requestee, recipient, reviewPeriod); return saveSampleFeedbackRequest(creator, requestee, recipient, feedbackRequest.getTemplateId(), reviewPeriod); } default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, LocalDate sendDate) { - final FeedbackRequest feedbackRequest = createFeedbackRequestWithRecipient(creator, requestee, recipient); + final FeedbackRequest feedbackRequest = createFeedbackRequest(creator, requestee, recipient); feedbackRequest.setSendDate(sendDate); return getFeedbackRequestRepository().save(feedbackRequest); } default List getFeedbackRequests(MemberProfile recipient) { return getFeedbackRequestRepository() - .findByValues(null, null, recipient.getId().toString(), null, null, null, null); /** TODO Luch recipient **/ + .findByValues(null, null, recipient.getId().toString(), null, null, null, null); + } + + default List getFeedbackRequests(FeedbackExternalRecipient externalRecipient) { + return getFeedbackRequestRepository() + .findByValues(null, null, null, null, null, null, externalRecipient.getId().toString()); + } + + default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient externalRecipient) { + final FeedbackRequest feedbackRequest = createFeedbackRequest(creator, requestee, externalRecipient); + return saveSampleFeedbackRequest(creator, requestee, externalRecipient, feedbackRequest.getTemplateId()); } + } From 2eb6270053fe7e0190ceb462529f35577b6f6e36 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Tue, 22 Oct 2024 15:41:34 -0400 Subject: [PATCH 015/102] 2024-10-22 - feedback - external reviewer - server-side --- .../FeedbackRequestController.java | 1 + .../FeedbackRequestServicesImpl.java | 14 +- .../FeedbackRequestControllerTest.java | 122 ++++++++++++++++-- .../FeedbackExternalRecipientFixture.java | 24 +++- .../fixture/FeedbackRequestFixture.java | 57 +++++++- 5 files changed, 195 insertions(+), 23 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java index 17cc313de7..f12963405d 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java @@ -96,6 +96,7 @@ public void delete(@NotNull UUID id) { * @param id {@link UUID} ID of the request * @return {@link FeedbackRequestResponseDTO} */ + //@Secured(SecurityRule.IS_ANONYMOUS) @Get("/{id}") @RequiredPermission(Permission.CAN_VIEW_FEEDBACK_REQUEST) public HttpResponse getById(UUID id) { diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index 63a14fd1c9..bab75a4b02 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -330,10 +330,16 @@ public FeedbackRequest getById(UUID id) { } final LocalDate sendDate = feedbackReq.get().getSendDate(); final UUID requesteeId = feedbackReq.get().getRequesteeId(); - final UUID recipientId; - recipientId = feedbackReq.get().getRecipientId() != null ? feedbackReq.get().getRecipientId() : feedbackReq.get().getExternalRecipientId(); - if (!getIsPermitted(requesteeId, recipientId, sendDate)) { - throw new PermissionException(NOT_AUTHORIZED_MSG); + final UUID recipientId = feedbackReq.get().getRecipientId(); + final UUID externalRecipientId = feedbackReq.get().getExternalRecipientId(); + if (recipientId != null) { + if (!getIsPermitted(requesteeId, recipientId, sendDate)) { + throw new PermissionException(NOT_AUTHORIZED_MSG); + } + } else { + if (externalRecipientId == null) { + throw new PermissionException(NOT_AUTHORIZED_MSG); + } } return feedbackReq.get(); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index 77a19aaa37..812a56fde5 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -801,10 +801,11 @@ void testGetFeedbackRequestByUnassignedPdlToExternalRecipient() { //get feedback request final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())) .basicAuth(unrelatedPdl.getWorkEmail(), RoleType.Constants.PDL_ROLE); - final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> - client.toBlocking().exchange(request, Map.class)); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); - assertUnauthorized(responseException); + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); } @Test @@ -838,11 +839,11 @@ void testGetFeedbackRequestByRequesteeToExternalRecipient() { //get feedback request final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())) .basicAuth(memberProfile2.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); - final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> - client.toBlocking().exchange(request, Map.class)); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); - // requestee should not be able to get the feedback request about them - assertUnauthorized(responseException); + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); } @Test @@ -884,7 +885,7 @@ void testGetFeedbackRequestByExternalRecipient() { } @Test - void testGetFeedbackRequestByReviewPeriodId() { + void testGetFeedbackRequestByReviewPeriodIdToRecipient() { ReviewPeriod reviewPeriod = createADefaultReviewPeriod(); MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignAdminRole(pdlMemberProfile); @@ -906,7 +907,28 @@ void testGetFeedbackRequestByReviewPeriodId() { } @Test - void testGetFeedbackRequestByUnrelatedUser() { + void testGetFeedbackRequestByReviewPeriodIdToExternalRecipient() { + ReviewPeriod reviewPeriod = createADefaultReviewPeriod(); + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignAdminRole(pdlMemberProfile); + MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient, reviewPeriod); + + //search for feedback requests by a specific creator + final HttpRequest request = HttpRequest.GET(String.format("/?reviewPeriodId=%s", reviewPeriod.getId())) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpResponse> response = client.toBlocking() + .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertEquals(1, response.getBody().get().size()); + assertResponseEqualsEntity(feedbackRequest, response.getBody().get().get(0)); + } + + @Test + void testGetFeedbackRequestByUnrelatedUserToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); @@ -924,7 +946,26 @@ void testGetFeedbackRequestByUnrelatedUser() { } @Test - void testGetByCreatorIdPermitted() { + void testGetFeedbackRequestByUnrelatedUserToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + MemberProfile unrelatedUser = createAnUnrelatedUser(); + FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient); + + //get feedback request + final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())) + .basicAuth(unrelatedUser.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); + } + + @Test + void testGetByCreatorIdPermittedToRecipients() { //create two employee-PDL relationships MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); @@ -953,7 +994,36 @@ void testGetByCreatorIdPermitted() { } @Test - void testGetByCreatorIdPermittedMultipleReqs() { + void testGetByCreatorIdPermittedToExternalRecipients() { + //create two employee-PDL relationships + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile); + MemberProfile pdlMemberProfileTwo = createASecondDefaultMemberProfile(); + assignPdlRole(pdlMemberProfileTwo); + MemberProfile memberTwo = createASecondDefaultMemberProfileForPdl(pdlMemberProfileTwo); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + final FeedbackExternalRecipient externalRecipient02 = createASecondDefaultFeedbackExternalRecipient(); + + // Create a feedback request from a PDL + FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01); + // Create a feedback request by a different PDL + saveFeedbackRequest(pdlMemberProfileTwo, memberTwo, externalRecipient02); + + //search for feedback requests by a specific creator + final HttpRequest request = HttpRequest.GET(String.format("/?creatorId=%s", feedbackReq.getCreatorId())) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse> response = client.toBlocking() + .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertEquals(1, response.getBody().get().size()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0)); + } + + @Test + void testGetByCreatorIdPermittedMultipleReqsToRecipients() { //create two employee-PDL relationships MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); @@ -984,6 +1054,36 @@ void testGetByCreatorIdPermittedMultipleReqs() { assertResponseEqualsEntity(feedbackReqTwo, response.getBody().get().get(1)); } + @Test + void testGetByCreatorIdPermittedMultipleReqsToExternalRecipients() { + //create two employee-PDL relationships + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile); + MemberProfile pdlMemberProfileTwo = createASecondDefaultMemberProfile(); + assignPdlRole(pdlMemberProfileTwo); + MemberProfile memberTwo = createASecondDefaultMemberProfileForPdl(pdlMemberProfileTwo); + MemberProfile memberThree = createAThirdDefaultMemberProfileForPdl(pdlMemberProfileTwo); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + // Create two sample feedback requests by the same PDL + FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01); + FeedbackRequest feedbackReqTwo = saveFeedbackRequest(pdlMemberProfile, memberTwo, externalRecipient01); + // Create a feedback request by a different PDL + saveFeedbackRequest(pdlMemberProfileTwo, memberThree, externalRecipient01); + + final HttpRequest request = HttpRequest.GET(String.format("/?creatorId=%s", feedbackReq.getCreatorId())) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse> response = client.toBlocking() + .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertEquals(2, response.getBody().get().size()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0)); + assertResponseEqualsEntity(feedbackReqTwo, response.getBody().get().get(1)); + } + @Test void testGetByCreatorRequesteeIdPermitted() { //create two employee-PDL relationships diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackExternalRecipientFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackExternalRecipientFixture.java index 402dca8ba7..eaa2883cc0 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackExternalRecipientFixture.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackExternalRecipientFixture.java @@ -9,7 +9,7 @@ public interface FeedbackExternalRecipientFixture extends RepositoryFixture { default FeedbackExternalRecipient createADefaultFeedbackExternalRecipient() { - String email = "externalRecipient@example.com"; + String email = "externalRecipient01@example.com"; String firstName = "External-01"; String lastName = "Recipient"; String companyName = "Company Name"; @@ -19,4 +19,26 @@ default FeedbackExternalRecipient createADefaultFeedbackExternalRecipient() { )); } + default FeedbackExternalRecipient createASecondDefaultFeedbackExternalRecipient() { + String email = "externalRecipient02@example.com"; + String firstName = "External-02"; + String lastName = "Recipient"; + String companyName = "Company Name"; + + return getFeedbackExternalRecipientRepository().save(new FeedbackExternalRecipient( + email, firstName, lastName, companyName + )); + } + + default FeedbackExternalRecipient createAThirdDefaultFeedbackExternalRecipient() { + String email = "externalRecipient03@example.com"; + String firstName = "External-03"; + String lastName = "Recipient"; + String companyName = "Company Name"; + + return getFeedbackExternalRecipientRepository().save(new FeedbackExternalRecipient( + email, firstName, lastName, companyName + )); + } + } diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java index e6979fbc9f..0a0995a005 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java @@ -20,7 +20,7 @@ public interface FeedbackRequestFixture extends RepositoryFixture, FeedbackTempl * @param templateId The UUID of the FeedbackTemplate * @return The created {@link FeedbackRequest} */ - default FeedbackRequest createSampleFeedbackRequestWithRecipient(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId) { + default FeedbackRequest createSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId) { LocalDate testDate = LocalDate.of(2010, 10, 8); return new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, null, null); } @@ -47,9 +47,23 @@ default FeedbackRequest createSampleFeedbackRequestWithExternalRecipient(MemberP * @param reviewPeriod the {@link ReviewPeriod} that this feedback request is associated with * @return The created {@link FeedbackRequest} */ - default FeedbackRequest createSampleFeedbackRequestWithRecipient(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId, ReviewPeriod reviewPeriod) { + default FeedbackRequest createSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId, ReviewPeriod reviewPeriod) { LocalDate testDate = LocalDate.of(2010, 10, 8); - return new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, reviewPeriod.getId(), null); /** TODO Luch reciplientg **/ + return new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, reviewPeriod.getId(), null); + } + + /** + * Creates a sample feedback request + * @param creator The {@link MemberProfile} of the creator of the feedback request + * @param requestee The {@link MemberProfile} of the requestee of the feedback request + * @param externalRecipient The {@link FeedbackExternalRecipient} of the external-recipient giving feedback + * @param templateId The UUID of the FeedbackTemplate + * @param reviewPeriod the {@link ReviewPeriod} that this feedback request is associated with + * @return The created {@link FeedbackRequest} + */ + default FeedbackRequest createSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient externalRecipient, UUID templateId, ReviewPeriod reviewPeriod) { + LocalDate testDate = LocalDate.of(2010, 10, 8); + return new FeedbackRequest(creator.getId(), requestee.getId(), null, templateId, testDate, null, "pending", null, reviewPeriod.getId(), externalRecipient.getId()); } /** @@ -88,12 +102,30 @@ default FeedbackRequest saveSampleFeedbackRequest(MemberProfile creator, MemberP */ default FeedbackRequest saveSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId, ReviewPeriod reviewPeriod) { LocalDate testDate = LocalDate.of(2010, 10, 8); - return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, reviewPeriod.getId(), null)); /** TODO Luch recipient **/ + return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, "pending", null, reviewPeriod.getId(), null)); + } + + /** + * Saves a sample feedback request + * @param creator The {@link MemberProfile} of the creator of the feedback request + * @param externalRecipient The {@link FeedbackExternalRecipient} of the external-recipient giving feedback + * @param requestee The {@link MemberProfile} of the requestee of the feedback request + * @param templateId The UUID of the FeedbackTemplate + * @return The saved {@link FeedbackRequest} + */ + default FeedbackRequest saveSampleFeedbackRequest(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient externalRecipient, UUID templateId, ReviewPeriod reviewPeriod) { + LocalDate testDate = LocalDate.of(2010, 10, 8); + return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), null, templateId, testDate, null, "pending", null, reviewPeriod.getId(), externalRecipient.getId())); } default FeedbackRequest saveSampleFeedbackRequestWithStatus(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, UUID templateId, String status) { LocalDate testDate = LocalDate.of(2010, 10, 8); - return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, status, null, null, null)); /** TODO Luch recipient **/ + return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), recipient.getId(), templateId, testDate, null, status, null, null, null)); + } + + default FeedbackRequest saveSampleFeedbackRequestWithStatus(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient externalRecipient, UUID templateId, String status) { + LocalDate testDate = LocalDate.of(2010, 10, 8); + return getFeedbackRequestRepository().save(new FeedbackRequest(creator.getId(), requestee.getId(), null, templateId, testDate, null, status, null, null, externalRecipient.getId())); } default MemberProfile createADefaultRecipient() { @@ -115,7 +147,7 @@ default MemberProfile createASecondDefaultRecipient() { default FeedbackRequest createFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient) { FeedbackTemplate template = createFeedbackTemplate(creator.getId()); getFeedbackTemplateRepository().save(template); - return createSampleFeedbackRequestWithRecipient(creator, requestee, recipient, template.getId()); + return createSampleFeedbackRequest(creator, requestee, recipient, template.getId()); } default FeedbackRequest createFeedbackRequest(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient externalRecipient) { @@ -127,7 +159,13 @@ default FeedbackRequest createFeedbackRequest(MemberProfile creator, MemberProfi default FeedbackRequest createFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient, ReviewPeriod reviewPeriod) { FeedbackTemplate template = createAnotherFeedbackTemplate(creator.getId()); getFeedbackTemplateRepository().save(template); - return createSampleFeedbackRequestWithRecipient(creator, requestee, recipient, template.getId(), reviewPeriod); + return createSampleFeedbackRequest(creator, requestee, recipient, template.getId(), reviewPeriod); + } + + default FeedbackRequest createFeedbackRequest(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient externalRecipient, ReviewPeriod reviewPeriod) { + FeedbackTemplate template = createAnotherFeedbackTemplate(creator.getId()); + getFeedbackTemplateRepository().save(template); + return createSampleFeedbackRequest(creator, requestee, externalRecipient, template.getId(), reviewPeriod); } default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile requestee, MemberProfile recipient) { @@ -146,6 +184,11 @@ default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile return getFeedbackRequestRepository().save(feedbackRequest); } + default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient externalRecipient, ReviewPeriod reviewPeriod) { + final FeedbackRequest feedbackRequest = createFeedbackRequest(creator, requestee, externalRecipient, reviewPeriod); + return saveSampleFeedbackRequest(creator, requestee, externalRecipient, feedbackRequest.getTemplateId(), reviewPeriod); + } + default List getFeedbackRequests(MemberProfile recipient) { return getFeedbackRequestRepository() .findByValues(null, null, recipient.getId().toString(), null, null, null, null); From f9cc72e2cb2009132d1bdb34726fda906418f619 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Wed, 23 Oct 2024 10:59:11 -0400 Subject: [PATCH 016/102] 2024-10-23 - feedback - external reviewer - server-side --- .../FeedbackRequestController.java | 13 ++- .../FeedbackRequestServices.java | 2 +- .../FeedbackRequestServicesImpl.java | 5 +- .../FeedbackRequestControllerTest.java | 83 ++++++++++++++++++- 4 files changed, 94 insertions(+), 9 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java index f12963405d..663a5e0668 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java @@ -1,5 +1,6 @@ package com.objectcomputing.checkins.services.feedback_request; +import com.nimbusds.jose.proc.SecurityContext; import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipient; import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientServices; import com.objectcomputing.checkins.services.permissions.Permission; @@ -15,12 +16,16 @@ import io.micronaut.http.annotation.Post; import io.micronaut.http.annotation.Put; import io.micronaut.http.annotation.Status; +import io.micronaut.http.exceptions.HttpStatusException; import io.micronaut.scheduling.TaskExecutors; import io.micronaut.scheduling.annotation.ExecuteOn; import io.micronaut.security.annotation.Secured; +import io.micronaut.security.authentication.Authentication; import io.micronaut.security.rules.SecurityRule; +import io.micronaut.security.utils.SecurityService; import io.micronaut.validation.Validated; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; @@ -38,6 +43,8 @@ public class FeedbackRequestController { private final FeedbackRequestServices feedbackReqServices; private final FeedbackExternalRecipientServices feedbackExternalRecipientServices; + @Inject + SecurityService securityService; public FeedbackRequestController(FeedbackRequestServices feedbackReqServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices) { this.feedbackReqServices = feedbackReqServices; @@ -116,9 +123,9 @@ public HttpResponse getById(UUID id) { * @return list of {@link FeedbackRequestResponseDTO} */ @RequiredPermission(Permission.CAN_VIEW_FEEDBACK_REQUEST) - @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,requesteeIds}") - public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable List requesteeIds, @Nullable UUID externalRecipientId) { - return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, requesteeIds, externalRecipientId) + @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,externalRecipientId,requesteeIds}") + public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable UUID externalRecipientId, @Nullable List requesteeIds) { + return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, externalRecipientId, requesteeIds) .stream() .map(this::fromEntity) .toList(); diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServices.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServices.java index 861a8d336e..3b1e35a839 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServices.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServices.java @@ -13,5 +13,5 @@ public interface FeedbackRequestServices { FeedbackRequest getById(UUID id); - List findByValues(UUID creatorId, UUID requesteeId, UUID recipientId, LocalDate oldestDate, UUID reviewPeriodId, UUID templateId, List requesteeIds, UUID externalRecipientId); + List findByValues(UUID creatorId, UUID requesteeId, UUID recipientId, LocalDate oldestDate, UUID reviewPeriodId, UUID templateId, UUID externalRecipientId, List requesteeIds); } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index bab75a4b02..5f03b6ca3a 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -346,7 +346,7 @@ public FeedbackRequest getById(UUID id) { } @Override - public List findByValues(UUID creatorId, UUID requesteeId, UUID recipientId, LocalDate oldestDate, UUID reviewPeriodId, UUID templateId, List requesteeIds, UUID externalRecipientId) { + public List findByValues(UUID creatorId, UUID requesteeId, UUID recipientId, LocalDate oldestDate, UUID reviewPeriodId, UUID templateId, UUID externalRecipientId, List requesteeIds) { final UUID currentUserId = currentUserServices.getCurrentUser().getId(); if (currentUserId == null) { throw new PermissionException(NOT_AUTHORIZED_MSG); @@ -369,8 +369,9 @@ public List findByValues(UUID creatorId, UUID requesteeId, UUID } else if (request != null) { if (currentUserId.equals(request.getCreatorId())) visible = true; if (isSupervisor(request.getRequesteeId(), currentUserId)) visible = true; - recipientIdLocal = request.getRecipientId() != null ? request.getRecipientId() : request.getExternalRecipientId(); + recipientIdLocal = request.getRecipientId(); if (currentUserId.equals(recipientIdLocal)) visible = true; + if (request.getExternalRecipientId() != null) visible = true; } return visible; }).toList(); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index 812a56fde5..71be63f09f 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -1085,7 +1085,7 @@ void testGetByCreatorIdPermittedMultipleReqsToExternalRecipients() { } @Test - void testGetByCreatorRequesteeIdPermitted() { + void testGetByCreatorRequesteeIdPermittedToRecipients() { //create two employee-PDL relationships MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); @@ -1113,7 +1113,35 @@ void testGetByCreatorRequesteeIdPermitted() { } @Test - void testGetByCreatorRequesteeIdNotPermitted() { + void testGetByCreatorRequesteeIdPermittedToExternalRecipients() { + //create two employee-PDL relationships + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile); + MemberProfile pdlMemberProfileTwo = createASecondDefaultMemberProfile(); + assignPdlRole(pdlMemberProfileTwo); + MemberProfile memberTwo = createASecondDefaultMemberProfileForPdl(pdlMemberProfileTwo); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + final FeedbackExternalRecipient externalRecipient02 = createASecondDefaultFeedbackExternalRecipient(); + + //create two sample feedback requests by the same PDL + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01); + saveFeedbackRequest(pdlMemberProfileTwo, memberTwo, externalRecipient02); + + //search for feedback requests by a specific creator, requestee, and template + final HttpRequest request = HttpRequest.GET(String.format("/?creatorId=%s&requesteeId=%s", feedbackReq.getCreatorId(), feedbackReq.getRequesteeId())) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse> response = client.toBlocking() + .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); + + assertTrue(response.getBody().isPresent()); + assertEquals(1, response.getBody().get().size()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0)); + assertEquals(HttpStatus.OK, response.getStatus()); + } + + @Test + void testGetByCreatorRequesteeIdNotPermittedToRecipients() { //create two employee-PDL relationships MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); @@ -1142,7 +1170,36 @@ void testGetByCreatorRequesteeIdNotPermitted() { } @Test - void testGetByCreatorRecipientIdPermitted() { + void testGetByCreatorRequesteeIdNotPermittedToExternalRecipients() { + //create two employee-PDL relationships + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile); + MemberProfile pdlMemberProfileTwo = createASecondDefaultMemberProfile(); + assignPdlRole(pdlMemberProfileTwo); + MemberProfile memberTwo = createASecondDefaultMemberProfileForPdl(pdlMemberProfileTwo); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + final FeedbackExternalRecipient externalRecipient02 = createASecondDefaultFeedbackExternalRecipient(); + + //create two sample feedback requests by the same PDL + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01); + saveFeedbackRequest(pdlMemberProfileTwo, memberTwo, externalRecipient02); + + //search for feedback requests by a specific creator, requestee, and template + final HttpRequest request = HttpRequest.GET(String.format("/?creatorId=%s&requesteeId=%s", feedbackReq.getCreatorId(), feedbackReq.getRequesteeId())) + .basicAuth(externalRecipient02.getEmail(), RoleType.Constants.MEMBER_ROLE); + ; + + final HttpResponse> response = client.toBlocking() + .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); + + assertTrue(response.getBody().isPresent()); + assertEquals(0, response.getBody().get().size()); + assertEquals(HttpStatus.OK, response.getStatus()); + } + + @Test + void testGetByCreatorRecipientIdPermittedToRecipients() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); @@ -1160,6 +1217,26 @@ void testGetByCreatorRecipientIdPermitted() { assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); } + @Test + void testGetByCreatorRecipientIdPermittedToExternalRecipients() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); + MemberProfile recipient = createADefaultRecipient(); + final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); + FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient); + + //get feedback request + final HttpRequest request = HttpRequest.GET(String.format("/?externalRecipientId=%s", feedbackRequest.getExternalRecipientId())) + .basicAuth(recipient.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + // recipient must be able to get the feedback request + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); + } + @Test void testGetByCreatorRequesteeIdMultiplePermitted() { //create two employee-PDL relationships From 00382864cd03b42bdf15a274a0ef018f4f98c097 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Wed, 23 Oct 2024 12:57:50 -0400 Subject: [PATCH 017/102] 2024-10-23 - feedback - external reviewer - server-side --- .../FeedbackExternalRecipientController.java | 67 +++++++++++++++++++ .../FeedbackRequestController.java | 6 +- .../FeedbackRequestServicesImpl.java | 28 +++++--- .../FeedbackRequestControllerTest.java | 10 ++- 4 files changed, 95 insertions(+), 16 deletions(-) create mode 100644 server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java new file mode 100644 index 0000000000..ce5e416649 --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java @@ -0,0 +1,67 @@ +package com.objectcomputing.checkins.services.feedback_external_recipient; + +import com.objectcomputing.checkins.services.feedback_request.*; +import com.objectcomputing.checkins.services.permissions.Permission; +import com.objectcomputing.checkins.services.permissions.RequiredPermission; +import io.micronaut.core.annotation.Nullable; +import io.micronaut.core.convert.format.Format; +import io.micronaut.http.HttpResponse; +import io.micronaut.http.HttpStatus; +import io.micronaut.http.annotation.*; +import io.micronaut.scheduling.TaskExecutors; +import io.micronaut.scheduling.annotation.ExecuteOn; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; +import io.micronaut.security.utils.SecurityService; +import io.micronaut.validation.Validated; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; + +import java.net.URI; +import java.time.LocalDate; +import java.util.List; +import java.util.UUID; + +@Validated +@Controller("/services/feedback/external/recipients") +@ExecuteOn(TaskExecutors.BLOCKING) +@Secured(SecurityRule.IS_ANONYMOUS) +@Tag(name = "feedback external recipient") +public class FeedbackExternalRecipientController { + + private final FeedbackRequestServices feedbackReqServices; + private final FeedbackExternalRecipientServices feedbackExternalRecipientServices; + + public FeedbackExternalRecipientController(FeedbackRequestServices feedbackRequestServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices) { + this.feedbackReqServices = feedbackRequestServices; + this.feedbackExternalRecipientServices = feedbackExternalRecipientServices; + } + + @Get("/{?externalRecipientId}") + public List findByValues(@Nullable UUID externalRecipientId) { + return feedbackReqServices.findByValues(null, null, null, null, null, null, null, null) + .stream() + .map(this::fromEntity) + .toList(); + } + + private FeedbackRequestResponseDTO fromEntity(FeedbackRequest feedbackRequest) { + FeedbackRequestResponseDTO dto = new FeedbackRequestResponseDTO(); + dto.setId(feedbackRequest.getId()); + dto.setCreatorId(feedbackRequest.getCreatorId()); + dto.setRequesteeId(feedbackRequest.getRequesteeId()); + dto.setRecipientId(feedbackRequest.getRecipientId()); + dto.setTemplateId(feedbackRequest.getTemplateId()); + dto.setSendDate(feedbackRequest.getSendDate()); + dto.setDueDate(feedbackRequest.getDueDate()); + dto.setStatus(feedbackRequest.getStatus()); + dto.setSubmitDate(feedbackRequest.getSubmitDate()); + dto.setReviewPeriodId(feedbackRequest.getReviewPeriodId()); + dto.setExternalRecipientId(feedbackRequest.getExternalRecipientId()); + + return dto; + } + +} diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java index 663a5e0668..b24f34265c 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java @@ -123,9 +123,9 @@ public HttpResponse getById(UUID id) { * @return list of {@link FeedbackRequestResponseDTO} */ @RequiredPermission(Permission.CAN_VIEW_FEEDBACK_REQUEST) - @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,externalRecipientId,requesteeIds}") - public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable UUID externalRecipientId, @Nullable List requesteeIds) { - return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, externalRecipientId, requesteeIds) + @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,requesteeIds}") + public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable List requesteeIds) { + return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, null, requesteeIds) .stream() .map(this::fromEntity) .toList(); diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index 5f03b6ca3a..cacd37c30a 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -347,10 +347,6 @@ public FeedbackRequest getById(UUID id) { @Override public List findByValues(UUID creatorId, UUID requesteeId, UUID recipientId, LocalDate oldestDate, UUID reviewPeriodId, UUID templateId, UUID externalRecipientId, List requesteeIds) { - final UUID currentUserId = currentUserServices.getCurrentUser().getId(); - if (currentUserId == null) { - throw new PermissionException(NOT_AUTHORIZED_MSG); - } List feedbackReqList = new ArrayList<>(); if (requesteeIds != null && !requesteeIds.isEmpty()) { @@ -363,15 +359,27 @@ public List findByValues(UUID creatorId, UUID requesteeId, UUID feedbackReqList = feedbackReqList.stream().filter((FeedbackRequest request) -> { boolean visible = false; - final UUID recipientIdLocal; if (currentUserServices.isAdmin()) { visible = true; } else if (request != null) { - if (currentUserId.equals(request.getCreatorId())) visible = true; - if (isSupervisor(request.getRequesteeId(), currentUserId)) visible = true; - recipientIdLocal = request.getRecipientId(); - if (currentUserId.equals(recipientIdLocal)) visible = true; - if (request.getExternalRecipientId() != null) visible = true; + MemberProfile currentUser; + UUID currentUserId; + + try { + currentUser = currentUserServices.getCurrentUser(); + currentUserId = currentUser.getId(); + } catch (NotFoundException notFoundException) { + currentUser = null; + currentUserId = null; + } + if (currentUserId != null) { + if (currentUserId.equals(request.getCreatorId())) visible = true; + if (isSupervisor(request.getRequesteeId(), currentUserId)) visible = true; + if (currentUserId.equals(request.getRecipientId())) visible = true; + } else { + if (request.getExternalRecipientId() != null) visible = true; + } + } return visible; }).toList(); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index 71be63f09f..d4cd950242 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -53,6 +53,10 @@ class FeedbackRequestControllerTest extends TestContainersSuite implements Membe @Client("/services/feedback/requests") HttpClient client; + @Inject + @Client("/services/feedback/external/recipients") + HttpClient clientExternalRecipient; + @Inject CheckInsConfiguration checkInsConfiguration; @@ -1227,9 +1231,9 @@ void testGetByCreatorRecipientIdPermittedToExternalRecipients() { FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient); //get feedback request - final HttpRequest request = HttpRequest.GET(String.format("/?externalRecipientId=%s", feedbackRequest.getExternalRecipientId())) - .basicAuth(recipient.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); - final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + final HttpRequest request = HttpRequest.GET(String.format("/?externalRecipientId=%s", feedbackRequest.getExternalRecipientId())); + //.basicAuth(recipient.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); + final HttpResponse response = clientExternalRecipient.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); // recipient must be able to get the feedback request assertEquals(HttpStatus.OK, response.getStatus()); From 848555c8b29add53150aec39cc5d72f5db223225 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Wed, 23 Oct 2024 14:14:05 -0400 Subject: [PATCH 018/102] 2024-10-23 - feedback - external reviewer - server-side --- .../FeedbackExternalRecipientController.java | 10 +- .../FeedbackRequestController.java | 6 +- .../FeedbackRequestControllerTest.java | 136 +++++++++++++++++- .../fixture/FeedbackRequestFixture.java | 6 + 4 files changed, 145 insertions(+), 13 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java index ce5e416649..a9156ab6c5 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java @@ -1,5 +1,6 @@ package com.objectcomputing.checkins.services.feedback_external_recipient; +import com.objectcomputing.checkins.exceptions.BadArgException; import com.objectcomputing.checkins.services.feedback_request.*; import com.objectcomputing.checkins.services.permissions.Permission; import com.objectcomputing.checkins.services.permissions.RequiredPermission; @@ -39,9 +40,12 @@ public FeedbackExternalRecipientController(FeedbackRequestServices feedbackReque this.feedbackExternalRecipientServices = feedbackExternalRecipientServices; } - @Get("/{?externalRecipientId}") - public List findByValues(@Nullable UUID externalRecipientId) { - return feedbackReqServices.findByValues(null, null, null, null, null, null, null, null) + @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,externalRecipientId,requesteeIds}") + public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable UUID externalRecipientId, @Nullable List requesteeIds) { + if (externalRecipientId == null) { + throw new BadArgException("Missing required parameter: externalRecipientId"); + } + return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, externalRecipientId, requesteeIds) .stream() .map(this::fromEntity) .toList(); diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java index b24f34265c..663a5e0668 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java @@ -123,9 +123,9 @@ public HttpResponse getById(UUID id) { * @return list of {@link FeedbackRequestResponseDTO} */ @RequiredPermission(Permission.CAN_VIEW_FEEDBACK_REQUEST) - @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,requesteeIds}") - public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable List requesteeIds) { - return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, null, requesteeIds) + @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,externalRecipientId,requesteeIds}") + public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable UUID externalRecipientId, @Nullable List requesteeIds) { + return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, externalRecipientId, requesteeIds) .stream() .map(this::fromEntity) .toList(); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index d4cd950242..6011513474 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -1226,13 +1226,11 @@ void testGetByCreatorRecipientIdPermittedToExternalRecipients() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); - MemberProfile recipient = createADefaultRecipient(); final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient); //get feedback request final HttpRequest request = HttpRequest.GET(String.format("/?externalRecipientId=%s", feedbackRequest.getExternalRecipientId())); - //.basicAuth(recipient.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); final HttpResponse response = clientExternalRecipient.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); // recipient must be able to get the feedback request @@ -1242,7 +1240,7 @@ void testGetByCreatorRecipientIdPermittedToExternalRecipients() { } @Test - void testGetByCreatorRequesteeIdMultiplePermitted() { + void testGetByCreatorRequesteeIdMultiplePermittedToRecipients() { //create two employee-PDL relationships MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); @@ -1270,7 +1268,35 @@ void testGetByCreatorRequesteeIdMultiplePermitted() { } @Test - void testGetLastThreeMonthsByCreator() { + void testGetByCreatorRequesteeIdMultiplePermittedToExternalRecipients() { + //create two employee-PDL relationships + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile); + MemberProfile pdlMemberProfileTwo = createASecondDefaultMemberProfile(); + assignPdlRole(pdlMemberProfileTwo); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + final FeedbackExternalRecipient externalRecipient02 = createASecondDefaultFeedbackExternalRecipient(); + + //create two sample feedback requests by the same PDL and same requestee + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01); + final FeedbackRequest feedbackReqTwo = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient02); + + //search for feedback requests by a specific creator, requestee + final HttpRequest request = HttpRequest.GET(String.format("/?creatorId=%s&requesteeId=%s", feedbackReq.getCreatorId(), feedbackReq.getRequesteeId())) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse> response = client.toBlocking() + .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertEquals(2, response.getBody().get().size()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0)); + assertResponseEqualsEntity(feedbackReqTwo, response.getBody().get().get(1)); + } + + @Test + void testGetLastThreeMonthsByCreatorToRecipients() { //create two employee-PDL relationships MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); @@ -1303,7 +1329,40 @@ void testGetLastThreeMonthsByCreator() { } @Test - void testGetLastThreeMonthsByCreatorRequesteeId() { + void testGetLastThreeMonthsByCreatorToExternalRecipients() { + //create two employee-PDL relationships + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile); + MemberProfile pdlMemberProfileTwo = createASecondDefaultMemberProfile(); + assignPdlRole(pdlMemberProfileTwo); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + final FeedbackExternalRecipient externalRecipient02 = createASecondDefaultFeedbackExternalRecipient(); + + LocalDate now = LocalDate.now(); + LocalDate oldestDate = now.minusMonths(3); + LocalDate withinLastFewMonths = now.minusMonths(2); + LocalDate outOfRange = now.minusMonths(10); + + // create sample feedback requests with different send dates + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01, now); + final FeedbackRequest feedbackReqTwo = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient02, withinLastFewMonths); + saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient02, outOfRange); + + final HttpRequest request = HttpRequest.GET(String.format("/?creatorId=%s&oldestDate=%s", pdlMemberProfile.getId(), oldestDate)) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse> response = client.toBlocking() + .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertEquals(2, response.getBody().get().size()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0)); + assertResponseEqualsEntity(feedbackReqTwo, response.getBody().get().get(1)); + } + + @Test + void testGetLastThreeMonthsByCreatorRequesteeIdToRecipients() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile); @@ -1333,7 +1392,37 @@ void testGetLastThreeMonthsByCreatorRequesteeId() { } @Test - void testGetLastThreeMonthsByRequesteeId() { + void testGetLastThreeMonthsByCreatorRequesteeIdToExternalRecipients() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + final FeedbackExternalRecipient externalRecipient02 = createASecondDefaultFeedbackExternalRecipient(); + + LocalDate now = LocalDate.now(); + LocalDate oldestDate = now.minusMonths(3); + LocalDate withinLastFewMonths = now.minusMonths(2); + LocalDate outOfRange = now.minusMonths(10); + + // create sample feedback requests with different send dates + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01, now); + final FeedbackRequest feedbackReqTwo = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient02, withinLastFewMonths); + saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient02, outOfRange); + + final HttpRequest request = HttpRequest.GET(String.format("/?creatorId=%s&requesteeId=%s&oldestDate=%s", pdlMemberProfile.getId(), memberOne.getId(), oldestDate)) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse> response = client.toBlocking() + .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertEquals(2, response.getBody().get().size()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0)); + assertResponseEqualsEntity(feedbackReqTwo, response.getBody().get().get(1)); + } + + @Test + void testGetLastThreeMonthsByRequesteeIdToRecipients() { //create two employee-PDL relationships MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); @@ -1366,7 +1455,40 @@ void testGetLastThreeMonthsByRequesteeId() { } @Test - void testGetEveryAllTimeAdmin() { + void testGetLastThreeMonthsByRequesteeIdToExternalRecipients() { + //create two employee-PDL relationships + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile); + MemberProfile pdlMemberProfileTwo = createASecondDefaultMemberProfile(); + assignPdlRole(pdlMemberProfileTwo); + MemberProfile memberTwo = createASecondDefaultMemberProfileForPdl(pdlMemberProfileTwo); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + final FeedbackExternalRecipient externalRecipient02 = createASecondDefaultFeedbackExternalRecipient(); + + LocalDate now = LocalDate.now(); + LocalDate oldestDate = now.minusMonths(3); + LocalDate withinLastFewMonths = now.minusMonths(2); + + // create sample feedback requests with different send dates and different requestees + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01, now); + saveFeedbackRequest(pdlMemberProfile, memberTwo, externalRecipient02, withinLastFewMonths); + final FeedbackRequest feedbackReqThree = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient02, withinLastFewMonths); + + final HttpRequest request = HttpRequest.GET(String.format("/?creatorId=%s&requesteeId=%s&oldestDate=%s", feedbackReq.getCreatorId(), feedbackReq.getRequesteeId(), oldestDate)) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse> response = client.toBlocking() + .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertEquals(2, response.getBody().get().size()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0)); + assertResponseEqualsEntity(feedbackReqThree, response.getBody().get().get(1)); + } + + @Test + void testGetEveryAllTimeAdminToRecipients() { MemberProfile admin = createADefaultMemberProfile(); assignAdminRole(admin); MemberProfile pdlMemberProfile = createASecondDefaultMemberProfile(); diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java index 0a0995a005..9f5b750766 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackRequestFixture.java @@ -184,6 +184,12 @@ default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile return getFeedbackRequestRepository().save(feedbackRequest); } + default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient feedbackExternalRecipient, LocalDate sendDate) { + final FeedbackRequest feedbackRequest = createFeedbackRequest(creator, requestee, feedbackExternalRecipient); + feedbackRequest.setSendDate(sendDate); + return getFeedbackRequestRepository().save(feedbackRequest); + } + default FeedbackRequest saveFeedbackRequest(MemberProfile creator, MemberProfile requestee, FeedbackExternalRecipient externalRecipient, ReviewPeriod reviewPeriod) { final FeedbackRequest feedbackRequest = createFeedbackRequest(creator, requestee, externalRecipient, reviewPeriod); return saveSampleFeedbackRequest(creator, requestee, externalRecipient, feedbackRequest.getTemplateId(), reviewPeriod); From 227899ecd8684f43a5f5dfb2ceef7f0cb4d1b7fb Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Wed, 23 Oct 2024 14:49:36 -0400 Subject: [PATCH 019/102] 2024-10-23 - feedback - external reviewer - server-side --- .../FeedbackExternalRecipientController.java | 16 +++ .../FeedbackRequestServicesImpl.java | 15 ++- .../FeedbackRequestControllerTest.java | 97 ++++++++++++++++++- 3 files changed, 123 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java index a9156ab6c5..df498e2fe3 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java @@ -51,6 +51,22 @@ public List findByValues(@Nullable UUID creatorId, @ .toList(); } + /** + * Update a feedback request + * + * @param requestBody {@link FeedbackRequestUpdateDTO} The updated feedback request + * @return {@link FeedbackRequestResponseDTO} + */ + @Put + public HttpResponse update(@Body @Valid @NotNull FeedbackRequestUpdateDTO requestBody) { + if (requestBody.getExternalRecipientId() == null) { + throw new BadArgException("Missing required parameter: externalRecipientId"); + } + FeedbackRequest savedFeedback = feedbackReqServices.update(requestBody); + return HttpResponse.ok(fromEntity(savedFeedback)) + .headers(headers -> headers.location(URI.create("/feedback_request/" + savedFeedback.getId()))); + } + private FeedbackRequestResponseDTO fromEntity(FeedbackRequest feedbackRequest) { FeedbackRequestResponseDTO dto = new FeedbackRequestResponseDTO(); dto.setId(feedbackRequest.getId()); diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index cacd37c30a..7a57a82dbb 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -425,8 +425,19 @@ private boolean reassignIsPermitted(FeedbackRequest feedbackRequest) { private boolean isCurrentUserAdminOrOwner(FeedbackRequest feedbackRequest) { boolean isAdmin = currentUserServices.isAdmin(); - UUID currentUserId = currentUserServices.getCurrentUser().getId(); - return isAdmin || currentUserId.equals(feedbackRequest.getCreatorId()); + boolean currentUserIsSameAsCreator = false; + UUID currentUserId; + MemberProfile currentUser; + try { + currentUser = currentUserServices.getCurrentUser(); + } catch (NotFoundException notFoundException) { + currentUser = null; + } + if (currentUser != null) { + currentUserId = currentUserServices.getCurrentUser().getId(); + currentUserIsSameAsCreator = currentUserId.equals(feedbackRequest.getCreatorId()); + } + return isAdmin || currentUserIsSameAsCreator; } private boolean updateSubmitDateIsPermitted(FeedbackRequest feedbackRequest) { diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index 6011513474..10b4c6b2ee 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -1520,7 +1520,39 @@ void testGetEveryAllTimeAdminToRecipients() { } @Test - void testUpdateDueDateAuthorized() { + void testGetEveryAllTimeAdminToExternalRecipients() { + MemberProfile admin = createADefaultMemberProfile(); + assignAdminRole(admin); + MemberProfile pdlMemberProfile = createASecondDefaultMemberProfile(); + MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + final FeedbackExternalRecipient externalRecipient02 = createASecondDefaultFeedbackExternalRecipient(); + + LocalDate now = LocalDate.now(); + LocalDate oldestDate = LocalDate.of(2010, 10, 10); + LocalDate withinLastFewMonths = now.minusMonths(2); + LocalDate outOfRange = now.minusMonths(10); + + // create sample feedback requests with different send dates + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01, now); + final FeedbackRequest feedbackReqTwo = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient02, withinLastFewMonths); + final FeedbackRequest feedbackReqThree = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient02, outOfRange); + + final HttpRequest request = HttpRequest.GET(String.format("/?oldestDate=%s", oldestDate)) + .basicAuth(admin.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpResponse> response = client.toBlocking() + .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertEquals(3, response.getBody().get().size()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0)); + assertResponseEqualsEntity(feedbackReqTwo, response.getBody().get().get(1)); + assertResponseEqualsEntity(feedbackReqThree, response.getBody().get().get(2)); + } + + @Test + void testUpdateDueDateAuthorizedToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); @@ -1540,7 +1572,27 @@ void testUpdateDueDateAuthorized() { } @Test - void testUpdateDueDateToBeforeSendDate() { + void testUpdateDueDateAuthorizedToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient01); + feedbackReq.setDueDate(LocalDate.now()); + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + final HttpRequest request = HttpRequest.PUT("", dto) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get()); + } + + @Test + void testUpdateDueDateToBeforeSendDateToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); @@ -1561,7 +1613,28 @@ void testUpdateDueDateToBeforeSendDate() { } @Test - void testUpdateDueDateUnauthorized() { + void testUpdateDueDateToBeforeSendDateToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient01); + feedbackReq.setSendDate(LocalDate.of(1111, 11, 2)); + feedbackReq.setDueDate(LocalDate.of(1111, 11, 1)); + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + final HttpRequest request = HttpRequest.PUT("", dto) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); + assertEquals("Send date of feedback request must be before the due date.", responseException.getMessage()); + } + + @Test + void testUpdateDueDateUnauthorizedToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); @@ -1579,6 +1652,24 @@ void testUpdateDueDateUnauthorized() { assertUnauthorized(responseException); } + @Test + void testUpdateDueDateUnauthorizedToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient01); + feedbackReq.setDueDate(Util.MAX.toLocalDate()); + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + final HttpRequest request = HttpRequest.PUT("", dto); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + clientExternalRecipient.toBlocking().exchange(request, Map.class)); + + assertUnauthorized(responseException); + } + @Test void testUpdateStatusAndSubmitDateAuthorizedByRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); From c811d625d5c53781a4226dfc858f6fe6b17a6c8a Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Wed, 23 Oct 2024 15:35:36 -0400 Subject: [PATCH 020/102] 2024-10-23 - feedback - external reviewer - server-side --- .../FeedbackRequestServicesImpl.java | 16 ++++++++++++++-- .../FeedbackRequestControllerTest.java | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index 7a57a82dbb..03c5796ab9 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -198,6 +198,15 @@ public FeedbackRequest update(FeedbackRequestUpdateDTO feedbackRequestUpdateDTO) MemberProfile reviewerMemberProfile; FeedbackExternalRecipient reviewerExternalRecipient; String reviewerFirstName, reviewerEmail; + MemberProfile currentUser; + boolean currentUserEqualsRequestee = false; + + try { + currentUser = currentUserServices.getCurrentUser(); + } catch (NotFoundException notFoundException) { + currentUser = null; + } + final FeedbackRequest feedbackRequest = this.getFromDTO(feedbackRequestUpdateDTO); FeedbackRequest originalFeedback = null; @@ -210,6 +219,8 @@ public FeedbackRequest update(FeedbackRequestUpdateDTO feedbackRequestUpdateDTO) throw new BadArgException("Cannot update feedback request that does not exist"); } + if (currentUser != null) currentUserEqualsRequestee = currentUser.getId().equals(originalFeedback.getRequesteeId()); + validateMembers(originalFeedback); Set reviewAssignmentsSet = Set.of(); @@ -227,7 +238,7 @@ public FeedbackRequest update(FeedbackRequestUpdateDTO feedbackRequestUpdateDTO) // If a status update is made to anything other than submitted by the requestee, throw an error. if (!"submitted".equals(feedbackRequest.getStatus()) && !Objects.equals(originalFeedback.getStatus(), feedbackRequest.getStatus()) - && currentUserServices.getCurrentUser().getId().equals(originalFeedback.getRequesteeId())) { + && currentUserEqualsRequestee) { throw new PermissionException(NOT_AUTHORIZED_MSG); } @@ -292,8 +303,9 @@ public FeedbackRequest update(FeedbackRequestUpdateDTO feedbackRequestUpdateDTO) sendNewRequestEmail(storedRequest); } + boolean currentUserSameAsRequestee = currentUser != null && currentUser.getId().equals(requestee.getId()); // Send self-review completion email to supervisor and pdl if appropriate - if (currentUserServices.getCurrentUser().getId().equals(requestee.getId())) { + if (currentUserSameAsRequestee) { sendSelfReviewCompletionEmailToSupervisor(feedbackRequest); } diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index 10b4c6b2ee..53841d8c39 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -1690,6 +1690,25 @@ void testUpdateStatusAndSubmitDateAuthorizedByRecipient() { assertResponseEqualsEntity(feedbackReq, response.getBody().get()); } + @Test + void testUpdateStatusAndSubmitDateAuthorizedByExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient01); + feedbackReq.setStatus("complete"); + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + final HttpRequest request = HttpRequest.PUT("", dto); + final HttpResponse response = clientExternalRecipient.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get()); + } + @Test void testUpdateStatusAuthorizedByCreator() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); From af123beaa9332f8f094e52fdfc915a3b31be1dc7 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Wed, 23 Oct 2024 16:25:34 -0400 Subject: [PATCH 021/102] 2024-10-23 - feedback - external reviewer - server-side --- .../FeedbackExternalRecipientController.java | 17 + .../FeedbackRequestServicesImpl.java | 16 +- .../FeedbackRequestControllerTest.java | 365 +++++++++++++++++- 3 files changed, 378 insertions(+), 20 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java index df498e2fe3..6e3eca07f2 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java @@ -67,6 +67,23 @@ public HttpResponse update(@Body @Valid @NotNull Fee .headers(headers -> headers.location(URI.create("/feedback_request/" + savedFeedback.getId()))); } + /** + * Get feedback request by ID + * + * @param id {@link UUID} ID of the request + * @return {@link FeedbackRequestResponseDTO} + */ + //@Secured(SecurityRule.IS_ANONYMOUS) + @Get("/{id}") + public HttpResponse getById(UUID id) { + FeedbackRequest feedbackRequest = feedbackReqServices.getById(id); + if (feedbackRequest.getExternalRecipientId() == null) { + throw new BadArgException("Missing required parameter: externalRecipientId"); + } + return feedbackRequest == null ? HttpResponse.notFound() : HttpResponse.ok(fromEntity(feedbackRequest)) + .headers(headers -> headers.location(URI.create("/feedback_request" + feedbackRequest.getId()))); + } + private FeedbackRequestResponseDTO fromEntity(FeedbackRequest feedbackRequest) { FeedbackRequestResponseDTO dto = new FeedbackRequestResponseDTO(); dto.setId(feedbackRequest.getId()); diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index 03c5796ab9..521caf277c 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -351,9 +351,12 @@ public FeedbackRequest getById(UUID id) { } else { if (externalRecipientId == null) { throw new PermissionException(NOT_AUTHORIZED_MSG); + } else { + if (!getIsPermittedForExternalRecipient(requesteeId, sendDate)) { + throw new PermissionException(NOT_AUTHORIZED_MSG); + } } } - return feedbackReq.get(); } @@ -427,6 +430,17 @@ private boolean getIsPermitted(UUID requesteeId, UUID recipientOrExternalRecipie return createIsPermitted(requesteeId) || currentUserId.equals(recipientOrExternalRecipientId); } + private boolean getIsPermittedForExternalRecipient(UUID requesteeId, LocalDate sendDate) { + LocalDate today = LocalDate.now(); + + // The recipient can only access the feedback request after it has been sent + if (sendDate.isAfter(today)) { + throw new PermissionException("You are not permitted to access this request before the send date."); + } + + return true; + } + private boolean updateDueDateIsPermitted(FeedbackRequest feedbackRequest) { return isCurrentUserAdminOrOwner(feedbackRequest); } diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index 53841d8c39..193b07ad14 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -959,9 +959,8 @@ void testGetFeedbackRequestByUnrelatedUserToExternalRecipient() { FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient); //get feedback request - final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())) - .basicAuth(unrelatedUser.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); - final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())); + final HttpResponse response = clientExternalRecipient.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); assertEquals(HttpStatus.OK, response.getStatus()); assertTrue(response.getBody().isPresent()); @@ -1710,7 +1709,7 @@ void testUpdateStatusAndSubmitDateAuthorizedByExternalRecipient() { } @Test - void testUpdateStatusAuthorizedByCreator() { + void testUpdateStatusAuthorizedByCreatorToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); @@ -1730,7 +1729,27 @@ void testUpdateStatusAuthorizedByCreator() { } @Test - void testUpdateStatusNotAuthorized() { + void testUpdateStatusAuthorizedByCreatorToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient01); + feedbackReq.setStatus("canceled"); + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + final HttpRequest request = HttpRequest.PUT("", dto) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get()); + } + + @Test + void testUpdateStatusNotAuthorizedToRecipient() { MemberProfile pdl = createADefaultMemberProfile(); assignPdlRole(pdl); MemberProfile requestee = createADefaultMemberProfileForPdl(pdl); @@ -1749,7 +1768,26 @@ void testUpdateStatusNotAuthorized() { } @Test - void testUpdateSubmitDateNotAuthorized() { + void testUpdateStatusNotAuthorizedToExternalRecipient() { + MemberProfile pdl = createADefaultMemberProfile(); + assignPdlRole(pdl); + MemberProfile requestee = createADefaultMemberProfileForPdl(pdl); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdl, requestee, externalRecipient01); + feedbackReq.setStatus("complete"); + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + final HttpRequest request = HttpRequest.PUT("", dto) + .basicAuth(requestee.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertUnauthorized(responseException); + } + + @Test + void testUpdateSubmitDateNotAuthorizedToRecipient() { MemberProfile pdl = createADefaultMemberProfile(); assignPdlRole(pdl); MemberProfile requestee = createADefaultMemberProfileForPdl(pdl); @@ -1773,7 +1811,31 @@ void testUpdateSubmitDateNotAuthorized() { } @Test - void testUpdateSubmitDateWhenPdlEnablesEdits() { + void testUpdateSubmitDateNotAuthorizedToExternalRecipient() { + MemberProfile pdl = createADefaultMemberProfile(); + assignPdlRole(pdl); + MemberProfile requestee = createADefaultMemberProfileForPdl(pdl); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + // Save feedback request that has not been submitted yet + final FeedbackRequest feedbackReq = createFeedbackRequest(pdl, requestee, externalRecipient01); + feedbackReq.setSubmitDate(null); + getFeedbackRequestRepository().save(feedbackReq); + + // The PDL attempts to submit the feedback request + feedbackReq.setSubmitDate(LocalDate.now()); + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + final HttpRequest request = HttpRequest.PUT("", dto) + .basicAuth(pdl.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertUnauthorized(responseException); + } + + @Test + void testUpdateSubmitDateWhenPdlEnablesEditsToRecipient() { MemberProfile pdl = createADefaultMemberProfile(); assignPdlRole(pdl); MemberProfile requestee = createADefaultMemberProfileForPdl(pdl); @@ -1798,7 +1860,32 @@ void testUpdateSubmitDateWhenPdlEnablesEdits() { } @Test - void testFeedbackRequestEnableEditsSendsEmail() { + void testUpdateSubmitDateWhenPdlEnablesEditsToExternalRecipient() { + MemberProfile pdl = createADefaultMemberProfile(); + assignPdlRole(pdl); + MemberProfile requestee = createADefaultMemberProfileForPdl(pdl); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + // Save feedback request that has already been submitted + final FeedbackRequest feedbackReq = createFeedbackRequest(pdl, requestee, externalRecipient01); + feedbackReq.setSubmitDate(LocalDate.now()); + getFeedbackRequestRepository().save(feedbackReq); + + // The PDL attempts to enable edits on the request + feedbackReq.setSubmitDate(null); + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + final HttpRequest request = HttpRequest.PUT("", dto) + .basicAuth(pdl.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get()); + } + + @Test + void testFeedbackRequestEnableEditsSendsEmailToRecipient() { MemberProfile pdl = createADefaultMemberProfile(); assignPdlRole(pdl); MemberProfile requestee = createADefaultMemberProfileForPdl(pdl); @@ -1834,7 +1921,43 @@ void testFeedbackRequestEnableEditsSendsEmail() { } @Test - void testUpdateAllFieldsUnauthorized() { + void testFeedbackRequestEnableEditsSendsEmailToExternalRecipient() { + MemberProfile pdl = createADefaultMemberProfile(); + assignPdlRole(pdl); + MemberProfile requestee = createADefaultMemberProfileForPdl(pdl); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + // Save feedback request that has already been submitted + final FeedbackRequest feedbackReq = createFeedbackRequest(pdl, requestee, externalRecipient01); + feedbackReq.setSubmitDate(LocalDate.now()); + feedbackReq.setStatus("submitted"); + getFeedbackRequestRepository().save(feedbackReq); + + // The PDL attempts to enable edits on the request + feedbackReq.setSubmitDate(null); + feedbackReq.setStatus("sent"); + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + final HttpRequest request = HttpRequest.PUT("", dto) + .basicAuth(pdl.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + String fromName = pdl.getFirstName() + " " + pdl.getLastName(); + // Verify appropriate email was sent + assertTrue(response.getBody().isPresent()); + assertEquals(1, emailSender.events.size()); + EmailHelper.validateEmail("SEND_EMAIL", + fromName, + pdl.getWorkEmail(), + checkInsConfiguration.getApplication().getFeedback().getRequestSubject(), + "You have received edit access to a feedback request", + externalRecipient01.getEmail(), + emailSender.events.getFirst() + ); + } + + @Test + void testUpdateAllFieldsUnauthorizedToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); MemberProfile recipient = createADefaultRecipient(); @@ -1854,7 +1977,27 @@ void testUpdateAllFieldsUnauthorized() { } @Test - void testAdminUpdatesAllFields() { + void testUpdateAllFieldsUnauthorizedToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient01); + feedbackReq.setStatus("complete"); + feedbackReq.setDueDate(LocalDate.now()); + feedbackReq.setSubmitDate(LocalDate.now()); + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + HttpRequest request = HttpRequest.PUT("", dto) + .basicAuth(requestee.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertUnauthorized(responseException); + } + + @Test + void testAdminUpdatesAllFieldsToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); MemberProfile recipient = createADefaultRecipient(); @@ -1877,7 +2020,30 @@ void testAdminUpdatesAllFields() { } @Test - void testAdminCancelsFeedbackRequest() { + void testAdminUpdatesAllFieldsToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + MemberProfile admin = createASecondDefaultMemberProfile(); + assignAdminRole(admin); + + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient01); + feedbackReq.setStatus("complete"); + feedbackReq.setDueDate(LocalDate.now()); + feedbackReq.setSubmitDate(LocalDate.now()); + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + HttpRequest request = HttpRequest.PUT("", dto) + .basicAuth(admin.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get()); + } + + @Test + void testAdminCancelsFeedbackRequestToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); MemberProfile recipient = createADefaultRecipient(); @@ -1899,7 +2065,29 @@ void testAdminCancelsFeedbackRequest() { } @Test - void testCreatorCancelsFeedbackRequest() { + void testAdminCancelsFeedbackRequestToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + MemberProfile admin = createASecondDefaultMemberProfile(); + assignAdminRole(admin); + + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient01); + feedbackReq.setStatus("canceled"); + + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + final HttpRequest request = HttpRequest.PUT("", dto) + .basicAuth(admin.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get()); + } + + @Test + void testCreatorCancelsFeedbackRequestToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); MemberProfile recipient = createADefaultRecipient(); @@ -1919,7 +2107,27 @@ void testCreatorCancelsFeedbackRequest() { } @Test - void testCreatorCancelsSubmittedFeedbackRequest() { + void testCreatorCancelsFeedbackRequestToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient01); + feedbackReq.setStatus("canceled"); + + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + final HttpRequest request = HttpRequest.PUT("", dto) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get()); + } + + @Test + void testCreatorCancelsSubmittedFeedbackRequestToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); MemberProfile recipient = createADefaultRecipient(); @@ -1942,7 +2150,30 @@ void testCreatorCancelsSubmittedFeedbackRequest() { } @Test - void testUnauthorizedCancelsFeedbackRequest() { + void testCreatorCancelsSubmittedFeedbackRequestToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + FeedbackTemplate template = createFeedbackTemplate(pdlMemberProfile.getId()); + getFeedbackTemplateRepository().save(template); + final FeedbackRequest submittedFeedbackRequest = saveSampleFeedbackRequestWithStatus(pdlMemberProfile, employeeMemberProfile, externalRecipient01, template.getId(), "submitted"); + + submittedFeedbackRequest.setStatus("canceled"); + + final FeedbackRequestUpdateDTO dto = updateDTO(submittedFeedbackRequest); + + final HttpRequest request = HttpRequest.PUT("", dto) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); + assertEquals("Attempted to cancel a feedback request that was already submitted", responseException.getMessage()); + } + + @Test + void testUnauthorizedCancelsFeedbackRequestToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); MemberProfile recipient = createADefaultRecipient(); @@ -1961,7 +2192,26 @@ void testUnauthorizedCancelsFeedbackRequest() { } @Test - void testDeleteFeedbackRequestByMember() { + void testUnauthorizedCancelsFeedbackRequestToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient01); + feedbackReq.setStatus("canceled"); + + final FeedbackRequestUpdateDTO dto = updateDTO(feedbackReq); + + final HttpRequest request = HttpRequest.PUT("", dto) + .basicAuth(employeeMemberProfile.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertUnauthorized(responseException); + } + + @Test + void testDeleteFeedbackRequestByMemberToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); MemberProfile memberTwo = createAnUnrelatedUser(); @@ -1976,7 +2226,23 @@ void testDeleteFeedbackRequestByMember() { } @Test - void testDeleteByAdmin() { + void testDeleteFeedbackRequestByMemberToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + MemberProfile memberTwo = createAnUnrelatedUser(); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient01); + + getFeedbackRequestRepository().save(feedbackReq); + final MutableHttpRequest request = HttpRequest.DELETE(String.format("/%s", feedbackReq.getId())).basicAuth(memberTwo.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertUnauthorized(responseException); + } + + @Test + void testDeleteByAdminToRecipient() { MemberProfile admin = createASecondDefaultMemberProfile(); assignAdminRole(admin); MemberProfile employeeMemberProfile = createADefaultMemberProfile(); @@ -1989,7 +2255,20 @@ void testDeleteByAdmin() { } @Test - void testDeleteFeedbackRequestByPDL() { + void testDeleteByAdminToExternalRecipient() { + MemberProfile admin = createASecondDefaultMemberProfile(); + assignAdminRole(admin); + MemberProfile employeeMemberProfile = createADefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + FeedbackRequest feedbackReq = saveFeedbackRequest(admin, employeeMemberProfile, externalRecipient01); + getFeedbackRequestRepository().save(feedbackReq); + final MutableHttpRequest request = HttpRequest.DELETE(String.format("/%s", feedbackReq.getId())).basicAuth(admin.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + assertEquals(HttpStatus.OK, response.getStatus()); + } + + @Test + void testDeleteFeedbackRequestByPDLToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); MemberProfile recipient = createADefaultRecipient(); @@ -2002,7 +2281,20 @@ void testDeleteFeedbackRequestByPDL() { } @Test - void testDeleteFeedbackReqByUnassignedPDL() { + void testDeleteFeedbackRequestByPDLToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + MemberProfile employeeMemberProfile = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, employeeMemberProfile, externalRecipient01); + getFeedbackRequestRepository().save(feedbackReq); + final MutableHttpRequest request = HttpRequest.DELETE(String.format("/%s", feedbackReq.getId())).basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + assertEquals(HttpStatus.OK, response.getStatus()); + } + + @Test + void testDeleteFeedbackReqByUnassignedPDLToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); MemberProfile memberOne = createASecondDefaultMemberProfile(); @@ -2018,7 +2310,23 @@ void testDeleteFeedbackReqByUnassignedPDL() { } @Test - void testRecipientGetBeforeSendDateNotAuthorized() { + void testDeleteFeedbackReqByUnassignedPDLToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile memberOne = createASecondDefaultMemberProfile(); + MemberProfile creator = createAnUnrelatedUser(); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + FeedbackRequest feedbackReq = saveFeedbackRequest(creator, memberOne, externalRecipient01); + getFeedbackRequestRepository().save(feedbackReq); + final MutableHttpRequest request = HttpRequest.DELETE(String.format("/%s", feedbackReq.getId())).basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); + + assertUnauthorized(responseException); + } + + @Test + void testRecipientGetBeforeSendDateNotAuthorizedToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); MemberProfile recipient = createADefaultRecipient(); @@ -2037,6 +2345,25 @@ void testRecipientGetBeforeSendDateNotAuthorized() { assertEquals("You are not permitted to access this request before the send date.", responseException.getMessage()); } + @Test + void testRecipientGetBeforeSendDateNotAuthorizedToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, requestee, externalRecipient01); + feedbackRequest.setSendDate(LocalDate.now().plusDays(1)); + getFeedbackRequestRepository().save(feedbackRequest); + + //get feedback request + final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + clientExternalRecipient.toBlocking().exchange(request, Map.class)); + + // the sendDate must be before the sent date + assertEquals(HttpStatus.FORBIDDEN, responseException.getStatus()); + assertEquals("You are not permitted to access this request before the send date.", responseException.getMessage()); + } + @Test void testRecipientGetBeforeSendDateAsAdminAuthorized() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); From 2429ca3a85e7e7171ea3a44c401e9d8092cb17af Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Thu, 24 Oct 2024 09:18:17 -0400 Subject: [PATCH 022/102] 2024-10-23 - feedback - external reviewer - server-side --- .../FeedbackRequestServicesImpl.java | 17 +++++-- .../FeedbackRequestControllerTest.java | 46 ++++++++++++++----- 2 files changed, 48 insertions(+), 15 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index 521caf277c..d39c568057 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -336,6 +336,14 @@ public void delete(UUID id) { @Override public FeedbackRequest getById(UUID id) { + MemberProfile currentUser; + + try { + currentUser = currentUserServices.getCurrentUser(); + } catch (NotFoundException notFoundException) { + currentUser = null; + } + final Optional feedbackReq = feedbackReqRepository.findById(id); if (feedbackReq.isEmpty()) { throw new NotFoundException("No feedback req with id " + id); @@ -344,8 +352,9 @@ public FeedbackRequest getById(UUID id) { final UUID requesteeId = feedbackReq.get().getRequesteeId(); final UUID recipientId = feedbackReq.get().getRecipientId(); final UUID externalRecipientId = feedbackReq.get().getExternalRecipientId(); - if (recipientId != null) { - if (!getIsPermitted(requesteeId, recipientId, sendDate)) { + final UUID recipientOrExternalRecipientId = (recipientId != null) ? recipientId : externalRecipientId; + if (currentUser != null) { + if (!getIsPermitted(requesteeId, recipientOrExternalRecipientId, sendDate)) { throw new PermissionException(NOT_AUTHORIZED_MSG); } } else { @@ -420,6 +429,7 @@ private boolean createIsPermitted(UUID requesteeId) { private boolean getIsPermitted(UUID requesteeId, UUID recipientOrExternalRecipientId, LocalDate sendDate) { LocalDate today = LocalDate.now(); + boolean getIsPermittedReturn; final UUID currentUserId = currentUserServices.getCurrentUser().getId(); // The recipient can only access the feedback request after it has been sent @@ -427,7 +437,8 @@ private boolean getIsPermitted(UUID requesteeId, UUID recipientOrExternalRecipie throw new PermissionException("You are not permitted to access this request before the send date."); } - return createIsPermitted(requesteeId) || currentUserId.equals(recipientOrExternalRecipientId); + getIsPermittedReturn = createIsPermitted(requesteeId) || currentUserId.equals(recipientOrExternalRecipientId); + return getIsPermittedReturn; } private boolean getIsPermittedForExternalRecipient(UUID requesteeId, LocalDate sendDate) { diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index 193b07ad14..fcbd1ee222 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -805,11 +805,10 @@ void testGetFeedbackRequestByUnassignedPdlToExternalRecipient() { //get feedback request final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())) .basicAuth(unrelatedPdl.getWorkEmail(), RoleType.Constants.PDL_ROLE); - final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); - assertEquals(HttpStatus.OK, response.getStatus()); - assertTrue(response.getBody().isPresent()); - assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); + assertUnauthorized(responseException); } @Test @@ -843,11 +842,11 @@ void testGetFeedbackRequestByRequesteeToExternalRecipient() { //get feedback request final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())) .basicAuth(memberProfile2.getWorkEmail(), RoleType.Constants.MEMBER_ROLE); - final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + client.toBlocking().exchange(request, Map.class)); - assertEquals(HttpStatus.OK, response.getStatus()); - assertTrue(response.getBody().isPresent()); - assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); + // requestee should not be able to get the feedback request about them + assertUnauthorized(responseException); } @Test @@ -878,9 +877,8 @@ void testGetFeedbackRequestByExternalRecipient() { FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient); //get feedback request - final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())) - .basicAuth(externalRecipient.getEmail(), RoleType.Constants.MEMBER_ROLE); - final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())); + final HttpResponse response = clientExternalRecipient.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); // recipient must be able to get the feedback request assertEquals(HttpStatus.OK, response.getStatus()); @@ -2365,7 +2363,7 @@ void testRecipientGetBeforeSendDateNotAuthorizedToExternalRecipient() { } @Test - void testRecipientGetBeforeSendDateAsAdminAuthorized() { + void testRecipientGetBeforeSendDateAsAdminAuthorizedToRecipient() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); MemberProfile recipient = createADefaultRecipient(); @@ -2388,6 +2386,30 @@ void testRecipientGetBeforeSendDateAsAdminAuthorized() { assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); } + @Test + void testRecipientGetBeforeSendDateAsAdminAuthorizedToExternalRecipient() { + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + MemberProfile adminUser = createAThirdDefaultMemberProfile(); + assignAdminRole(adminUser); + + // Save feedback request with send date in the future + FeedbackRequest feedbackRequest = createFeedbackRequest(pdlMemberProfile, requestee, externalRecipient01); + feedbackRequest.setSendDate(LocalDate.now().plusDays(1)); + getFeedbackRequestRepository().save(feedbackRequest); + + //get feedback request + final HttpRequest request = HttpRequest.GET(String.format("%s", feedbackRequest.getId())) + .basicAuth(adminUser.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpResponse response = client.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); + + // the sendDate must be before the sent date unless its an admin + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); + } + @Test void testRecipientGetBeforeSendDateAsPdlAuthorized() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); From b428976a1e913a4a339c5f9daab9d00118aad513 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Thu, 24 Oct 2024 09:41:31 -0400 Subject: [PATCH 023/102] 2024-10-23 - feedback - external reviewer - server-side --- .../FeedbackRequestControllerTest.java | 124 ++++++++++++++++-- 1 file changed, 114 insertions(+), 10 deletions(-) diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index fcbd1ee222..ae91aee52c 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -1171,7 +1171,7 @@ void testGetByCreatorRequesteeIdNotPermittedToRecipients() { } @Test - void testGetByCreatorRequesteeIdNotPermittedToExternalRecipients() { + void testGetByCreatorRequesteeIdIsPermittedToExternalRecipients() { //create two employee-PDL relationships MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); @@ -1187,15 +1187,12 @@ void testGetByCreatorRequesteeIdNotPermittedToExternalRecipients() { saveFeedbackRequest(pdlMemberProfileTwo, memberTwo, externalRecipient02); //search for feedback requests by a specific creator, requestee, and template - final HttpRequest request = HttpRequest.GET(String.format("/?creatorId=%s&requesteeId=%s", feedbackReq.getCreatorId(), feedbackReq.getRequesteeId())) - .basicAuth(externalRecipient02.getEmail(), RoleType.Constants.MEMBER_ROLE); - ; - - final HttpResponse> response = client.toBlocking() + final HttpRequest request = HttpRequest.GET(String.format("/?creatorId=%s&requesteeId=%s&externalRecipientId=%s", feedbackReq.getCreatorId(), feedbackReq.getRequesteeId(), feedbackReq.getExternalRecipientId())); + final HttpResponse> response = clientExternalRecipient.toBlocking() .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); assertTrue(response.getBody().isPresent()); - assertEquals(0, response.getBody().get().size()); + assertEquals(1, response.getBody().get().size()); assertEquals(HttpStatus.OK, response.getStatus()); } @@ -2433,7 +2430,7 @@ void testRecipientGetBeforeSendDateAsPdlAuthorized() { } @Test - void testGetMultipleRequesteesByAdmin() { + void testGetMultipleRequesteesByAdminToRecipient() { MemberProfile adminMemberProfile = createAnUnrelatedUser(); assignAdminRole(adminMemberProfile); @@ -2469,7 +2466,43 @@ void testGetMultipleRequesteesByAdmin() { } @Test - void testGetMultipleRequesteesByPDL() { + void testGetMultipleRequesteesByAdminToExternalRecipient() { + MemberProfile adminMemberProfile = createAnUnrelatedUser(); + assignAdminRole(adminMemberProfile); + + //create two employee-PDL relationships + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile); + MemberProfile pdlMemberProfileTwo = createASecondDefaultMemberProfile(); + assignPdlRole(pdlMemberProfileTwo); + MemberProfile memberTwo = createASecondDefaultMemberProfileForPdl(pdlMemberProfileTwo); + + MemberProfile memberThree = createAThirdDefaultMemberProfileForPdl(pdlMemberProfileTwo); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + // Create two sample feedback requests by the same PDL + FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01); + FeedbackRequest feedbackReqTwo = saveFeedbackRequest(pdlMemberProfile, memberTwo, externalRecipient01); + saveFeedbackRequest(pdlMemberProfile, memberThree, externalRecipient01); + + // Create a feedback request by a different PDL + saveFeedbackRequest(pdlMemberProfileTwo, memberThree, externalRecipient01); + + final HttpRequest request = HttpRequest.GET(String.format("/?requesteeIds=%s&requesteeIds=%s", memberOne.getId(), memberTwo.getId())) + .basicAuth(adminMemberProfile.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpResponse> response = client.toBlocking() + .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertEquals(2, response.getBody().get().size()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0)); + assertResponseEqualsEntity(feedbackReqTwo, response.getBody().get().get(1)); + } + + @Test + void testGetMultipleRequesteesByPdlToRecipient() { //create two employee-PDL relationships MemberProfile pdlMemberProfile = createADefaultMemberProfile(); assignPdlRole(pdlMemberProfile); @@ -2502,7 +2535,40 @@ void testGetMultipleRequesteesByPDL() { } @Test - void testGetMultipleRequesteesBySupervisor() { + void testGetMultipleRequesteesByPdlToExternalRecipient() { + //create two employee-PDL relationships + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile); + MemberProfile pdlMemberProfileTwo = createASecondDefaultMemberProfile(); + assignPdlRole(pdlMemberProfileTwo); + MemberProfile memberTwo = createASecondDefaultMemberProfileForPdl(pdlMemberProfileTwo); + + MemberProfile memberThree = createAThirdDefaultMemberProfileForPdl(pdlMemberProfileTwo); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + // Create two sample feedback requests by the same PDL + FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01); + FeedbackRequest feedbackReqTwo = saveFeedbackRequest(pdlMemberProfile, memberTwo, externalRecipient01); + saveFeedbackRequest(pdlMemberProfile, memberThree, externalRecipient01); + + // Create a feedback request by a different PDL + saveFeedbackRequest(pdlMemberProfileTwo, memberThree, externalRecipient01); + + final HttpRequest request = HttpRequest.GET(String.format("/?creatorId=%s&requesteeIds=%s&requesteeIds=%s", pdlMemberProfile.getId(), memberOne.getId(), memberTwo.getId())) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.PDL_ROLE); + final HttpResponse> response = client.toBlocking() + .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertEquals(2, response.getBody().get().size()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0)); + assertResponseEqualsEntity(feedbackReqTwo, response.getBody().get().get(1)); + } + + @Test + void testGetMultipleRequesteesBySupervisorToRecipient() { MemberProfile supervisor = createADefaultSupervisor(); MemberProfile anotherSupervisor = createAnotherSupervisor(); @@ -2537,4 +2603,42 @@ void testGetMultipleRequesteesBySupervisor() { assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0)); assertResponseEqualsEntity(feedbackReqTwo, response.getBody().get().get(1)); } + + @Test + void testGetMultipleRequesteesBySupervisorToExternalRecipient() { + MemberProfile supervisor = createADefaultSupervisor(); + MemberProfile anotherSupervisor = createAnotherSupervisor(); + + //create two employee-PDL relationships + MemberProfile pdlMemberProfile = createADefaultMemberProfile(); + assignPdlRole(pdlMemberProfile); + MemberProfile memberOne = createAProfileWithSupervisorAndPDL(supervisor, pdlMemberProfile); + + MemberProfile pdlMemberProfileTwo = createASecondDefaultMemberProfile(); + assignPdlRole(pdlMemberProfileTwo); + MemberProfile memberTwo = createAnotherProfileWithSupervisorAndPDL(supervisor, pdlMemberProfileTwo); + + MemberProfile memberThree = createYetAnotherProfileWithSupervisorAndPDL(anotherSupervisor, pdlMemberProfileTwo); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + // Create two sample feedback requests by the same PDL + FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01); + FeedbackRequest feedbackReqTwo = saveFeedbackRequest(pdlMemberProfile, memberTwo, externalRecipient01); + saveFeedbackRequest(pdlMemberProfileTwo, memberThree, externalRecipient01); + + // Create a feedback request by a different PDL + saveFeedbackRequest(pdlMemberProfileTwo, memberThree, externalRecipient01); + + final HttpRequest request = HttpRequest.GET(String.format("/?requesteeIds=%s&requesteeIds=%s", memberOne.getId(), memberTwo.getId())) + .basicAuth(pdlMemberProfile.getWorkEmail(), RoleType.Constants.ADMIN_ROLE); + final HttpResponse> response = client.toBlocking() + .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertEquals(2, response.getBody().get().size()); + assertResponseEqualsEntity(feedbackReq, response.getBody().get().get(0)); + assertResponseEqualsEntity(feedbackReqTwo, response.getBody().get().get(1)); + } + } From 936b1bce3a9810be047bf414273039b731441b0e Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Thu, 24 Oct 2024 10:21:20 -0400 Subject: [PATCH 024/102] 2024-10-24 - feedback - external reviewer - server-side --- ...cipient.sql => V202410241018__feedback_external_recipient.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename server/src/main/resources/db/common/{V116__feedback_external_recipient.sql => V202410241018__feedback_external_recipient.sql} (100%) diff --git a/server/src/main/resources/db/common/V116__feedback_external_recipient.sql b/server/src/main/resources/db/common/V202410241018__feedback_external_recipient.sql similarity index 100% rename from server/src/main/resources/db/common/V116__feedback_external_recipient.sql rename to server/src/main/resources/db/common/V202410241018__feedback_external_recipient.sql From 71fb9e2ca46b59b6958e2831ed056ba7a6302b5d Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Thu, 24 Oct 2024 12:09:51 -0400 Subject: [PATCH 025/102] 2024-10-24 - feedback - external reviewer - server-side --- .../FeedbackExternalRecipientController.java | 87 ++++++--------- .../FeedbackExternalRecipientResponseDTO.java | 38 +++++++ .../FeedbackRequestController.java | 18 +--- ...ackRequestExternalRecipientController.java | 102 ++++++++++++++++++ .../FeedbackRequestControllerTest.java | 2 +- 5 files changed, 174 insertions(+), 73 deletions(-) create mode 100644 server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientResponseDTO.java create mode 100644 server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java index 6e3eca07f2..1f24011b21 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java @@ -7,16 +7,13 @@ import io.micronaut.core.annotation.Nullable; import io.micronaut.core.convert.format.Format; import io.micronaut.http.HttpResponse; -import io.micronaut.http.HttpStatus; import io.micronaut.http.annotation.*; import io.micronaut.scheduling.TaskExecutors; import io.micronaut.scheduling.annotation.ExecuteOn; import io.micronaut.security.annotation.Secured; import io.micronaut.security.rules.SecurityRule; -import io.micronaut.security.utils.SecurityService; import io.micronaut.validation.Validated; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.inject.Inject; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; @@ -28,76 +25,52 @@ @Validated @Controller("/services/feedback/external/recipients") @ExecuteOn(TaskExecutors.BLOCKING) -@Secured(SecurityRule.IS_ANONYMOUS) +@Secured(SecurityRule.IS_AUTHENTICATED) @Tag(name = "feedback external recipient") public class FeedbackExternalRecipientController { - private final FeedbackRequestServices feedbackReqServices; private final FeedbackExternalRecipientServices feedbackExternalRecipientServices; - public FeedbackExternalRecipientController(FeedbackRequestServices feedbackRequestServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices) { - this.feedbackReqServices = feedbackRequestServices; + public FeedbackExternalRecipientController(FeedbackExternalRecipientServices feedbackExternalRecipientServices) { this.feedbackExternalRecipientServices = feedbackExternalRecipientServices; } - @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,externalRecipientId,requesteeIds}") - public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable UUID externalRecipientId, @Nullable List requesteeIds) { - if (externalRecipientId == null) { - throw new BadArgException("Missing required parameter: externalRecipientId"); - } - return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, externalRecipientId, requesteeIds) - .stream() - .map(this::fromEntity) - .toList(); - } - /** - * Update a feedback request + * Create a feedback request external recipient * - * @param requestBody {@link FeedbackRequestUpdateDTO} The updated feedback request - * @return {@link FeedbackRequestResponseDTO} + * @param feedbackExternalRecipientCreateDTO {@link FeedbackExternalRecipientCreateDTO} New feedback-req external recipient to create + * @return {@link FeedbackExternalRecipient} */ - @Put - public HttpResponse update(@Body @Valid @NotNull FeedbackRequestUpdateDTO requestBody) { - if (requestBody.getExternalRecipientId() == null) { - throw new BadArgException("Missing required parameter: externalRecipientId"); + @RequiredPermission(Permission.CAN_CREATE_FEEDBACK_REQUEST) + @Post + public HttpResponse save(@Body @Valid @NotNull FeedbackExternalRecipientCreateDTO feedbackExternalRecipientCreateDTO) { + FeedbackExternalRecipient savedFeedbackExternalRecipient; + FeedbackExternalRecipient feedbackExternalRecipientFromDto = fromDTO(feedbackExternalRecipientCreateDTO); + try { + savedFeedbackExternalRecipient = feedbackExternalRecipientServices.save(feedbackExternalRecipientFromDto); + } catch (Exception e) { + throw e; } - FeedbackRequest savedFeedback = feedbackReqServices.update(requestBody); - return HttpResponse.ok(fromEntity(savedFeedback)) - .headers(headers -> headers.location(URI.create("/feedback_request/" + savedFeedback.getId()))); + return HttpResponse.created(fromEntity(savedFeedbackExternalRecipient)) + .headers(headers -> headers.location(URI.create("/feedback_external_recipient/" + savedFeedbackExternalRecipient.getId()))); } - /** - * Get feedback request by ID - * - * @param id {@link UUID} ID of the request - * @return {@link FeedbackRequestResponseDTO} - */ - //@Secured(SecurityRule.IS_ANONYMOUS) - @Get("/{id}") - public HttpResponse getById(UUID id) { - FeedbackRequest feedbackRequest = feedbackReqServices.getById(id); - if (feedbackRequest.getExternalRecipientId() == null) { - throw new BadArgException("Missing required parameter: externalRecipientId"); - } - return feedbackRequest == null ? HttpResponse.notFound() : HttpResponse.ok(fromEntity(feedbackRequest)) - .headers(headers -> headers.location(URI.create("/feedback_request" + feedbackRequest.getId()))); + private FeedbackExternalRecipient fromDTO(FeedbackExternalRecipientCreateDTO dto) { + FeedbackExternalRecipient object = new FeedbackExternalRecipient(); + object.setEmail(dto.getEmail()); + object.setFirstName(dto.getFirstName()); + object.setLastName(dto.getLastName()); + object.setCompanyName(dto.getCompanyName()); + return object; } - private FeedbackRequestResponseDTO fromEntity(FeedbackRequest feedbackRequest) { - FeedbackRequestResponseDTO dto = new FeedbackRequestResponseDTO(); - dto.setId(feedbackRequest.getId()); - dto.setCreatorId(feedbackRequest.getCreatorId()); - dto.setRequesteeId(feedbackRequest.getRequesteeId()); - dto.setRecipientId(feedbackRequest.getRecipientId()); - dto.setTemplateId(feedbackRequest.getTemplateId()); - dto.setSendDate(feedbackRequest.getSendDate()); - dto.setDueDate(feedbackRequest.getDueDate()); - dto.setStatus(feedbackRequest.getStatus()); - dto.setSubmitDate(feedbackRequest.getSubmitDate()); - dto.setReviewPeriodId(feedbackRequest.getReviewPeriodId()); - dto.setExternalRecipientId(feedbackRequest.getExternalRecipientId()); - + private FeedbackExternalRecipientResponseDTO fromEntity(FeedbackExternalRecipient feedbackExternalRecipient) { + FeedbackExternalRecipientResponseDTO dto = new FeedbackExternalRecipientResponseDTO(); + dto.setId(feedbackExternalRecipient.getId()); + dto.setEmail(feedbackExternalRecipient.getEmail()); + dto.setFirstName(feedbackExternalRecipient.getFirstName()); + dto.setLastName(feedbackExternalRecipient.getLastName()); + dto.setCompanyName(feedbackExternalRecipient.getCompanyName()); return dto; } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientResponseDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientResponseDTO.java new file mode 100644 index 0000000000..67ff27ae26 --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientResponseDTO.java @@ -0,0 +1,38 @@ +package com.objectcomputing.checkins.services.feedback_external_recipient; + +import io.micronaut.core.annotation.Introspected; +import io.micronaut.core.annotation.Nullable; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; + +import java.util.UUID; + +@Getter +@Setter +@Introspected +public class FeedbackExternalRecipientResponseDTO { + + @NotNull + @Schema(description = "id of the feedback-external-recipient") + private UUID id; + + @NotBlank + @Schema(description = "email of the feedback-external-recipient") + private String email; + + @Nullable + @Schema(description = "first name of the feedback-external-recipient") + private String firstName; + + @Nullable + @Schema(description = "last name of the feedback-external-recipient") + private String lastName; + + @Nullable + @Schema(description = "company-name of the feedback-external-recipient") + private String companyName; + +} diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java index 663a5e0668..6664950f22 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java @@ -1,7 +1,8 @@ package com.objectcomputing.checkins.services.feedback_request; -import com.nimbusds.jose.proc.SecurityContext; import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipient; +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientCreateDTO; +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientResponseDTO; import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientServices; import com.objectcomputing.checkins.services.permissions.Permission; import com.objectcomputing.checkins.services.permissions.RequiredPermission; @@ -16,16 +17,12 @@ import io.micronaut.http.annotation.Post; import io.micronaut.http.annotation.Put; import io.micronaut.http.annotation.Status; -import io.micronaut.http.exceptions.HttpStatusException; import io.micronaut.scheduling.TaskExecutors; import io.micronaut.scheduling.annotation.ExecuteOn; import io.micronaut.security.annotation.Secured; -import io.micronaut.security.authentication.Authentication; import io.micronaut.security.rules.SecurityRule; -import io.micronaut.security.utils.SecurityService; import io.micronaut.validation.Validated; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.inject.Inject; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; @@ -43,8 +40,6 @@ public class FeedbackRequestController { private final FeedbackRequestServices feedbackReqServices; private final FeedbackExternalRecipientServices feedbackExternalRecipientServices; - @Inject - SecurityService securityService; public FeedbackRequestController(FeedbackRequestServices feedbackReqServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices) { this.feedbackReqServices = feedbackReqServices; @@ -60,13 +55,7 @@ public FeedbackRequestController(FeedbackRequestServices feedbackReqServices, Fe @RequiredPermission(Permission.CAN_CREATE_FEEDBACK_REQUEST) @Post public HttpResponse save(@Body @Valid @NotNull FeedbackRequestCreateDTO requestBody) { - FeedbackRequest savedFeedbackRequest; - FeedbackRequest feedbackRequest = fromDTO(requestBody); - try { - savedFeedbackRequest = feedbackReqServices.save(feedbackRequest); - } catch (Exception e) { - throw e; - } + FeedbackRequest savedFeedbackRequest = feedbackReqServices.save(fromDTO(requestBody)); return HttpResponse.created(fromEntity(savedFeedbackRequest)) .headers(headers -> headers.location(URI.create("/feedback_request/" + savedFeedbackRequest.getId()))); } @@ -144,7 +133,6 @@ private FeedbackRequestResponseDTO fromEntity(FeedbackRequest feedbackRequest) { dto.setSubmitDate(feedbackRequest.getSubmitDate()); dto.setReviewPeriodId(feedbackRequest.getReviewPeriodId()); dto.setExternalRecipientId(feedbackRequest.getExternalRecipientId()); - return dto; } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java new file mode 100644 index 0000000000..003276decf --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java @@ -0,0 +1,102 @@ +package com.objectcomputing.checkins.services.feedback_request; + +import com.objectcomputing.checkins.exceptions.BadArgException; +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientServices; +import io.micronaut.core.annotation.Nullable; +import io.micronaut.core.convert.format.Format; +import io.micronaut.http.HttpResponse; +import io.micronaut.http.annotation.Body; +import io.micronaut.http.annotation.Controller; +import io.micronaut.http.annotation.Get; +import io.micronaut.http.annotation.Put; +import io.micronaut.scheduling.TaskExecutors; +import io.micronaut.scheduling.annotation.ExecuteOn; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; +import io.micronaut.validation.Validated; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; + +import java.net.URI; +import java.time.LocalDate; +import java.util.List; +import java.util.UUID; + +@Validated +@Controller("/services/feedback/requests/external/recipients") +@ExecuteOn(TaskExecutors.BLOCKING) +@Secured(SecurityRule.IS_ANONYMOUS) +@Tag(name = "feedback external recipient") +public class FeedbackRequestExternalRecipientController { + + private final FeedbackRequestServices feedbackReqServices; + private final FeedbackExternalRecipientServices feedbackExternalRecipientServices; + + public FeedbackRequestExternalRecipientController(FeedbackRequestServices feedbackRequestServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices) { + this.feedbackReqServices = feedbackRequestServices; + this.feedbackExternalRecipientServices = feedbackExternalRecipientServices; + } + + @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,externalRecipientId,requesteeIds}") + public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable UUID externalRecipientId, @Nullable List requesteeIds) { + if (externalRecipientId == null) { + throw new BadArgException("Missing required parameter: externalRecipientId"); + } + return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, externalRecipientId, requesteeIds) + .stream() + .map(this::feedbackRequestFromEntity) + .toList(); + } + + /** + * Update a feedback request + * + * @param requestBody {@link FeedbackRequestUpdateDTO} The updated feedback request + * @return {@link FeedbackRequestResponseDTO} + */ + @Put + public HttpResponse update(@Body @Valid @NotNull FeedbackRequestUpdateDTO requestBody) { + if (requestBody.getExternalRecipientId() == null) { + throw new BadArgException("Missing required parameter: externalRecipientId"); + } + FeedbackRequest savedFeedback = feedbackReqServices.update(requestBody); + return HttpResponse.ok(feedbackRequestFromEntity(savedFeedback)) + .headers(headers -> headers.location(URI.create("/feedback_request/" + savedFeedback.getId()))); + } + + /** + * Get feedback request by ID + * + * @param id {@link UUID} ID of the request + * @return {@link FeedbackRequestResponseDTO} + */ + //@Secured(SecurityRule.IS_ANONYMOUS) + @Get("/{id}") + public HttpResponse getById(UUID id) { + FeedbackRequest feedbackRequest = feedbackReqServices.getById(id); + if (feedbackRequest.getExternalRecipientId() == null) { + throw new BadArgException("Missing required parameter: externalRecipientId"); + } + return feedbackRequest == null ? HttpResponse.notFound() : HttpResponse.ok(feedbackRequestFromEntity(feedbackRequest)) + .headers(headers -> headers.location(URI.create("/feedback_request" + feedbackRequest.getId()))); + } + + private FeedbackRequestResponseDTO feedbackRequestFromEntity(FeedbackRequest feedbackRequest) { + FeedbackRequestResponseDTO dto = new FeedbackRequestResponseDTO(); + dto.setId(feedbackRequest.getId()); + dto.setCreatorId(feedbackRequest.getCreatorId()); + dto.setRequesteeId(feedbackRequest.getRequesteeId()); + dto.setRecipientId(feedbackRequest.getRecipientId()); + dto.setTemplateId(feedbackRequest.getTemplateId()); + dto.setSendDate(feedbackRequest.getSendDate()); + dto.setDueDate(feedbackRequest.getDueDate()); + dto.setStatus(feedbackRequest.getStatus()); + dto.setSubmitDate(feedbackRequest.getSubmitDate()); + dto.setReviewPeriodId(feedbackRequest.getReviewPeriodId()); + dto.setExternalRecipientId(feedbackRequest.getExternalRecipientId()); + + return dto; + } + +} diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index ae91aee52c..aaa7c718ba 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -54,7 +54,7 @@ class FeedbackRequestControllerTest extends TestContainersSuite implements Membe HttpClient client; @Inject - @Client("/services/feedback/external/recipients") + @Client("/services/feedback/requests/external/recipients") HttpClient clientExternalRecipient; @Inject From 8179528480ddb9f3ff6481989b34de989c641d5c Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Fri, 25 Oct 2024 09:46:00 -0400 Subject: [PATCH 026/102] 2024-10-25 - feedback - external reviewer - server-side --- .../resources/db/dev/R__Load_testing_data.sql | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/server/src/main/resources/db/dev/R__Load_testing_data.sql b/server/src/main/resources/db/dev/R__Load_testing_data.sql index 2aa8a6afc3..f531449ce2 100644 --- a/server/src/main/resources/db/dev/R__Load_testing_data.sql +++ b/server/src/main/resources/db/dev/R__Load_testing_data.sql @@ -25,6 +25,7 @@ delete from team_member; delete from team; delete from feedback_answers; delete from feedback_requests; +delete from feedback_external_recipient; delete from template_questions; delete from review_periods; delete from feedback_templates; @@ -1245,6 +1246,24 @@ INSERT INTO template_questions VALUES ('174e5851-cb24-4a0f-890c-e6f041db4127', PGP_SYM_ENCRYPT('Please provide any additional context or reasoning relevant to your assessment of this team member.', '${aeskey}'), 'd1e94b60-47c4-4945-87d1-4dc88f088e57', 15, 'TEXT'); +-- Feedback Request External Recipients +INSERT INTO feedback_external_recipient +(id, email, firstname, lastname, company_name) +VALUES('ca0e2cbc-56dd-4e97-aa65-d2f2d5f47ff5', PGP_SYM_ENCRYPT('john.smith@fakeacme.com', '${aeskey}'), PGP_SYM_ENCRYPT('John', '${aeskey}'), PGP_SYM_ENCRYPT('Smith', '${aeskey}'), PGP_SYM_ENCRYPT('Fake Acme, Inc', '${aeskey}')) +; +INSERT INTO feedback_external_recipient +(id, email, firstname, lastname, company_name) +VALUES('60069963-8a11-4c40-843d-5ffafbcbeb1c', PGP_SYM_ENCRYPT('jane.doe@fakeacme.com', '${aeskey}'), PGP_SYM_ENCRYPT('Jane', '${aeskey}'), PGP_SYM_ENCRYPT('Doe', '${aeskey}'), PGP_SYM_ENCRYPT('Fake Acme, Inc', '${aeskey}')) +; +INSERT INTO feedback_external_recipient +(id, email, firstname, lastname, company_name) +VALUES('70eef321-e4cb-43c2-b50e-c666949978b5', PGP_SYM_ENCRYPT('bill.gates@microsoft.com', '${aeskey}'), PGP_SYM_ENCRYPT('Bill', '${aeskey}'), PGP_SYM_ENCRYPT('Gates', '${aeskey}'), PGP_SYM_ENCRYPT('Microsoft', '${aeskey}')) +; +INSERT INTO feedback_external_recipient +(id, email, firstname, lastname, company_name) +VALUES('9aefc565-b9b0-4efa-bf9e-c721441d2747', PGP_SYM_ENCRYPT('tim.cook@apple.com', '${aeskey}'), PGP_SYM_ENCRYPT('Tim', '${aeskey}'), PGP_SYM_ENCRYPT('Cook', '${aeskey}'), PGP_SYM_ENCRYPT('Apple', '${aeskey}')) +; + -- Feedback Requests without responses ---- Creator: Huey Emmerich INSERT INTO feedback_requests @@ -1378,6 +1397,12 @@ INSERT INTO feedback_requests VALUES ('7ca4d402-0bb9-4989-9087-8a52a63ee5d0', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', 'dfe2f986-fac0-11eb-9a03-0242ac130003','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'submitted'); +-- Feedback request to external-recipient +INSERT INTO feedback_requests -- External-recipient: John Smith, Creator: Big Boss, Requestee: Crazy Elephant, Template: Switch to a external-only template! +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id, external_recipient_id) +VALUES +('e5f5fab5-ae57-4412-b98a-0f02bffec347', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', null, 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57', 'ca0e2cbc-56dd-4e97-aa65-d2f2d5f47ff5') +; -- Feedback Requests with responses ---- Creator: Terrific Yak @@ -1636,6 +1661,19 @@ INSERT INTO feedback_answers VALUES ('8c13ffa2-fad0-11eb-9a03-0242ac121137', PGP_SYM_ENCRYPT('Different feedback answer.', '${aeskey}'), 'bf328e35-e486-4ec8-b3e8-acc2c09419fa', '98390c09-7121-110a-bfee-9380a470a7f2', 0); +-- Feedback request to external-recipient +INSERT INTO feedback_requests -- External-recipient: Jane Doe, Creator: Big Boss, Requestee: Crazy Elephant, Template: Switch to a external-only template! +(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id, external_recipient_id) +VALUES + ('36fe5aa6-d049-44a9-a8f1-2820f67dd44c', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', null, 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57', '60069963-8a11-4c40-843d-5ffafbcbeb1c') +; +INSERT INTO feedback_answers +(id, answer, question_id, request_id, sentiment) +VALUES +('376fd797-1df3-408e-8bc5-f37914e1e1e5', PGP_SYM_ENCRYPT('Different feedback answer.', '${aeskey}'), 'bf328e35-e486-4ec8-b3e8-acc2c09419fa', '36fe5aa6-d049-44a9-a8f1-2820f67dd44c', 0) +; + + -- Skills INSERT INTO skills -- React (id, name, pending, description, extraneous) From 83c6394e63a0013463ea998190dd7cac91869aa8 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 28 Oct 2024 10:38:58 -0400 Subject: [PATCH 027/102] 2024-10-28 - feedback - external reviewer - server-side --- ...ackRequestExternalRecipientController.java | 54 ++++++++++--------- .../src/main/resources/application-local.yml | 3 ++ web-ui/src/components/routes/Routes.jsx | 4 ++ ...eedbackRequestForExternalRecipientPage.jsx | 9 ++++ 4 files changed, 45 insertions(+), 25 deletions(-) create mode 100644 web-ui/src/pages/FeedbackRequestForExternalRecipientPage.jsx diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java index 003276decf..b739ec9a18 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java @@ -1,14 +1,13 @@ package com.objectcomputing.checkins.services.feedback_request; import com.objectcomputing.checkins.exceptions.BadArgException; +import com.objectcomputing.checkins.security.ImpersonationController; import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientServices; import io.micronaut.core.annotation.Nullable; import io.micronaut.core.convert.format.Format; import io.micronaut.http.HttpResponse; -import io.micronaut.http.annotation.Body; -import io.micronaut.http.annotation.Controller; -import io.micronaut.http.annotation.Get; -import io.micronaut.http.annotation.Put; +import io.micronaut.http.MediaType; +import io.micronaut.http.annotation.*; import io.micronaut.scheduling.TaskExecutors; import io.micronaut.scheduling.annotation.ExecuteOn; import io.micronaut.security.annotation.Secured; @@ -17,6 +16,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.net.URI; import java.time.LocalDate; @@ -32,23 +33,43 @@ public class FeedbackRequestExternalRecipientController { private final FeedbackRequestServices feedbackReqServices; private final FeedbackExternalRecipientServices feedbackExternalRecipientServices; + private static final Logger LOG = LoggerFactory.getLogger(FeedbackRequestExternalRecipientController.class); public FeedbackRequestExternalRecipientController(FeedbackRequestServices feedbackRequestServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices) { this.feedbackReqServices = feedbackRequestServices; this.feedbackExternalRecipientServices = feedbackExternalRecipientServices; } - @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,externalRecipientId,requesteeIds}") - public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, @Nullable UUID externalRecipientId, @Nullable List requesteeIds) { - if (externalRecipientId == null) { - throw new BadArgException("Missing required parameter: externalRecipientId"); + @Get("/{id}") + public HttpResponse getById(UUID id) { + FeedbackRequest feedbackRequest = feedbackReqServices.getById(id); + if (feedbackRequest.getExternalRecipientId() == null) { + throw new BadArgException("This feedback request is not for an external recipient"); } + return feedbackRequest == null ? HttpResponse.notFound() : HttpResponse.ok(feedbackRequestFromEntity(feedbackRequest)) + .headers(headers -> headers.location(URI.create("/feedback_request" + feedbackRequest.getId()))); + } + + @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,externalRecipientId,requesteeIds}") + public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, UUID externalRecipientId, @Nullable List requesteeIds) { return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, externalRecipientId, requesteeIds) .stream() .map(this::feedbackRequestFromEntity) .toList(); } + @Get("/hello") + @Produces(MediaType.TEXT_HTML) + public String hello() { + return "

Hello, World!

"; + } + + @Get("/submitForExternalRecipient") + public HttpResponse redirectToReactPage() { + LOG.info("FeedbackRequestExternalRecipientController, redirectToReactPage"); + return HttpResponse.redirect(URI.create("/feedback/submitForExternalRecipient")); + } + /** * Update a feedback request * @@ -65,23 +86,6 @@ public HttpResponse update(@Body @Valid @NotNull Fee .headers(headers -> headers.location(URI.create("/feedback_request/" + savedFeedback.getId()))); } - /** - * Get feedback request by ID - * - * @param id {@link UUID} ID of the request - * @return {@link FeedbackRequestResponseDTO} - */ - //@Secured(SecurityRule.IS_ANONYMOUS) - @Get("/{id}") - public HttpResponse getById(UUID id) { - FeedbackRequest feedbackRequest = feedbackReqServices.getById(id); - if (feedbackRequest.getExternalRecipientId() == null) { - throw new BadArgException("Missing required parameter: externalRecipientId"); - } - return feedbackRequest == null ? HttpResponse.notFound() : HttpResponse.ok(feedbackRequestFromEntity(feedbackRequest)) - .headers(headers -> headers.location(URI.create("/feedback_request" + feedbackRequest.getId()))); - } - private FeedbackRequestResponseDTO feedbackRequestFromEntity(FeedbackRequest feedbackRequest) { FeedbackRequestResponseDTO dto = new FeedbackRequestResponseDTO(); dto.setId(feedbackRequest.getId()); diff --git a/server/src/main/resources/application-local.yml b/server/src/main/resources/application-local.yml index c474d1f1ee..818b0dde38 100755 --- a/server/src/main/resources/application-local.yml +++ b/server/src/main/resources/application-local.yml @@ -26,6 +26,9 @@ micronaut: http-method: GET access: - isAnonymous() + - pattern: /feedback/submitForExternalRecipient/** + access: + - isAnonymous() --- datasources: default: diff --git a/web-ui/src/components/routes/Routes.jsx b/web-ui/src/components/routes/Routes.jsx index 6f6a10e51d..53df396a11 100644 --- a/web-ui/src/components/routes/Routes.jsx +++ b/web-ui/src/components/routes/Routes.jsx @@ -43,6 +43,7 @@ import KudosPage from '../../pages/KudosPage'; import ManageKudosPage from '../../pages/ManageKudosPage'; import SkillCategoriesPage from '../../pages/SkillCategoriesPage'; import SkillCategoryEditPage from '../../pages/SkillCategoryEditPage'; +import FeedbackRequestForExternalRecipientPage from "../../pages/FeedbackRequestForExternalRecipientPage.jsx"; export default function Routes() { const { state } = useContext(AppContext); @@ -199,6 +200,9 @@ export default function Routes() { + + +
diff --git a/web-ui/src/pages/FeedbackRequestForExternalRecipientPage.jsx b/web-ui/src/pages/FeedbackRequestForExternalRecipientPage.jsx new file mode 100644 index 0000000000..5fb48820e1 --- /dev/null +++ b/web-ui/src/pages/FeedbackRequestForExternalRecipientPage.jsx @@ -0,0 +1,9 @@ +import React from 'react'; + +function FeedbackRequestForExternalRecipientPage() { + return ( +

Hello, World!

+ ); +} + +export default FeedbackRequestForExternalRecipientPage; From 076f81aeb1d1b3227ce19611155d38e27a7c0ab4 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Wed, 30 Oct 2024 09:53:17 -0400 Subject: [PATCH 028/102] 2024-10-30 - feedback - external reviewer - server-side --- .../checkins/security/HomeController.java | 13 +- .../HomeExternalRecipientController.java | 39 ++++ .../FeedbackAnswerController.java | 2 +- ...backAnswerExternalRecipientController.java | 121 +++++++++++ .../FeedbackAnswerRepository.java | 12 +- .../FeedbackAnswerServices.java | 2 +- .../FeedbackAnswerServicesImpl.java | 56 ++++- .../QuestionAndAnswerServicesImpl.java | 4 +- .../FeedbackRequestController.java | 1 - .../feedback_template/FeedbackTemplate.java | 26 ++- .../FeedbackTemplateController.java | 1 + .../FeedbackTemplateCreateDTO.java | 4 + .../FeedbackTemplateResponseDTO.java | 4 + .../FeedbackTemplateServicesImpl.java | 1 + .../TemplateQuestionServicesImpl.java | 24 ++- .../services/reports/ReportDataCollation.java | 2 +- .../src/main/resources/application-local.yml | 3 - ...410241018__feedback_external_recipient.sql | 1 + .../resources/db/dev/R__Load_testing_data.sql | 38 +++- .../FeedbackAnswerControllerTest.java | 193 +++++++++++++++++- .../fixture/FeedbackTemplateFixture.java | 4 + web-ui/index_external_recipient.html | 44 ++++ web-ui/src/components/routes/Routes.jsx | 2 +- ...eedbackRequestForExternalRecipientPage.jsx | 2 +- web-ui/vite.config.ts | 8 + 25 files changed, 563 insertions(+), 44 deletions(-) create mode 100644 server/src/main/java/com/objectcomputing/checkins/security/HomeExternalRecipientController.java create mode 100644 server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerExternalRecipientController.java create mode 100644 web-ui/index_external_recipient.html diff --git a/server/src/main/java/com/objectcomputing/checkins/security/HomeController.java b/server/src/main/java/com/objectcomputing/checkins/security/HomeController.java index b1a620af51..529fcc82b5 100644 --- a/server/src/main/java/com/objectcomputing/checkins/security/HomeController.java +++ b/server/src/main/java/com/objectcomputing/checkins/security/HomeController.java @@ -1,14 +1,21 @@ package com.objectcomputing.checkins.security; +import com.objectcomputing.checkins.services.feedback_request.FeedbackRequestExternalRecipientController; import io.micronaut.context.env.Environment; +import io.micronaut.http.HttpResponse; +import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Get; +import io.micronaut.http.annotation.Produces; import io.micronaut.http.server.types.files.StreamedFile; import io.micronaut.security.annotation.Secured; import io.micronaut.security.rules.SecurityRule; import io.micronaut.views.View; import io.micronaut.core.annotation.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.security.Principal; import java.util.HashMap; import java.util.Map; @@ -19,6 +26,7 @@ public class HomeController { private final Environment environment; + private static final Logger LOG = LoggerFactory.getLogger(HomeController.class); public HomeController(Environment environment) { this.environment = environment; @@ -34,8 +42,11 @@ public Map forbidden(@Nullable Principal principal) { * Forwards any unmapped paths (except those containing a period) to the client {@code index.html}. * @return forward to client {@code index.html}. */ - @Get("/{path:[^\\.]*}") + // 2024-10-29 - Note the path excludes "/feedbackExternalRecipient", which is handled by HomeExternalRecipientController + @Get("/{path:^(?!feedbackExternalRecipient)([^\\.]+)$}") public Optional forward(String path) { + LOG.info("HomeController, forward, path: " + path); return environment.getResource("public/index.html").map(StreamedFile::new); } + } diff --git a/server/src/main/java/com/objectcomputing/checkins/security/HomeExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/security/HomeExternalRecipientController.java new file mode 100644 index 0000000000..1b4ebe79d7 --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/security/HomeExternalRecipientController.java @@ -0,0 +1,39 @@ +package com.objectcomputing.checkins.security; + +import io.micronaut.context.env.Environment; +import io.micronaut.core.annotation.Nullable; +import io.micronaut.http.HttpResponse; +import io.micronaut.http.MediaType; +import io.micronaut.http.annotation.Controller; +import io.micronaut.http.annotation.Get; +import io.micronaut.http.annotation.Produces; +import io.micronaut.http.server.types.files.StreamedFile; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; +import io.micronaut.views.View; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.security.Principal; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +@Controller +@Secured(SecurityRule.IS_ANONYMOUS) +public class HomeExternalRecipientController { + + private final Environment environment; + private static final Logger LOG = LoggerFactory.getLogger(HomeExternalRecipientController.class); + + public HomeExternalRecipientController(Environment environment) { + this.environment = environment; + } + + @Get("/feedbackExternalRecipient/{path:.+}") + public Optional forward(String path) { + LOG.info("HomeExternalRecipientController, forward, path: " + path); + return environment.getResource("public/index_external_recipient.html").map(StreamedFile::new); + } + +} diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerController.java index 6a198fe840..3aea9e242a 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerController.java @@ -82,7 +82,7 @@ public HttpResponse getById(UUID id) { @Get("/{?questionId,requestId}") @RequiredPermission(Permission.CAN_VIEW_FEEDBACK_ANSWER) public List findByValues(@Nullable UUID questionId, @Nullable UUID requestId) { - return feedbackAnswerServices.findByValues(questionId, requestId) + return feedbackAnswerServices.findByValues(questionId, requestId, null) .stream() .map(this::fromEntity) .toList(); diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerExternalRecipientController.java new file mode 100644 index 0000000000..04f8d25a03 --- /dev/null +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerExternalRecipientController.java @@ -0,0 +1,121 @@ +package com.objectcomputing.checkins.services.feedback_answer; + +import com.objectcomputing.checkins.exceptions.BadArgException; +import com.objectcomputing.checkins.services.feedback_request.FeedbackRequest; +import com.objectcomputing.checkins.services.feedback_request.FeedbackRequestServices; +import com.objectcomputing.checkins.services.permissions.Permission; +import com.objectcomputing.checkins.services.permissions.RequiredPermission; +import io.micronaut.core.annotation.Nullable; +import io.micronaut.http.HttpResponse; +import io.micronaut.http.annotation.*; +import io.micronaut.scheduling.TaskExecutors; +import io.micronaut.scheduling.annotation.ExecuteOn; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; + +import java.net.URI; +import java.util.List; +import java.util.UUID; + +@Controller("/services/feedback/answers/external/recipients") +@ExecuteOn(TaskExecutors.BLOCKING) +@Secured(SecurityRule.IS_ANONYMOUS) +public class FeedbackAnswerExternalRecipientController { + + private final FeedbackAnswerServices feedbackAnswerServices; + private final FeedbackRequestServices feedbackRequestServices; + + public FeedbackAnswerExternalRecipientController(FeedbackAnswerServices feedbackAnswerServices, FeedbackRequestServices feedbackRequestServices) { + this.feedbackAnswerServices = feedbackAnswerServices; + this.feedbackRequestServices = feedbackRequestServices; + } + + /** + * Create a feedback answer + * + * @param requestBody {@link FeedbackAnswerCreateDTO} New feedback answer to create + * @return {@link FeedbackAnswerResponseDTO} + */ + @Post + public HttpResponse save(@Body @Valid @NotNull FeedbackAnswerCreateDTO requestBody) { + FeedbackRequest feedbackRequest = this.feedbackRequestServices.getById(requestBody.getRequestId()); + if (feedbackRequest.getExternalRecipientId() == null) { + throw new BadArgException("This feedback request is not for an external recipient"); + } + FeedbackAnswer savedAnswer = feedbackAnswerServices.save(fromDTO(requestBody)); + return HttpResponse.created(fromEntity(savedAnswer)) + .headers(headers -> headers.location(URI.create("/feedback_answer/" + savedAnswer.getId()))); + } + + /** + * Update a feedback answer + * + * @param requestBody {@link FeedbackAnswerUpdateDTO} The updated feedback answer + * @return {@link FeedbackAnswerResponseDTO} + */ + @Put + public HttpResponse update(@Body @Valid @NotNull FeedbackAnswerUpdateDTO requestBody) { + FeedbackAnswer feedbackAnswerExistingRecord = this.feedbackAnswerServices.getById(requestBody.getId()); + FeedbackRequest feedbackRequest = this.feedbackRequestServices.getById(feedbackAnswerExistingRecord.getRequestId()); + if (feedbackRequest.getExternalRecipientId() == null) { + throw new BadArgException("This feedback request is not for an external recipient"); + } + FeedbackAnswer savedAnswer = feedbackAnswerServices.update(fromDTO(requestBody)); + return HttpResponse.ok(fromEntity(savedAnswer)) + .headers(headers -> headers.location(URI.create("/feedback_answer/" + savedAnswer.getId()))); + } + + /** + * Get a feedback answer by ID + * + * @param id {@link UUID} ID of the feedback answer + * @return {@link FeedbackAnswerResponseDTO} + */ + @Get("/{id}") + public HttpResponse getById(UUID id) { + FeedbackAnswer savedAnswer = feedbackAnswerServices.getById(id); + FeedbackRequest feedbackRequest = this.feedbackRequestServices.getById(savedAnswer.getRequestId()); + if (feedbackRequest.getExternalRecipientId() == null) { + throw new BadArgException("This feedback request is not for an external recipient"); + } + return HttpResponse.ok(fromEntity(savedAnswer)) + .headers(headers -> headers.location(URI.create("/feedback_answer/" + savedAnswer.getId()))); + } + + /** + * Search for all feedback requests that match the intersection of the provided values + * Any values that are null are not applied to the intersection + * + * @param questionId The attached {@link UUID} of the related question + * @param requestId The attached {@link UUID} of the request that corresponds with the answer + * @param externalRecipientId The attached {@link UUID} of the external-recipient that corresponds with the answer + * @return {@link FeedbackAnswerResponseDTO} + */ + @Get("/{?questionId,requestId,externalRecipientId}") + public List findByValues(@Nullable UUID questionId, @Nullable UUID requestId, @Nullable UUID externalRecipientId) { + return feedbackAnswerServices.findByValues(questionId, requestId, externalRecipientId) + .stream() + .map(this::fromEntity) + .toList(); + } + + private FeedbackAnswer fromDTO(FeedbackAnswerCreateDTO dto) { + return new FeedbackAnswer(dto.getAnswer(), dto.getQuestionId(), dto.getRequestId(), dto.getSentiment()); + } + + private FeedbackAnswer fromDTO(FeedbackAnswerUpdateDTO dto) { + return new FeedbackAnswer(dto.getId(), dto.getAnswer(), dto.getSentiment()); + } + + private FeedbackAnswerResponseDTO fromEntity(FeedbackAnswer feedbackAnswer) { + FeedbackAnswerResponseDTO dto = new FeedbackAnswerResponseDTO(); + dto.setId(feedbackAnswer.getId()); + dto.setAnswer(feedbackAnswer.getAnswer()); + dto.setQuestionId(feedbackAnswer.getQuestionId()); + dto.setRequestId(feedbackAnswer.getRequestId()); + dto.setSentiment(feedbackAnswer.getSentiment()); + return dto; + } +} diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerRepository.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerRepository.java index 8f156be3e2..f65839c866 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerRepository.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerRepository.java @@ -23,7 +23,17 @@ public interface FeedbackAnswerRepository extends CrudRepository S update(@NotNull @Valid S entity); - @Query("SELECT id, PGP_SYM_DECRYPT(cast(answer as bytea), '${aes.key}') as answer, question_id, request_id, sentiment FROM feedback_answers WHERE (:questionId IS NULL OR question_id = :questionId) AND (request_id = :requestId)") + @Query("SELECT id, PGP_SYM_DECRYPT(cast(answer as bytea), '${aes.key}') as answer, question_id, request_id, sentiment " + + "FROM feedback_answers WHERE (:questionId IS NULL OR question_id = :questionId) AND (request_id = :requestId)") List getByQuestionIdAndRequestId(@Nullable String questionId, @Nullable String requestId); + @Query("SELECT FA.id, PGP_SYM_DECRYPT(cast(FA.answer as bytea), '${aes.key}') as answer, FA.question_id, FA.request_id, FA.sentiment " + + "FROM feedback_answers FA JOIN feedback_requests FR on FA.request_id = FR.id " + + "WHERE 1=1 " + + "and (:questionId IS NULL OR question_id = :questionId) " + + "AND (request_id = :requestId) " + + "AND :externalRecipientId = FR.external_recipient_id " + + "") + List getByQuestionIdAndRequestId(@Nullable String questionId, @Nullable String requestId, @NotNull String externalRecipientId); + } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerServices.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerServices.java index bdb6d3becb..93633e24c0 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerServices.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerServices.java @@ -13,5 +13,5 @@ public interface FeedbackAnswerServices { FeedbackAnswer getById(UUID id); - List findByValues(@Nullable UUID questionId, @Nullable UUID requestId); + List findByValues(@Nullable UUID questionId, @Nullable UUID requestId, @Nullable UUID externalRecipientId); } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerServicesImpl.java index d32806b246..84875ca76c 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerServicesImpl.java @@ -98,10 +98,20 @@ public FeedbackAnswer getById(UUID id) { } @Override - public List findByValues(@Nullable UUID questionId, @Nullable UUID requestId) { + public List findByValues(@Nullable UUID questionId, @Nullable UUID requestId, @Nullable UUID externalRecipientId) { List response = new ArrayList<>(); FeedbackRequest feedbackRequest; - UUID currentUserId = currentUserServices.getCurrentUser().getId(); + MemberProfile currentUser; + + try { + currentUser = currentUserServices.getCurrentUser(); + + } catch (NotFoundException e) { + currentUser = null; + + } + final UUID currentUserId = (currentUser != null) ? currentUser.getId() : null; + try { feedbackRequest = feedbackRequestServices.getById(requestId); } catch (NotFoundException e) { @@ -110,16 +120,18 @@ public List findByValues(@Nullable UUID questionId, @Nullable UU final UUID requestCreatorId = feedbackRequest.getCreatorId(); final UUID requesteeId = feedbackRequest.getRequesteeId(); final UUID recipientId = feedbackRequest.getRecipientId(); - boolean isRequesteesSupervisor = requesteeId != null ? memberProfileServices.getSupervisorsForId(requesteeId).stream().anyMatch(profile -> currentUserId.equals(profile.getId())) : false; + boolean isRequesteesSupervisor = requesteeId != null && currentUserId != null ? memberProfileServices.getSupervisorsForId(requesteeId).stream().anyMatch(profile -> currentUserId.equals(profile.getId())) : false; MemberProfile requestee = memberProfileServices.getById(requesteeId); final UUID requesteePDL = requestee.getPdlId(); - if (currentUserServices.isAdmin() || currentUserId.equals(requesteePDL) || isRequesteesSupervisor || requestCreatorId.equals(currentUserId) || recipientId.equals(currentUserId)) { + if (currentUserServices.isAdmin() || (currentUserId != null && currentUserId.equals(requesteePDL)) || isRequesteesSupervisor || requestCreatorId.equals(currentUserId) || (recipientId != null && recipientId.equals(currentUserId))) { response.addAll(feedbackAnswerRepository.getByQuestionIdAndRequestId(Util.nullSafeUUIDToString(questionId), Util.nullSafeUUIDToString(requestId))); return response; + } else if (externalRecipientId != null) { + response.addAll(feedbackAnswerRepository.getByQuestionIdAndRequestId(Util.nullSafeUUIDToString(questionId), Util.nullSafeUUIDToString(requestId), externalRecipientId.toString())); + return response; } throw new PermissionException(NOT_AUTHORIZED_MSG); - } public FeedbackRequest getRelatedFeedbackRequest(FeedbackAnswer feedbackAnswer) { @@ -136,8 +148,17 @@ public FeedbackRequest getRelatedFeedbackRequest(FeedbackAnswer feedbackAnswer) public boolean createIsPermitted(FeedbackRequest feedbackRequest) { final UUID recipientId = feedbackRequest.getRecipientId(); - final UUID currentUserId = currentUserServices.getCurrentUser().getId(); - return recipientId.equals(currentUserId); + MemberProfile currentUser; + UUID currentUserId; + + try { + currentUser = currentUserServices.getCurrentUser(); + currentUserId = currentUser.getId(); + } catch (NotFoundException e) { + currentUser = null; + currentUserId = null; + } + return (recipientId != null && recipientId.equals(currentUserId)) || (currentUserId == null && feedbackRequest.getExternalRecipientId() != null); } public boolean updateIsPermitted(FeedbackRequest feedbackRequest) { @@ -145,15 +166,30 @@ public boolean updateIsPermitted(FeedbackRequest feedbackRequest) { } public boolean getIsPermitted(FeedbackRequest feedbackRequest) { + MemberProfile currentUser; + + try { + currentUser = currentUserServices.getCurrentUser(); + } catch (NotFoundException e) { + currentUser = null; + } + final UUID currentUserId = (currentUser != null) ? currentUserServices.getCurrentUser().getId() : null; + final boolean isAdmin = currentUserServices.isAdmin(); final UUID requestCreatorId = feedbackRequest.getCreatorId(); UUID requesteeId = feedbackRequest.getRequesteeId(); MemberProfile requestee = memberProfileServices.getById(requesteeId); - final UUID currentUserId = currentUserServices.getCurrentUser().getId(); final UUID recipientId = feedbackRequest.getRecipientId(); - boolean isRequesteesSupervisor = requesteeId != null ? memberProfileServices.getSupervisorsForId(requesteeId).stream().anyMatch(profile -> currentUserId.equals(profile.getId())) : false; + boolean isRequesteesSupervisor; + + if (requesteeId != null && currentUserId != null) { + isRequesteesSupervisor = memberProfileServices.getSupervisorsForId(requesteeId).stream().anyMatch(profile -> currentUserId.equals(profile.getId())); + } else { + isRequesteesSupervisor = false; + } + final UUID requesteePDL = requestee.getPdlId(); - return isAdmin || currentUserId.equals(requesteePDL) || isRequesteesSupervisor || requestCreatorId.equals(currentUserId) || recipientId.equals(currentUserId); + return isAdmin || (currentUserId != null && currentUserId.equals(requesteePDL)) || isRequesteesSupervisor || requestCreatorId.equals(currentUserId) || (recipientId != null && recipientId.equals(currentUserId)) || feedbackRequest.getExternalRecipientId()!= null; } } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/question_and_answer/QuestionAndAnswerServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/question_and_answer/QuestionAndAnswerServicesImpl.java index bdff6d7e25..a7bc388479 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/question_and_answer/QuestionAndAnswerServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_answer/question_and_answer/QuestionAndAnswerServicesImpl.java @@ -46,7 +46,7 @@ public List getAllQuestionsAndAnswers(UUID requestId) { throw new PermissionException(NOT_AUTHORIZED_MSG); } List templateQuestions = templateQuestionServices.findByFields(feedbackRequest.getTemplateId()); - List answerList = feedbackAnswerServices.findByValues(null, requestId); + List answerList = feedbackAnswerServices.findByValues(null, requestId, null); List returnerList = new ArrayList<>(); @@ -86,7 +86,7 @@ public Tuple getQuestionAndAnswer(@Nullable UUID requestId, @Nullable UUID quest } List list; - list = feedbackAnswerServices.findByValues(questionId, requestId); + list = feedbackAnswerServices.findByValues(questionId, requestId, null); FeedbackAnswer returnedAnswer; if (list.isEmpty()) { diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java index 6664950f22..09284307b2 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestController.java @@ -92,7 +92,6 @@ public void delete(@NotNull UUID id) { * @param id {@link UUID} ID of the request * @return {@link FeedbackRequestResponseDTO} */ - //@Secured(SecurityRule.IS_ANONYMOUS) @Get("/{id}") @RequiredPermission(Permission.CAN_VIEW_FEEDBACK_REQUEST) public HttpResponse getById(UUID id) { diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplate.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplate.java index 92410321c5..7dfdcf62ee 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplate.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplate.java @@ -77,6 +77,11 @@ public class FeedbackTemplate { @Schema(description = "indicates whether the template is utilized for performance reviews") private Boolean isReview; + @Column(name = "is_for_external_recipient") + @Nullable + @Schema(description = "indicates whether the template is utilized for external recipients") + private Boolean isForExternalRecipient; + /** * Constructs a new {@link FeedbackTemplate} to save * @@ -87,7 +92,7 @@ public class FeedbackTemplate { * @param isAdHoc Whether the template is an ad-hoc template * @param isReview Whether the template is used for performance reviews */ - public FeedbackTemplate(String title, @Nullable String description, UUID creatorId, Boolean isPublic, Boolean isAdHoc, Boolean isReview) { + public FeedbackTemplate(String title, @Nullable String description, UUID creatorId, Boolean isPublic, Boolean isAdHoc, Boolean isReview, @Nullable Boolean isForExternalRecipient) { this.id = null; this.title = title; this.description = description; @@ -96,6 +101,11 @@ public FeedbackTemplate(String title, @Nullable String description, UUID creator this.isPublic = isPublic; this.isAdHoc = isAdHoc; this.isReview = isReview; + this.isForExternalRecipient = isForExternalRecipient; + } + + public FeedbackTemplate(String title, @Nullable String description, UUID creatorId, Boolean isPublic, Boolean isAdHoc, Boolean isReview) { + this(title, description, creatorId, isPublic, isAdHoc, isReview, null); } /** @@ -126,12 +136,14 @@ public boolean equals(Object o) { Objects.equals(active, that.active) && Objects.equals(isPublic, that.isPublic) && Objects.equals(isAdHoc, that.isAdHoc) && - Objects.equals(isReview, that.isReview); + Objects.equals(isReview, that.isReview) + && customEquals(isForExternalRecipient, that.isForExternalRecipient) + ; } @Override public int hashCode() { - return Objects.hash(id, title, description, creatorId, dateCreated, active, isPublic, isAdHoc, isReview); + return Objects.hash(id, title, description, creatorId, dateCreated, active, isPublic, isAdHoc, isReview, isForExternalRecipient); } @Override @@ -146,6 +158,14 @@ public String toString() { ", isPublic=" + isPublic + ", isAdHoc=" + isAdHoc + ", isReview=" + isReview + + ", isForExternalRecipient=" + isForExternalRecipient + '}'; } + + public static boolean customEquals(Boolean a, Boolean b) { + if (Boolean.FALSE.equals(a) && b == null) return true; + if (a == null && Boolean.FALSE.equals(b)) return true; + return Objects.equals(a, b); + } + } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateController.java index 2fe664ac02..4cc5350536 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateController.java @@ -145,6 +145,7 @@ private FeedbackTemplateResponseDTO fromEntity(FeedbackTemplate feedbackTemplate dto.setActive(feedbackTemplate.getActive()); dto.setIsPublic(feedbackTemplate.getIsPublic()); dto.setIsAdHoc(feedbackTemplate.getIsAdHoc()); + dto.setIsForExternalRecipient(feedbackTemplate.getIsForExternalRecipient()); return dto; } } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateCreateDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateCreateDTO.java index de03133add..8968588d99 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateCreateDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateCreateDTO.java @@ -43,4 +43,8 @@ public class FeedbackTemplateCreateDTO { @Schema(description = "whether the template is used for performance reviews") private Boolean isReview; + @Nullable + @Schema(description = "whether the template is used for external recipients") + private Boolean isForExternalRecipient; + } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateResponseDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateResponseDTO.java index 5693585b11..0b4707c675 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateResponseDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateResponseDTO.java @@ -48,4 +48,8 @@ public class FeedbackTemplateResponseDTO { @Schema(description = "whether the template is an ad-hoc template") private Boolean isAdHoc; + @Nullable + @Schema(description = "whether the template is for external recipients") + private Boolean isForExternalRecipient; + } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateServicesImpl.java index ed180269df..07eee3c6f9 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateServicesImpl.java @@ -60,6 +60,7 @@ public FeedbackTemplate update(FeedbackTemplate feedbackTemplate) { feedbackTemplate.setIsPublic(originalTemplate.get().getIsPublic()); feedbackTemplate.setIsAdHoc(originalTemplate.get().getIsAdHoc()); feedbackTemplate.setIsReview(originalTemplate.get().getIsReview()); + feedbackTemplate.setIsForExternalRecipient(originalTemplate.get().getIsForExternalRecipient()); if (!updateIsPermitted(originalTemplate.get().getCreatorId())) { throw new PermissionException(NOT_AUTHORIZED_MSG); diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/template_question/TemplateQuestionServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/template_question/TemplateQuestionServicesImpl.java index 6d89beac04..48ed55080e 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/template_question/TemplateQuestionServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/template_question/TemplateQuestionServicesImpl.java @@ -5,6 +5,7 @@ import com.objectcomputing.checkins.exceptions.PermissionException; import com.objectcomputing.checkins.services.feedback_template.FeedbackTemplate; import com.objectcomputing.checkins.services.feedback_template.FeedbackTemplateRepository; +import com.objectcomputing.checkins.services.memberprofile.MemberProfile; import com.objectcomputing.checkins.services.memberprofile.currentuser.CurrentUserServices; import com.objectcomputing.checkins.util.Util; import jakarta.inject.Singleton; @@ -115,7 +116,7 @@ public void delete(UUID id) { @Override public TemplateQuestion getById(UUID id) { final Optional templateQuestion = templateQuestionRepository.findById(id); - if (!getIsPermitted()) { + if (!getIsPermitted(id)) { throw new PermissionException(NOT_AUTHORIZED_MSG); } @@ -130,7 +131,7 @@ public TemplateQuestion getById(UUID id) { public List findByFields(UUID templateId) { if (templateId == null) { throw new BadArgException("Cannot find template questions for null template ID"); - } else if (!getIsPermitted()) { + } else if (!getIsPermitted(templateId)) { throw new PermissionException(NOT_AUTHORIZED_MSG); } @@ -152,8 +153,21 @@ public boolean deleteIsPermitted(UUID templateCreatorId) { return createIsPermitted(templateCreatorId); } - public boolean getIsPermitted() { - UUID currentUserId = currentUserServices.getCurrentUser().getId(); - return currentUserId != null; + public boolean getIsPermitted(UUID templateQuestionId) { + UUID currentUserId; + MemberProfile currentUser; + + final Optional templateQuestion = templateQuestionRepository.findById(templateQuestionId); + final Optional feedbackTemplate = (templateQuestion.isPresent()) ? feedbackTemplateRepo.findById(templateQuestion.get().getTemplateId()) : null; + + try { + currentUser = currentUserServices.getCurrentUser(); + currentUserId = currentUser.getId(); + } catch (NotFoundException e) { + currentUser = null; + currentUserId = null; + } + + return (currentUserId != null || (feedbackTemplate.isPresent() && feedbackTemplate.get().getIsForExternalRecipient() != null && feedbackTemplate.get().getIsForExternalRecipient() == true)); } } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java b/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java index bae5f353b0..fcfe76fb37 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java @@ -287,7 +287,7 @@ private List getFeedbackType(FeedbackType type) { recipientId.toString() : MemberProfileUtils.getFullName(recipient)); List answers = - feedbackAnswerServices.findByValues(null, request.getId()); + feedbackAnswerServices.findByValues(null, request.getId(), null); for (FeedbackAnswer answer : answers) { String questionText; String questionType = textQuestion; diff --git a/server/src/main/resources/application-local.yml b/server/src/main/resources/application-local.yml index 818b0dde38..c474d1f1ee 100755 --- a/server/src/main/resources/application-local.yml +++ b/server/src/main/resources/application-local.yml @@ -26,9 +26,6 @@ micronaut: http-method: GET access: - isAnonymous() - - pattern: /feedback/submitForExternalRecipient/** - access: - - isAnonymous() --- datasources: default: diff --git a/server/src/main/resources/db/common/V202410241018__feedback_external_recipient.sql b/server/src/main/resources/db/common/V202410241018__feedback_external_recipient.sql index 85ad8c12aa..1a8d1dc4e2 100644 --- a/server/src/main/resources/db/common/V202410241018__feedback_external_recipient.sql +++ b/server/src/main/resources/db/common/V202410241018__feedback_external_recipient.sql @@ -8,3 +8,4 @@ CREATE TABLE feedback_external_recipient ); ALTER TABLE feedback_requests ADD column external_recipient_id varchar; ALTER TABLE feedback_requests ADD CONSTRAINT feedback_requests_externalrecipientid_fkey FOREIGN KEY (external_recipient_id) REFERENCES feedback_external_recipient(id) ON DELETE CASCADE; +ALTER TABLE feedback_templates ADD COLUMN is_for_external_recipient boolean; diff --git a/server/src/main/resources/db/dev/R__Load_testing_data.sql b/server/src/main/resources/db/dev/R__Load_testing_data.sql index 55dda12165..66e432b492 100644 --- a/server/src/main/resources/db/dev/R__Load_testing_data.sql +++ b/server/src/main/resources/db/dev/R__Load_testing_data.sql @@ -1246,7 +1246,33 @@ INSERT INTO template_questions VALUES ('174e5851-cb24-4a0f-890c-e6f041db4127', PGP_SYM_ENCRYPT('Please provide any additional context or reasoning relevant to your assessment of this team member.', '${aeskey}'), 'd1e94b60-47c4-4945-87d1-4dc88f088e57', 15, 'TEXT'); --- Feedback Request External Recipients +---- Generic Survey 1 but for external recipients +INSERT INTO feedback_templates +(id, title, description, creator_id, date_created, active, is_public, is_ad_hoc, is_for_external_recipient) -- created by: Big Boss +VALUES + ('265c4d57-7cd9-4c14-9878-bd05d3bb59f1', 'Survey 1', 'Make a survey with a few questions for external recipients' + , '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', '2021-05-05', true, true, false, true) +; +INSERT INTO template_questions +(id, question, template_id, question_number, input_type) +VALUES + ('437c152c-b002-4dce-beb8-d7ae99d13497', PGP_SYM_ENCRYPT('What can this team member improve on that would help them increase their effectiveness (include examples where possible)?','${aeskey}') + , '265c4d57-7cd9-4c14-9878-bd05d3bb59f1', 1, 'TEXT') +; +INSERT INTO template_questions +(id, question, template_id, question_number, input_type) +VALUES + ('2068a791-04c5-4def-833e-53fff73fd9eb', PGP_SYM_ENCRYPT('Try to recall a time when this team member helped you out with something. What was the problem and how did you work together to solve it?','${aeskey}') + , '265c4d57-7cd9-4c14-9878-bd05d3bb59f1', 3, 'TEXT') +; +INSERT INTO template_questions +(id, question, template_id, question_number, input_type) +VALUES + ('d8fd106b-a7f7-4ed6-8f67-6ec979adc780', PGP_SYM_ENCRYPT('In what ways does this team member represent OCI values?','${aeskey}') + , '265c4d57-7cd9-4c14-9878-bd05d3bb59f1', 2, 'TEXT') +; + +-- External Recipients used for Feedback Requests INSERT INTO feedback_external_recipient (id, email, firstname, lastname, company_name) VALUES('ca0e2cbc-56dd-4e97-aa65-d2f2d5f47ff5', PGP_SYM_ENCRYPT('john.smith@fakeacme.com', '${aeskey}'), PGP_SYM_ENCRYPT('John', '${aeskey}'), PGP_SYM_ENCRYPT('Smith', '${aeskey}'), PGP_SYM_ENCRYPT('Fake Acme, Inc', '${aeskey}')) @@ -1411,7 +1437,9 @@ VALUES INSERT INTO feedback_requests -- External-recipient: John Smith, Creator: Big Boss, Requestee: Crazy Elephant, Template: Switch to a external-only template! (id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id, external_recipient_id) VALUES -('e5f5fab5-ae57-4412-b98a-0f02bffec347', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', null, 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57', 'ca0e2cbc-56dd-4e97-aa65-d2f2d5f47ff5') +('e5f5fab5-ae57-4412-b98a-0f02bffec347', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727' +, null, '265c4d57-7cd9-4c14-9878-bd05d3bb59f1', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted' +, '12345678-e29c-4cf4-9ea4-6baa09405c57', 'ca0e2cbc-56dd-4e97-aa65-d2f2d5f47ff5') ; -- Feedback Requests with responses @@ -1675,12 +1703,14 @@ VALUES INSERT INTO feedback_requests -- External-recipient: Jane Doe, Creator: Big Boss, Requestee: Crazy Elephant, Template: Switch to a external-only template! (id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id, external_recipient_id) VALUES - ('36fe5aa6-d049-44a9-a8f1-2820f67dd44c', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', null, 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57', '60069963-8a11-4c40-843d-5ffafbcbeb1c') + ('36fe5aa6-d049-44a9-a8f1-2820f67dd44c', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', null + , '265c4d57-7cd9-4c14-9878-bd05d3bb59f1', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57', '60069963-8a11-4c40-843d-5ffafbcbeb1c') ; INSERT INTO feedback_answers (id, answer, question_id, request_id, sentiment) VALUES -('376fd797-1df3-408e-8bc5-f37914e1e1e5', PGP_SYM_ENCRYPT('Different feedback answer.', '${aeskey}'), 'bf328e35-e486-4ec8-b3e8-acc2c09419fa', '36fe5aa6-d049-44a9-a8f1-2820f67dd44c', 0) +('376fd797-1df3-408e-8bc5-f37914e1e1e5', PGP_SYM_ENCRYPT('Different feedback answer.', '${aeskey}'), 'bf328e35-e486-4ec8-b3e8-acc2c09419fa' +, '36fe5aa6-d049-44a9-a8f1-2820f67dd44c', 0) ; diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerControllerTest.java index 5b52d00e26..ec31035592 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_answer/FeedbackAnswerControllerTest.java @@ -1,6 +1,7 @@ package com.objectcomputing.checkins.services.feedback_answer; import com.objectcomputing.checkins.services.TestContainersSuite; +import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipient; import com.objectcomputing.checkins.services.feedback_request.FeedbackRequest; import com.objectcomputing.checkins.services.feedback_template.FeedbackTemplate; import com.objectcomputing.checkins.services.feedback_template.template_question.TemplateQuestion; @@ -8,6 +9,7 @@ import com.objectcomputing.checkins.services.fixture.FeedbackRequestFixture; import com.objectcomputing.checkins.services.fixture.FeedbackTemplateFixture; import com.objectcomputing.checkins.services.fixture.MemberProfileFixture; +import com.objectcomputing.checkins.services.fixture.FeedbackExternalRecipientFixture; import com.objectcomputing.checkins.services.fixture.RoleFixture; import com.objectcomputing.checkins.services.fixture.TemplateQuestionFixture; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; @@ -32,12 +34,16 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -class FeedbackAnswerControllerTest extends TestContainersSuite implements FeedbackAnswerFixture, MemberProfileFixture, RoleFixture, FeedbackRequestFixture, FeedbackTemplateFixture, TemplateQuestionFixture { +class FeedbackAnswerControllerTest extends TestContainersSuite implements FeedbackAnswerFixture, MemberProfileFixture, FeedbackExternalRecipientFixture, RoleFixture, FeedbackRequestFixture, FeedbackTemplateFixture, TemplateQuestionFixture { @Inject @Client("/services/feedback/answers") HttpClient client; + @Inject + @Client("/services/feedback/answers/external/recipients") + HttpClient clientExternalRecipient; + @BeforeEach void createRolesAndPermissions() { createAndAssignRoles(); @@ -54,11 +60,27 @@ FeedbackAnswer createSampleAnswer(MemberProfile sender, MemberProfile recipient) return createSampleFeedbackAnswer(question.getId(), feedbackRequest.getId()); } + FeedbackAnswer createSampleAnswer(MemberProfile sender, FeedbackExternalRecipient externalRecipient) { + assignPdlRole(sender); + MemberProfile requestee = createADefaultMemberProfileForPdl(sender); + MemberProfile templateCreator = createADefaultSupervisor(); + FeedbackTemplate template = createFeedbackTemplateForExternalRecipient01(templateCreator.getId()); + getFeedbackTemplateRepository().save(template); + TemplateQuestion question = saveTemplateQuestion(template, 1); + FeedbackRequest feedbackRequest = saveSampleFeedbackRequest(sender, requestee, externalRecipient, template.getId()); + return createSampleFeedbackAnswer(question.getId(), feedbackRequest.getId()); + } + FeedbackAnswer saveSampleAnswer(MemberProfile sender, MemberProfile recipient) { FeedbackAnswer answer = createSampleAnswer(sender, recipient); return getFeedbackAnswerRepository().save(answer); } + FeedbackAnswer saveSampleAnswer(MemberProfile sender, FeedbackExternalRecipient externalRecipient) { + FeedbackAnswer answer = createSampleAnswer(sender, externalRecipient); + return getFeedbackAnswerRepository().save(answer); + } + FeedbackAnswerCreateDTO createDTO(FeedbackAnswer feedbackAnswer) { FeedbackAnswerCreateDTO dto = new FeedbackAnswerCreateDTO(); dto.setAnswer(feedbackAnswer.getAnswer()); @@ -87,6 +109,12 @@ void assertUnauthorized(HttpClientResponseException exception) { assertEquals(HttpStatus.FORBIDDEN, exception.getStatus()); } + void assertUnauthorizedHttpStatus(HttpClientResponseException exception) { + String exceptionMessage = exception.getMessage(); + String exceptionMessageUppercase = exceptionMessage != null ? exceptionMessage.toUpperCase() : ""; + assertEquals(HttpStatus.UNAUTHORIZED.toString(), exceptionMessageUppercase); + } + @Test void testPostAnswerByAdminUnauthorized() { MemberProfile admin = createADefaultMemberProfile(); @@ -121,7 +149,23 @@ void testPostAnswerByRecipient() { } @Test - void testPostAnswerByRecipientForCanceledRequest() { + void testPostAnswerByExternalRecipient() { + MemberProfile sender = createADefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + + FeedbackAnswer feedbackAnswer = createSampleAnswer(sender, externalRecipient01); + FeedbackAnswerCreateDTO dto = createDTO(feedbackAnswer); + + final HttpRequest request = HttpRequest.POST("", dto); + final HttpResponse response = this.clientExternalRecipient.toBlocking().exchange(request, FeedbackAnswerResponseDTO.class); + + assertTrue(response.getBody().isPresent()); + assertEquals(HttpStatus.CREATED, response.getStatus()); + assertContentEqualsResponse(feedbackAnswer, response.getBody().get()); + } + + @Test + void testPostAnswerByRecipientForCanceledRequestToRecipient() { MemberProfile sender = createADefaultMemberProfile(); MemberProfile recipient = createADefaultRecipient(); assignPdlRole(sender); @@ -146,6 +190,31 @@ void testPostAnswerByRecipientForCanceledRequest() { assertEquals("Attempted to save an answer for a canceled feedback request", responseException.getMessage()); } + @Test + void testPostAnswerByRecipientForCanceledRequestToExternalRecipient() { + MemberProfile sender = createADefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + assignPdlRole(sender); + MemberProfile requestee = createADefaultMemberProfileForPdl(sender); + + MemberProfile templateCreator = createADefaultSupervisor(); + FeedbackTemplate template = createFeedbackTemplateForExternalRecipient01(templateCreator.getId()); + getFeedbackTemplateRepository().save(template); + + TemplateQuestion question = saveTemplateQuestion(template, 1); + FeedbackRequest canceledRequest = saveSampleFeedbackRequestWithStatus(sender, requestee, externalRecipient01, template.getId(), "canceled"); + + FeedbackAnswer feedbackAnswer = createSampleFeedbackAnswer(question.getId(), canceledRequest.getId()); + FeedbackAnswerCreateDTO dto = createDTO(feedbackAnswer); + + final HttpRequest request = HttpRequest.POST("", dto); + final HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class, () -> + clientExternalRecipient.toBlocking().exchange(request, Map.class)); + + assertEquals(HttpStatus.BAD_REQUEST, responseException.getStatus()); + assertEquals("Attempted to save an answer for a canceled feedback request", responseException.getMessage()); + } + @Test void testPostBySenderUnauthorized() { MemberProfile sender = createADefaultMemberProfile(); @@ -180,6 +249,24 @@ void testUpdateByRecipient() { assertContentEqualsResponse(feedbackAnswer, response.getBody().get()); } + @Test + void testUpdateByExternalRecipient() { + MemberProfile sender = createADefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + FeedbackAnswer feedbackAnswer = saveSampleAnswer(sender, externalRecipient01); + feedbackAnswer.setAnswer(":p"); + feedbackAnswer.setSentiment(1.0); + FeedbackAnswerUpdateDTO dto = updateDTO(feedbackAnswer); + + final HttpRequest request = HttpRequest.PUT("", dto); + final HttpResponse response = clientExternalRecipient.toBlocking() + .exchange(request, FeedbackAnswerResponseDTO.class); + + assertEquals(HttpStatus.OK, response.getStatus()); + assertTrue(response.getBody().isPresent()); + assertContentEqualsResponse(feedbackAnswer, response.getBody().get()); + } + @Test void testUpdateByAdminUnauthorized() { MemberProfile admin = createADefaultMemberProfile(); @@ -198,7 +285,7 @@ void testUpdateByAdminUnauthorized() { } @Test - void testGetByIdSender() { + void testGetByIdSenderForRecipient() { MemberProfile sender = createADefaultMemberProfile(); MemberProfile recipient = createADefaultRecipient(); FeedbackAnswer feedbackAnswer = saveSampleAnswer(sender, recipient); @@ -213,7 +300,21 @@ void testGetByIdSender() { } @Test - void testGetByIdSubmitter() { + void testGetByIdSenderForExternalRecipient() { + MemberProfile sender = createADefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + FeedbackAnswer feedbackAnswer = saveSampleAnswer(sender, externalRecipient01); + + final HttpRequest request = HttpRequest.GET(String.format("/%s", feedbackAnswer.getId())); + final HttpResponse response = clientExternalRecipient.toBlocking().exchange(request, FeedbackAnswerResponseDTO.class); + + assertTrue(response.getBody().isPresent()); + assertEquals(HttpStatus.OK, response.getStatus()); + assertContentEqualsResponse(feedbackAnswer, response.getBody().get()); + } + + @Test + void testGetByIdSubmitterForRecipient() { MemberProfile sender = createADefaultMemberProfile(); MemberProfile recipient = createADefaultRecipient(); FeedbackAnswer feedbackAnswer = saveSampleAnswer(sender, recipient); @@ -227,6 +328,20 @@ void testGetByIdSubmitter() { assertContentEqualsResponse(feedbackAnswer, response.getBody().get()); } + @Test + void testGetByIdSubmitterForExternalRecipient() { + MemberProfile sender = createADefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + FeedbackAnswer feedbackAnswer = saveSampleAnswer(sender, externalRecipient01); + + final HttpRequest request = HttpRequest.GET(String.format("/%s", feedbackAnswer.getId())); + final HttpResponse response = clientExternalRecipient.toBlocking().exchange(request, FeedbackAnswerResponseDTO.class); + + assertTrue(response.getBody().isPresent()); + assertEquals(HttpStatus.OK, response.getStatus()); + assertContentEqualsResponse(feedbackAnswer, response.getBody().get()); + } + @Test void testGetByIdUnauthorized() { MemberProfile random = createADefaultMemberProfile(); @@ -243,7 +358,7 @@ void testGetByIdUnauthorized() { } @Test - void testGetByRequestAndQuestionIdAuthorized() { + void testGetByRequestAndQuestionIdAuthorizedToRecipient() { MemberProfile sender = createADefaultMemberProfile(); MemberProfile recipient = createADefaultRecipient(); FeedbackAnswer feedbackAnswer = saveSampleAnswer(sender, recipient); @@ -258,7 +373,21 @@ void testGetByRequestAndQuestionIdAuthorized() { } @Test - void testGetByRequestAndQuestionIdAuthorizedRequestOnly() { + void testGetByRequestAndQuestionIdAuthorizedToExternalRecipient() { + MemberProfile sender = createADefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + FeedbackAnswer feedbackAnswer = saveSampleAnswer(sender, externalRecipient01); + final HttpRequest request = HttpRequest.GET(String.format("/?questionId=%s&requestId=%s&externalRecipientId=%s", feedbackAnswer.getQuestionId(), feedbackAnswer.getRequestId(), externalRecipient01.getId())); + final HttpResponse> response = clientExternalRecipient.toBlocking() + .exchange(request, Argument.listOf(FeedbackAnswerResponseDTO.class)); + + assertTrue(response.getBody().isPresent()); + assertEquals(HttpStatus.OK, response.getStatus()); + assertContentEqualsResponse(feedbackAnswer, response.getBody().get().get(0)); + } + + @Test + void testGetByRequestAndQuestionIdAuthorizedRequestOnlyToRecipient() { MemberProfile sender = createADefaultMemberProfile(); MemberProfile recipient = createADefaultRecipient(); assignPdlRole(sender); @@ -285,7 +414,33 @@ void testGetByRequestAndQuestionIdAuthorizedRequestOnly() { } @Test - void testGetByRequestAndQuestionIdUnauthorized() { + void testGetByRequestAndQuestionIdAuthorizedRequestOnlyToExternalRecipient() { + MemberProfile sender = createADefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + assignPdlRole(sender); + MemberProfile requestee = createADefaultMemberProfileForPdl(sender); + MemberProfile templateCreator = createADefaultSupervisor(); + FeedbackTemplate template = createFeedbackTemplate(templateCreator.getId()); + getFeedbackTemplateRepository().save(template); + TemplateQuestion question = saveTemplateQuestion(template, 1); + TemplateQuestion questionTwo = saveAnotherTemplateQuestion(template, 2); + FeedbackRequest feedbackRequest = saveSampleFeedbackRequest(sender, requestee, externalRecipient01, template.getId()); + FeedbackAnswer answerOne = new FeedbackAnswer("Sample answer 1", question.getId(), feedbackRequest.getId(), 0.5); + getFeedbackAnswerRepository().save(answerOne); + FeedbackAnswer answerTwo = new FeedbackAnswer("Sample answer 2", questionTwo.getId(), feedbackRequest.getId(), 0.5); + getFeedbackAnswerRepository().save(answerTwo); + final HttpRequest request = HttpRequest.GET(String.format("/?requestId=%s&externalRecipientId=%s", answerOne.getRequestId(), externalRecipient01.getId().toString())); + final HttpResponse> response = clientExternalRecipient.toBlocking() + .exchange(request, Argument.listOf(FeedbackAnswerResponseDTO.class)); + + assertTrue(response.getBody().isPresent()); + assertEquals(HttpStatus.OK, response.getStatus()); + assertContentEqualsResponse(answerOne, response.getBody().get().get(0)); + assertContentEqualsResponse(answerTwo, response.getBody().get().get(1)); + } + + @Test + void testGetByRequestAndQuestionIdUnauthorizedToRandomRecipient() { MemberProfile sender = createADefaultMemberProfile(); MemberProfile random = createASecondDefaultMemberProfile(); MemberProfile recipient = createADefaultRecipient(); @@ -295,12 +450,21 @@ void testGetByRequestAndQuestionIdUnauthorized() { final HttpClientResponseException exception = assertThrows(HttpClientResponseException.class, () -> client.toBlocking().exchange(request, Map.class)); assertUnauthorized(exception); + } - + @Test + void testGetByRequestAndQuestionIdUnauthorizedToExternalRecipientWithoutId() { + MemberProfile sender = createADefaultMemberProfile(); + final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); + FeedbackAnswer feedbackAnswer = saveSampleAnswer(sender, externalRecipient01); + final HttpRequest request = HttpRequest.GET(String.format("/?questionId=%s&requestId=%s", feedbackAnswer.getQuestionId(), feedbackAnswer.getRequestId())); + final HttpClientResponseException exception = assertThrows(HttpClientResponseException.class, + () -> client.toBlocking().exchange(request, Map.class)); + assertUnauthorizedHttpStatus(exception); } @Test - void testGetByRequestAndQuestionIdRequestNotExists() { + void testGetByRequestAndQuestionIdRequestNotExistsToRecipient() { MemberProfile sender = createADefaultMemberProfile(); MemberProfile recipient = createADefaultRecipient(); UUID random = UUID.randomUUID(); @@ -311,7 +475,18 @@ void testGetByRequestAndQuestionIdRequestNotExists() { () -> client.toBlocking().exchange(request, Map.class)); assertEquals("Cannot find attached request for search", exception.getMessage()); assertEquals(HttpStatus.NOT_FOUND, exception.getStatus()); + } + @Test + void testGetByRequestAndQuestionIdRequestNotExistsToExernalRecipient() { + MemberProfile sender = createADefaultMemberProfile(); + MemberProfile recipient = createADefaultRecipient(); + UUID random = UUID.randomUUID(); + FeedbackAnswer feedbackAnswer = saveSampleAnswer(sender, recipient); + final HttpRequest request = HttpRequest.GET(String.format("/?questionId=%s&requestId=%s", feedbackAnswer.getQuestionId(), random)); + final HttpClientResponseException exception = assertThrows(HttpClientResponseException.class, () -> clientExternalRecipient.toBlocking().exchange(request, Map.class)); + assertEquals("Cannot find attached request for search", exception.getMessage()); + assertEquals(HttpStatus.NOT_FOUND, exception.getStatus()); } } diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackTemplateFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackTemplateFixture.java index bc4c92af84..740d25bd98 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackTemplateFixture.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackTemplateFixture.java @@ -29,4 +29,8 @@ default FeedbackTemplate saveFeedbackTemplate(UUID creatorId) { default FeedbackTemplate saveReviewFeedbackTemplate(UUID creatorId) { return getFeedbackTemplateRepository().save(new FeedbackTemplate("Sample Review Template", "A saved review feedback template", creatorId, true, false, true)); } + + default FeedbackTemplate createFeedbackTemplateForExternalRecipient01(UUID creatorId) { + return new FeedbackTemplate("Title - For Ext Recip 01", "Description amazing external recipient feedback template", creatorId, true, true, false, true); + } } diff --git a/web-ui/index_external_recipient.html b/web-ui/index_external_recipient.html new file mode 100644 index 0000000000..5f22069502 --- /dev/null +++ b/web-ui/index_external_recipient.html @@ -0,0 +1,44 @@ + + + + + + + + + + + + + External Recipient + + + +
+ + + + diff --git a/web-ui/src/components/routes/Routes.jsx b/web-ui/src/components/routes/Routes.jsx index 53df396a11..fca6f80376 100644 --- a/web-ui/src/components/routes/Routes.jsx +++ b/web-ui/src/components/routes/Routes.jsx @@ -200,7 +200,7 @@ export default function Routes() { - + diff --git a/web-ui/src/pages/FeedbackRequestForExternalRecipientPage.jsx b/web-ui/src/pages/FeedbackRequestForExternalRecipientPage.jsx index 5fb48820e1..d0bdcfb816 100644 --- a/web-ui/src/pages/FeedbackRequestForExternalRecipientPage.jsx +++ b/web-ui/src/pages/FeedbackRequestForExternalRecipientPage.jsx @@ -2,7 +2,7 @@ import React from 'react'; function FeedbackRequestForExternalRecipientPage() { return ( -

Hello, World!

+

Hello, World! From FeedbackRequestForExternalRecipientPage

); } diff --git a/web-ui/vite.config.ts b/web-ui/vite.config.ts index 2f103fa0b9..62fbe9a36e 100644 --- a/web-ui/vite.config.ts +++ b/web-ui/vite.config.ts @@ -19,5 +19,13 @@ export default defineConfig({ }, optimizeDeps: { include: ['@mui/material/Tooltip'] + }, + build: { + rollupOptions: { + input: { + main: 'index.html', + externalRecipient: 'index_external_recipient.html' + } + } } }); From ad7b9e4837bbecc95d123800e21323998ae4680e Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Wed, 30 Oct 2024 14:34:12 -0400 Subject: [PATCH 029/102] 2024-10-30 - feedback - external reviewer - server-side --- .../FeedbackTemplateController.java | 2 +- .../resources/db/dev/R__Load_testing_data.sql | 2 +- .../FeedbackTemplateSelector.jsx | 2 + .../components/template-card/TemplateCard.css | 9 +- .../components/template-card/TemplateCard.jsx | 11 +++ .../TemplatePreviewModal.jsx | 1 + .../AdHocCreationForm.jsx | 92 +++++++++++-------- 7 files changed, 75 insertions(+), 44 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateController.java index 4cc5350536..2383cc3253 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_template/FeedbackTemplateController.java @@ -116,7 +116,7 @@ public List findByValues(@Nullable UUID creatorId, * @return {@link FeedbackTemplate} */ private FeedbackTemplate fromDTO(FeedbackTemplateCreateDTO dto) { - return new FeedbackTemplate(dto.getTitle(), dto.getDescription(), dto.getCreatorId(), dto.getIsPublic(), dto.getIsAdHoc(), dto.getIsReview()); + return new FeedbackTemplate(dto.getTitle(), dto.getDescription(), dto.getCreatorId(), dto.getIsPublic(), dto.getIsAdHoc(), dto.getIsReview(), dto.getIsForExternalRecipient()); } /** diff --git a/server/src/main/resources/db/dev/R__Load_testing_data.sql b/server/src/main/resources/db/dev/R__Load_testing_data.sql index 66e432b492..5eb1f4ccd3 100644 --- a/server/src/main/resources/db/dev/R__Load_testing_data.sql +++ b/server/src/main/resources/db/dev/R__Load_testing_data.sql @@ -1250,7 +1250,7 @@ VALUES INSERT INTO feedback_templates (id, title, description, creator_id, date_created, active, is_public, is_ad_hoc, is_for_external_recipient) -- created by: Big Boss VALUES - ('265c4d57-7cd9-4c14-9878-bd05d3bb59f1', 'Survey 1', 'Make a survey with a few questions for external recipients' + ('265c4d57-7cd9-4c14-9878-bd05d3bb59f1', 'Survey For External Recips', 'Make a survey with a few questions for external recipients' , '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', '2021-05-05', true, true, false, true) ; INSERT INTO template_questions diff --git a/web-ui/src/components/feedback_template_selector/FeedbackTemplateSelector.jsx b/web-ui/src/components/feedback_template_selector/FeedbackTemplateSelector.jsx index 5a58e48c95..d3b3dbd8b8 100644 --- a/web-ui/src/components/feedback_template_selector/FeedbackTemplateSelector.jsx +++ b/web-ui/src/components/feedback_template_selector/FeedbackTemplateSelector.jsx @@ -98,6 +98,7 @@ const FeedbackTemplateSelector = ({ query, changeQuery }) => { isAdHoc: true, isPublic: false, isReview: false, + isForExternalRecipient: submittedTemplate.isForExternalRecipient, }; const newTemplateQuestion = { @@ -189,6 +190,7 @@ const FeedbackTemplateSelector = ({ query, changeQuery }) => { isAdHoc={template.isAdHoc} isPublic={template.isPublic} isReview={template.isReview} + isForExternalRecipient={template.isForExternalRecipient} isSelected={query === template.id} questions={template.questions} expanded={preview.open} diff --git a/web-ui/src/components/template-card/TemplateCard.css b/web-ui/src/components/template-card/TemplateCard.css index b9692828ca..52a585b2a0 100644 --- a/web-ui/src/components/template-card/TemplateCard.css +++ b/web-ui/src/components/template-card/TemplateCard.css @@ -1,7 +1,7 @@ .feedback-template-card { cursor: pointer; width: 300px; - max-height: 300px; + max-height: 350px; padding: 15px; margin: 20px; box-shadow: #282c34; @@ -24,7 +24,7 @@ text-align: center; padding-bottom: 0; margin-bottom: 0; - max-height: 200px; + max-height: 250px; } .feedback-template-card .template-name { @@ -44,6 +44,11 @@ margin: 0; } +.feedback-template-card .externalRecipient { + text-align: left; + margin: 0; +} + @media (min-width: 321px) and (max-width: 820px) { .feedback-template-card { width: 100%; diff --git a/web-ui/src/components/template-card/TemplateCard.jsx b/web-ui/src/components/template-card/TemplateCard.jsx index c0a7c19469..f65c482ba2 100644 --- a/web-ui/src/components/template-card/TemplateCard.jsx +++ b/web-ui/src/components/template-card/TemplateCard.jsx @@ -111,6 +111,17 @@ const TemplateCard = props => {

Created by: {creatorName}

+ {props.isForExternalRecipient && ( + + )} ); diff --git a/web-ui/src/components/template-preview-modal/TemplatePreviewModal.jsx b/web-ui/src/components/template-preview-modal/TemplatePreviewModal.jsx index 649327dc5c..2b653f3512 100644 --- a/web-ui/src/components/template-preview-modal/TemplatePreviewModal.jsx +++ b/web-ui/src/components/template-preview-modal/TemplatePreviewModal.jsx @@ -114,6 +114,7 @@ const TemplatePreviewModal = ({ submittedTemplate.title = newAdHocData.title; submittedTemplate.description = newAdHocData.description; submittedQuestion = newAdHocData.question; + submittedTemplate.isForExternalRecipient = newAdHocData.isForExternalRecipient; } onSubmit(submittedTemplate, submittedQuestion); }; diff --git a/web-ui/src/components/template-preview-modal/ad_hoc_creation_form/AdHocCreationForm.jsx b/web-ui/src/components/template-preview-modal/ad_hoc_creation_form/AdHocCreationForm.jsx index 8437da6f0b..725fa9a853 100644 --- a/web-ui/src/components/template-preview-modal/ad_hoc_creation_form/AdHocCreationForm.jsx +++ b/web-ui/src/components/template-preview-modal/ad_hoc_creation_form/AdHocCreationForm.jsx @@ -8,53 +8,65 @@ const propTypes = { const AdHocCreationForm = props => { const [title, setTitle] = useState('Ad Hoc'); const [description, setDescription] = useState(''); + const [isForExternalRecipient, setIsForExternalRecipient] = useState(false); const [question, setQuestion] = useState(''); useEffect(() => { props.onFormChange({ - title: title, - description: description, - question: question + title: title + , description: description + , question: question + , isForExternalRecipient: isForExternalRecipient }); // eslint-disable-next-line - }, [title, description, question]); + }, [title, description, question, isForExternalRecipient]); return ( - - { - setTitle(event.target.value); - }} - /> - { - setDescription(event.target.value); - }} - /> - { - setQuestion(event.target.value); - }} - /> - + + { + setTitle(event.target.value); + }} + /> + { + setDescription(event.target.value); + }} + /> + + { + setQuestion(event.target.value); + }} + /> + ); }; From 9bb18c244f35496df63f0fe4273ae70dd5d4c9ca Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Wed, 30 Oct 2024 17:54:56 -0400 Subject: [PATCH 030/102] 2024-10-30 - feedback - external reviewer - server-side --- .../FeedbackExternalRecipientSelector.css | 40 +++ .../FeedbackExternalRecipientSelector.jsx | 260 ++++++++++++++++++ ...FeedbackExternalRecipientSelector.test.jsx | 20 ++ ...ackExternalRecipientSelector.test.jsx.snap | 99 +++++++ web-ui/src/pages/FeedbackRequestPage.jsx | 184 +++++++------ 5 files changed, 522 insertions(+), 81 deletions(-) create mode 100644 web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.css create mode 100644 web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx create mode 100644 web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.test.jsx create mode 100644 web-ui/src/components/feedback_external_recipient_selector/__snapshots__/FeedbackExternalRecipientSelector.test.jsx.snap diff --git a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.css b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.css new file mode 100644 index 0000000000..16cfb29160 --- /dev/null +++ b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.css @@ -0,0 +1,40 @@ +.feedback-recipient-selector { + width: 100%; + height: 100%; + padding: 1rem 2rem 1rem 2rem; +} + +.selected-recipients-container { + width: 100%; + height: 50%; + min-height: 380px; + margin-top: 2em; + padding: 20px 0 20px 26px; + border-radius: 20px; + border: 1px dashed gray; +} + +.selectable-recipients-container { + width: 100%; + height: 50%; + min-height: 300px; + margin-top: 2em; +} + +.selected-recipients-container .recipient-card-container { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + +.selectable-recipients-container .recipient-card-container { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + +@media (min-width: 321px) and (max-width: 820px) { + .selected-recipients-container { + padding: 10px 5px 10px 5px; + } +} diff --git a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx new file mode 100644 index 0000000000..0de8128b2b --- /dev/null +++ b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx @@ -0,0 +1,260 @@ +import React, { useContext, useEffect, useState, useRef } from 'react'; +import { styled } from '@mui/material/styles'; +import FeedbackRecipientCard from '../feedback_recipient_card/FeedbackRecipientCard'; +import { AppContext } from '../../context/AppContext'; +import { + selectProfile, + selectCsrfToken, + selectCurrentUser, + selectNormalizedMembers +} from '../../context/selectors'; +import { getFeedbackSuggestion } from '../../api/feedback'; +import Typography from '@mui/material/Typography'; +import { TextField, Grid, InputAdornment } from '@mui/material'; +import { Search } from '@mui/icons-material'; +import PropTypes from 'prop-types'; + +import './FeedbackExternalRecipientSelector.css'; + +const PREFIX = 'FeedbackExternalRecipientSelector'; +const classes = { + search: `${PREFIX}-search`, + searchInput: `${PREFIX}-searchInput`, + searchInputIcon: `${PREFIX}-searchInputIcon`, + members: `${PREFIX}-members`, + textField: `${PREFIX}-textField` +}; + +const StyledGrid = styled(Grid)({ + [`& .${classes.search}`]: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center' + }, + [`& .${classes.searchInput}`]: { + width: '20em' + }, + [`& .${classes.searchInputIcon}`]: { + color: 'gray' + }, + [`& .${classes.members}`]: { + display: 'flex', + flexWrap: 'wrap', + justifyContent: 'space-evenly', + width: '100%' + } +}); + +const propTypes = { + changeQuery: PropTypes.func.isRequired, + fromQuery: PropTypes.array.isRequired, + forQuery: PropTypes.string.isRequired +}; + +const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) => { + const { state } = useContext(AppContext); + const csrf = selectCsrfToken(state); + const userProfile = selectCurrentUser(state); + const { id } = userProfile; + const searchTextUpdated = useRef(false); + const hasRenewedFromURL = useRef(false); + const [searchText, setSearchText] = useState(''); + const [profiles, setProfiles] = useState([]); + const normalizedMembers = selectNormalizedMembers(state, searchText); + + useEffect(() => { + if ( + !searchTextUpdated.current && + searchText.length !== 0 && + searchText !== '' && + searchText + ) { + if (fromQuery !== undefined) { + let selectedMembers = profiles.filter(profile => + fromQuery.includes(profile.id) + ); + let filteredNormalizedMembers = normalizedMembers.filter(member => { + return !selectedMembers.some(selectedMember => { + return selectedMember.id === member.id; + }); + }); + setProfiles(filteredNormalizedMembers); + } else { + setProfiles(normalizedMembers); + } + searchTextUpdated.current = true; + } + }, [searchText, profiles, fromQuery, state, userProfile, normalizedMembers]); + + useEffect(() => { + function bindFromURL() { + if ( + !hasRenewedFromURL.current && + fromQuery !== null && + fromQuery !== undefined + ) { + let profileCopy = profiles; + if (typeof fromQuery === 'string') { + let newProfile = { id: fromQuery }; + if ( + profiles.filter(member => member.id === newProfile.id).length === 0 + ) { + profileCopy.push(newProfile); + } + } else if (Array.isArray(fromQuery)) { + for (let i = 0; i < fromQuery.length; ++i) { + let newProfile = { id: fromQuery[i] }; + if ( + profiles.filter(member => member.id === newProfile.id).length === + 0 + ) { + profileCopy.push(newProfile); + } + } + } + setProfiles(profileCopy); + hasRenewedFromURL.current = true; + } + } + + async function getSuggestions() { + if (forQuery === undefined || forQuery === null) { + return; + } + let res = await getFeedbackSuggestion(forQuery, csrf); + if (res && res.payload) { + return res.payload.data && !res.error ? res.payload.data : undefined; + } + return null; + } + + if (csrf && (searchText === '' || searchText.length === 0)) { + getSuggestions().then(res => { + bindFromURL(); + if (res !== undefined && res !== null) { + let filteredProfileCopy = profiles.filter(member => { + return !res.some(suggestedMember => { + return suggestedMember.id === member.id; + }); + }); + let newProfiles = filteredProfileCopy.concat(res); + setProfiles(newProfiles); + } + }); + } // eslint-disable-next-line react-hooks/exhaustive-deps + }, [id, csrf, searchText]); + + const cardClickHandler = id => { + if (!Array.isArray(fromQuery)) { + fromQuery = fromQuery ? [fromQuery] : []; + } + if (fromQuery.includes(id)) { + fromQuery.splice(fromQuery.indexOf(id), 1); + } else { + fromQuery.push(id); + } + + changeQuery('from', fromQuery); + hasRenewedFromURL.current = false; + }; + + const getSelectedCards = () => { + if (fromQuery) { + const title = ( + + {fromQuery.length} external recipient + {fromQuery.length === 1 ? '' : 's'} selected + + ); + + // If there are no recipients selected, show a message + if (fromQuery.length === 0) { + return ( + <> + {title} +

+ Click on external recipients to request feedback from them +

+ + ); + } + + // If there are any selected recipients, display them + return ( + <> + {title} +
+ {fromQuery.map(id => ( + cardClickHandler(id)} + /> + ))} +
+ + ); + } + }; + + return ( + + + + { + setSearchText(e.target.value); + searchTextUpdated.current = false; + }} + InputProps={{ + startAdornment: ( + + + + ) + }} + /> + + +
{getSelectedCards()}
+
+ {profiles ? ( +
+ {profiles + .filter( + profile => + !fromQuery || + (!fromQuery.includes(profile.id) && profile.id !== forQuery) + ) + .map(profile => ( + cardClickHandler(profile.id)} + /> + ))} +
+ ) : ( +

Can't get suggestions, please come back later :(

+ )} +
+
+ ); +}; + +FeedbackExternalRecipientSelector.propTypes = propTypes; + +export default FeedbackExternalRecipientSelector; diff --git a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.test.jsx b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.test.jsx new file mode 100644 index 0000000000..868375aec9 --- /dev/null +++ b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.test.jsx @@ -0,0 +1,20 @@ +import React from 'react'; +import FeedbackExternalRecipientSelector from './FeedbackExternalRecipientSelector.jsx'; +import { AppContextProvider } from '../../context/AppContext'; +import { BrowserRouter } from 'react-router-dom'; + +describe('FeedbackExternalRecipientSelector', () => { + it('renders the component', () => { + snapshot( + + + + + + ); + }); +}); diff --git a/web-ui/src/components/feedback_external_recipient_selector/__snapshots__/FeedbackExternalRecipientSelector.test.jsx.snap b/web-ui/src/components/feedback_external_recipient_selector/__snapshots__/FeedbackExternalRecipientSelector.test.jsx.snap new file mode 100644 index 0000000000..33cc0f304f --- /dev/null +++ b/web-ui/src/components/feedback_external_recipient_selector/__snapshots__/FeedbackExternalRecipientSelector.test.jsx.snap @@ -0,0 +1,99 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`FeedbackExternalRecipientSelector > renders the component 1`] = ` +
+ +`; diff --git a/web-ui/src/pages/FeedbackRequestPage.jsx b/web-ui/src/pages/FeedbackRequestPage.jsx index 6981ad8556..357d160d6d 100644 --- a/web-ui/src/pages/FeedbackRequestPage.jsx +++ b/web-ui/src/pages/FeedbackRequestPage.jsx @@ -31,6 +31,9 @@ import DateFnsUtils from '@date-io/date-fns'; import { getFeedbackTemplate, softDeleteAdHocTemplates } from '../api/feedbacktemplate'; import './FeedbackRequestPage.css'; +import FeedbackRequestForExternalRecipientPage from "./FeedbackRequestForExternalRecipientPage.jsx"; +import FeedbackExternalRecipientSelector + from "../components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx"; const dateUtils = new DateFnsUtils(); const PREFIX = 'FeedbackRequestPage'; @@ -120,6 +123,7 @@ const FeedbackRequestPage = () => { const queryLoaded = useRef(false); const [readyToProceed, setReadyToProceed] = useState(false); const [templateIsValid, setTemplateIsValid] = useState(); + const [templateIsForExternalRecipient, setTemplateIsForExternalRecipient] = useState(); const [requestee, setRequestee] = useState({}); const [memberIds, setMemberIds] = useState([]); const [activeStep, setActiveStep] = useState(1); @@ -130,6 +134,7 @@ const FeedbackRequestPage = () => { ...query, [key]: value }; + console.log("FeedbackRequestPage, handleQueryChange, query: ", query); history.push({ ...location, search: queryString.stringify(newQuery) }); }, [history, location, query] @@ -328,22 +333,25 @@ const FeedbackRequestPage = () => { useEffect(() => { const params = queryString.parse(location?.search); + console.log("FeedbackRequestPage, useEffect, setQuery, params: ", params); setQuery(params); }, [location.search]); useEffect(() => { async function isTemplateValid() { if (!query.template || !csrf) { - return false; + return { isValid: false, additionalData: null }; } + let res = await getFeedbackTemplate(query.template, csrf); let templateResponse = - res.payload && - res.payload.data && - res.payload.status === 200 && - !res.error - ? res.payload.data - : null; + res.payload && + res.payload.data && + res.payload.status === 200 && + !res.error + ? res.payload.data + : null; + if (templateResponse === null) { window.snackDispatch({ type: UPDATE_TOAST, @@ -352,21 +360,27 @@ const FeedbackRequestPage = () => { toast: 'The ID for the template you selected does not exist.' } }); - return false; + return { isValid: false, templateIsForExternalRecipientParam: false }; } else { - return true; + // Set additionalData based on the res.payload.data content + const additionalData = templateResponse.someField; // Replace with the actual data you want to return + console.log("FeedbackRequestPage, isTemplateValid, templateResponse.isForExternalRecipient: ", templateResponse.isForExternalRecipient); + return { isValid: true, templateIsForExternalRecipientParam: templateResponse.isForExternalRecipient }; } } if (queryLoaded.current && csrf) { - isTemplateValid().then(isValid => { + console.log("FeedbackRequestPage, queryLoaded, queryLoaded.current: ", queryLoaded.current); + isTemplateValid().then(({ isValid, templateIsForExternalRecipientParam: templateIsForExternalRecipientParam }) => { setTemplateIsValid(isValid); + setTemplateIsForExternalRecipient(templateIsForExternalRecipientParam); }); } else { queryLoaded.current = true; } }, [csrf, query, queryLoaded]); + useEffect(() => { if (!queryLoaded.current || templateIsValid === undefined) return; @@ -401,79 +415,87 @@ const FeedbackRequestPage = () => { }, [canProceed]); return selectHasCreateFeedbackPermission(state) ? ( - -
- - Feedback Request for {requestee?.name} - -
- - + +
+
+
+ - {activeStep === steps.length ? 'Submit' : 'Next'} - + {steps.map(label => ( + + {label} + + ))} +
-
-
- - {steps.map(label => { - const stepProps = {}; - const labelProps = {}; - return ( - - - {label} - - - ); - })} - -
-
- {activeStep === 1 && ( - handleQueryChange(key, value)} - query={query.template} - /> - )} - {activeStep === 2 && ( - handleQueryChange(key, value)} - fromQuery={ - query.from - ? Array.isArray(query.from) - ? query.from - : [query.from] - : [] - } - /> - )} - {activeStep === 3 && ( - handleQueryChange(key, value)} - sendDateQuery={query.send} - dueDateQuery={query.due} - /> - )} -
- +
+ {activeStep === 1 && ( + handleQueryChange(key, value)} + query={query.template} + /> + )} + {activeStep === 2 && ( + templateIsForExternalRecipient ? ( + handleQueryChange(key, value)} + fromQuery={ + query.from + ? Array.isArray(query.from) + ? query.from + : [query.from] + : [] + } + /> + ) : ( + handleQueryChange(key, value)} + fromQuery={ + query.from + ? Array.isArray(query.from) + ? query.from + : [query.from] + : [] + } + /> + ) + )} + {activeStep === 3 && ( + handleQueryChange(key, value)} + sendDateQuery={query.send} + dueDateQuery={query.due} + /> + )} +
+ ) : (

{noPermission}

); From 6ddafa2820c1d6534daf670a22f8ab1b3cb93f0b Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Thu, 31 Oct 2024 10:05:11 -0400 Subject: [PATCH 031/102] 2024-10-31 - external-recip get-all --- .../FeedbackExternalRecipientController.java | 35 +++++++++++++++++++ .../FeedbackExternalRecipientServices.java | 4 ++- ...FeedbackExternalRecipientServicesImpl.java | 19 +++++++--- 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java index 1f24011b21..dd4ce96e8e 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java @@ -55,6 +55,41 @@ public HttpResponse save(@Body @Valid @Not .headers(headers -> headers.location(URI.create("/feedback_external_recipient/" + savedFeedbackExternalRecipient.getId()))); } + /* + @Get("/{?email, firstName, lastName, companyName}") + public List findByValues(@Nullable String email, @Nullable String firstName, @Nullable String lastName, @Nullable String companyName) { + return this.feedbackExternalRecipientServices.findByValues(email, firstName, lastName, companyName) + .stream() + .map(this::fromEntity) + .toList(); + } + */ + + /** + * Return list of all external-recipients used for feedback-requests + * + * @return list of {@link FeedbackExternalRecipientResponseDTO} + */ + @Get("/findAll") + public List findAll() { + return this.feedbackExternalRecipientServices.findAll() + .stream() + .map(this::fromEntity) + .toList(); + } + + /** + * Get external recipient (for feedback requests) by ID + * + * @param id {@link UUID} ID of the external-recipient + * @return {@link FeedbackExternalRecipientResponseDTO} + */ + @Get("/{id}") + public HttpResponse getById(UUID id) { + FeedbackExternalRecipient feedbackExternalRecipient = this.feedbackExternalRecipientServices.getById(id); + return HttpResponse.created(fromEntity(feedbackExternalRecipient)); + } + private FeedbackExternalRecipient fromDTO(FeedbackExternalRecipientCreateDTO dto) { FeedbackExternalRecipient object = new FeedbackExternalRecipient(); object.setEmail(dto.getEmail()); diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java index f76a140151..9c6c6a75e6 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java @@ -13,6 +13,8 @@ public interface FeedbackExternalRecipientServices { FeedbackExternalRecipient getById(UUID id); - List findByValues(String email, String firstName, String lastName, String companyName); + //List findByValues(String email, String firstName, String lastName, String companyName); + + List findAll(); } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java index 8fa55acae3..fc2e0ddb63 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java @@ -1,11 +1,10 @@ package com.objectcomputing.checkins.services.feedback_external_recipient; import com.objectcomputing.checkins.exceptions.NotFoundException; +import io.micronaut.core.annotation.Nullable; import jakarta.inject.Singleton; -import java.util.List; -import java.util.Optional; -import java.util.UUID; +import java.util.*; @Singleton public class FeedbackExternalRecipientServicesImpl implements FeedbackExternalRecipientServices { @@ -42,7 +41,17 @@ public FeedbackExternalRecipient getById(UUID id) { } @Override - public List findByValues(String email, String firstName, String lastName, String companyName) { - return List.of(); + public List findAll() { + return feedbackExternalRecipientRepository.findAll(); } + + /* + @Override + public List findByValues(@Nullable String email, @Nullable String firstName, @Nullable String lastName, @Nullable String companyName) { + List feedbackExternalRecipients = new ArrayList<>(feedbackExternalRecipientRepository.search()); + + return feedbackExternalRecipients; + } + */ + } From 5f07db40ceb3cd1ba97a578c8ada4346ba386eb1 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Thu, 31 Oct 2024 12:34:58 -0400 Subject: [PATCH 032/102] 2024-10-31 - external-recip jsx --- web-ui/src/api/feedback.js | 8 + .../FeedbackExternalRecipientCard.css | 55 ++++++ .../FeedbackExternalRecipientCard.jsx | 145 ++++++++++++++ .../FeedbackExternalRecipientCard.stories.jsx | 48 +++++ .../FeedbackExternalRecipientCard.test.jsx | 14 ++ ...eedbackExternalRecipientCard.test.jsx.snap | 64 +++++++ .../FeedbackExternalRecipientSelector.jsx | 179 +++++++++--------- 7 files changed, 423 insertions(+), 90 deletions(-) create mode 100644 web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.css create mode 100644 web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx create mode 100644 web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.stories.jsx create mode 100644 web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.test.jsx create mode 100644 web-ui/src/components/feedback_external_recipient_card/__snapshots__/FeedbackExternalRecipientCard.test.jsx.snap diff --git a/web-ui/src/api/feedback.js b/web-ui/src/api/feedback.js index 856618502d..adb8b07a78 100644 --- a/web-ui/src/api/feedback.js +++ b/web-ui/src/api/feedback.js @@ -5,6 +5,7 @@ const feedbackSuggestionURL = '/services/feedback/suggestions'; const feedbackRequestURL = '/services/feedback/requests'; const answerURL = '/services/feedback/answers'; const questionAndAnswerURL = '/services/feedback/questions-and-answers'; +const feedbackExternalRecipientsURL = '/services/feedback/external/recipients'; export const findReviewRequestsByPeriodAndTeamMembers = async ( period, @@ -291,3 +292,10 @@ export const getFeedbackRequestsByRequestees = async ( headers: { 'X-CSRF-Header': cookie, Accept: 'application/json' } }); }; + +export const getExternalRecipients = async (cookie) => { + return resolve({ + url: `${feedbackExternalRecipientsURL}/findAll`, + headers: { 'X-CSRF-Header': cookie, Accept: 'application/json' } + }); +}; diff --git a/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.css b/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.css new file mode 100644 index 0000000000..2e22ef144a --- /dev/null +++ b/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.css @@ -0,0 +1,55 @@ +.member-card { + max-height: 20rem; + width: 325px; + display: flex; + flex-direction: column; + justify-content: space-between; + cursor: pointer; + margin: 0 2em 2em 0; +} + +.member-card .member-summary-avatar { + height: 5rem; + width: 5rem; + margin-right: 1.25rem; +} + +.member-summary-parent { + display: flex; + align-items: center; +} + +.member-card .large { + width: theme-spacing(10); + height: theme-spacing(10); +} + +.member-card .info-container { + padding: 0; +} + +.member-card .split-button { + padding: 1rem; +} + +.member-card .MuiCardHeader-content h2 { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 225px; +} + +.member-card .MuiCardHeader-content h3 { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 225px; +} + +.reason { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; +} diff --git a/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx b/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx new file mode 100644 index 0000000000..3a0c4b8a58 --- /dev/null +++ b/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx @@ -0,0 +1,145 @@ +import React, { useContext } from 'react'; +import { styled } from '@mui/material/styles'; +import { AppContext } from '../../context/AppContext.jsx'; +import { selectProfileMap } from '../../context/selectors.js'; +import { getAvatarURL } from '../../api/api.js'; +import { Box, Card, CardHeader, CardContent, Container, Typography } from '@mui/material'; +import Avatar from '@mui/material/Avatar'; +import PriorityHighIcon from '@mui/icons-material/PriorityHigh'; +import { green } from '@mui/material/colors'; +import CheckCircleIcon from '@mui/icons-material/CheckCircle'; +import Divider from '@mui/material/Divider'; + +import './FeedbackExternalRecipientCard.css'; + +const PREFIX = 'FeedbackExternalRecipientCard'; +const classes = { + root: `${PREFIX}-root`, + header: `${PREFIX}-header`, + cardContent: `${PREFIX}-cardContent`, + divider: `${PREFIX}-divider`, + recommendationText: `${PREFIX}-recommendationText` +}; + +const StyledBox = styled(Box)({ + [`&.${classes.root}`]: { + // currently defined but not used + minWidth: '10em', + maxWidth: '20em', + marginRight: '2em', + marginBottom: '2em', + cursor: 'pointer', + '@media (max-width:767px)': { + marginTop: '1em', + height: '40%', + width: '80%' + } + }, + [`& .${classes.header}`]: { + cursor: 'pointer' + }, + [`& .${classes.cardContent}`]: { + // currently defined but not used + display: 'flex', + alignItems: 'center', + alignContent: 'center', + flexDirection: 'column', + justifyContent: 'center', + textAlign: 'center' + }, + [`& .${classes.divider}`]: { + backgroundColor: 'grey', + width: '90%', + marginBottom: '1em', + marginTop: '1em' + }, + [`& .${classes.recommendationText}`]: { + color: '#333333' + } +}); + +const FeedbackExternalRecipientCard = ({ + recipientProfile, + selected, + reason = null, + onClick +}) => { + const { state } = useContext(AppContext); + const supervisorProfile = selectProfileMap(state)[recipientProfile?.supervisorid]; + const pdlProfile = selectProfileMap(state)[recipientProfile?.pdlId]; + + return ( + + + + {recipientProfile?.firstName} {recipientProfile?.lastName} + + } + action={ + selected ? ( + + checkmark-image + + ) : null + } + subheader={ + + {recipientProfile?.title} + + } + disableTypography + avatar={ + !recipientProfile?.terminationDate ? ( + + ) : ( + + + + ) + } + /> + + + + + {recipientProfile?.email} + +
+ Location: {recipientProfile?.location} +
+ Supervisor: {supervisorProfile?.name} +
+ PDL: {pdlProfile?.name} +
+
+ {reason && ( +
+ + + {reason} + +
+ )} +
+
+
+
+ ); +}; + +export default FeedbackExternalRecipientCard; diff --git a/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.stories.jsx b/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.stories.jsx new file mode 100644 index 0000000000..ba890f4055 --- /dev/null +++ b/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.stories.jsx @@ -0,0 +1,48 @@ +import FeedbackExternalRecipientCard from './FeedbackExternalRecipientCard.jsx'; +import React, { useContext, useEffect } from 'react'; +import { AppContext, AppContextProvider } from '../../context/AppContext.jsx'; +import { UPDATE_MEMBER_PROFILES } from '../../context/actions.js'; + +export default { + title: 'FeedbackReqs/FeedbackExternalRecipientCard', + component: FeedbackExternalRecipientCard, + decorators: [ + Story => { + return ( + + + + ); + } + ] +}; + +const profile = { + id: '12342345678', + pdlID: 123, + workEmail: 'kimberlinm@objectcomputing.com', + name: 'Bob Jones', + title: 'Software Engineer' +}; + +const SetProfiles = ({ profiles }) => { + const { dispatch } = useContext(AppContext); + useEffect(() => { + dispatch({ type: UPDATE_MEMBER_PROFILES, payload: profiles }); + }, [profiles, dispatch]); + return ''; +}; + +const Template = args => ( + + + + +); + +export const DefaultUser = Template.bind({}); +DefaultUser.args = { + profileId: profile.id, + reason: 'Recommended for being a local opossum', + profiles: [profile] +}; diff --git a/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.test.jsx b/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.test.jsx new file mode 100644 index 0000000000..c430ed623b --- /dev/null +++ b/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.test.jsx @@ -0,0 +1,14 @@ +import React from 'react'; +import FeedbackExternalRecipientCard from './FeedbackExternalRecipientCard.jsx'; +import { AppContextProvider } from '../../context/AppContext.jsx'; +import { BrowserRouter } from 'react-router-dom'; + +it('renders the recipient card', () => { + snapshot( + + + + + + ); +}); diff --git a/web-ui/src/components/feedback_external_recipient_card/__snapshots__/FeedbackExternalRecipientCard.test.jsx.snap b/web-ui/src/components/feedback_external_recipient_card/__snapshots__/FeedbackExternalRecipientCard.test.jsx.snap new file mode 100644 index 0000000000..7049f17dcf --- /dev/null +++ b/web-ui/src/components/feedback_external_recipient_card/__snapshots__/FeedbackExternalRecipientCard.test.jsx.snap @@ -0,0 +1,64 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`renders the recipient card 1`] = ` + +`; diff --git a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx index 0de8128b2b..adaf165636 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx +++ b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx @@ -1,6 +1,6 @@ import React, { useContext, useEffect, useState, useRef } from 'react'; import { styled } from '@mui/material/styles'; -import FeedbackRecipientCard from '../feedback_recipient_card/FeedbackRecipientCard'; +import FeedbackExternalRecipientCard from '../feedback_external_recipient_card/FeedbackExternalRecipientCard'; import { AppContext } from '../../context/AppContext'; import { selectProfile, @@ -8,12 +8,11 @@ import { selectCurrentUser, selectNormalizedMembers } from '../../context/selectors'; -import { getFeedbackSuggestion } from '../../api/feedback'; +import {getExternalRecipients} from '../../api/feedback'; import Typography from '@mui/material/Typography'; import { TextField, Grid, InputAdornment } from '@mui/material'; import { Search } from '@mui/icons-material'; import PropTypes from 'prop-types'; - import './FeedbackExternalRecipientSelector.css'; const PREFIX = 'FeedbackExternalRecipientSelector'; @@ -64,14 +63,14 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) useEffect(() => { if ( - !searchTextUpdated.current && - searchText.length !== 0 && - searchText !== '' && - searchText + !searchTextUpdated.current && + searchText.length !== 0 && + searchText !== '' && + searchText ) { if (fromQuery !== undefined) { let selectedMembers = profiles.filter(profile => - fromQuery.includes(profile.id) + fromQuery.includes(profile.id) ); let filteredNormalizedMembers = normalizedMembers.filter(member => { return !selectedMembers.some(selectedMember => { @@ -89,15 +88,15 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) useEffect(() => { function bindFromURL() { if ( - !hasRenewedFromURL.current && - fromQuery !== null && - fromQuery !== undefined + !hasRenewedFromURL.current && + fromQuery !== null && + fromQuery !== undefined ) { let profileCopy = profiles; if (typeof fromQuery === 'string') { let newProfile = { id: fromQuery }; if ( - profiles.filter(member => member.id === newProfile.id).length === 0 + profiles.filter(member => member.id === newProfile.id).length === 0 ) { profileCopy.push(newProfile); } @@ -105,8 +104,8 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) for (let i = 0; i < fromQuery.length; ++i) { let newProfile = { id: fromQuery[i] }; if ( - profiles.filter(member => member.id === newProfile.id).length === - 0 + profiles.filter(member => member.id === newProfile.id).length === + 0 ) { profileCopy.push(newProfile); } @@ -121,7 +120,7 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) if (forQuery === undefined || forQuery === null) { return; } - let res = await getFeedbackSuggestion(forQuery, csrf); + let res = await getExternalRecipients(csrf); if (res && res.payload) { return res.payload.data && !res.error ? res.payload.data : undefined; } @@ -161,97 +160,97 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) const getSelectedCards = () => { if (fromQuery) { const title = ( - - {fromQuery.length} external recipient - {fromQuery.length === 1 ? '' : 's'} selected - + + {fromQuery.length} recipient + {fromQuery.length === 1 ? '' : 's'} selected + ); // If there are no recipients selected, show a message if (fromQuery.length === 0) { return ( - <> - {title} -

- Click on external recipients to request feedback from them -

- + <> + {title} +

+ Click on external recipients to request feedback from them +

+ ); } // If there are any selected recipients, display them return ( - <> - {title} -
- {fromQuery.map(id => ( - cardClickHandler(id)} - /> - ))} -
- + <> + {title} +
+ {fromQuery.map(id => ( + cardClickHandler(id)} + /> + ))} +
+ ); } }; return ( - - - - { - setSearchText(e.target.value); - searchTextUpdated.current = false; - }} - InputProps={{ - startAdornment: ( - - - - ) - }} - /> + + + + { + setSearchText(e.target.value); + searchTextUpdated.current = false; + }} + InputProps={{ + startAdornment: ( + + + + ) + }} + /> + - -
{getSelectedCards()}
-
- {profiles ? ( -
- {profiles - .filter( - profile => - !fromQuery || - (!fromQuery.includes(profile.id) && profile.id !== forQuery) - ) - .map(profile => ( - cardClickHandler(profile.id)} - /> - ))} -
- ) : ( -

Can't get suggestions, please come back later :(

- )} -
-
+
{getSelectedCards()}
+
+ {profiles ? ( +
+ {profiles + .filter( + profile => + !fromQuery || + (!fromQuery.includes(profile.id) && profile.id !== forQuery) + ) + .map(profile => ( + cardClickHandler(profile.id)} + /> + ))} +
+ ) : ( +

Can't get suggestions, please come back later :(

+ )} +
+ ); }; From 096eab961e5ddf9c46318636c072642d95ee362a Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Fri, 1 Nov 2024 10:24:08 -0400 Subject: [PATCH 033/102] 2024-11-01 - external-recip jsx --- web-ui/index_external_recipient.html | 2 +- web-ui/src/AppFeedbackExternalRecipient.css | 46 ++++ web-ui/src/AppFeedbackExternalRecipient.jsx | 91 ++++++++ .../RoutesFeedbackExternalRecipient.jsx | 212 ++++++++++++++++++ .../AppFeedbackExternalRecipientContext.jsx | 19 ++ .../src/index_feedback_external_recipient.css | 13 ++ .../src/index_feedback_external_recipient.jsx | 20 ++ 7 files changed, 402 insertions(+), 1 deletion(-) create mode 100644 web-ui/src/AppFeedbackExternalRecipient.css create mode 100644 web-ui/src/AppFeedbackExternalRecipient.jsx create mode 100644 web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx create mode 100644 web-ui/src/context/AppFeedbackExternalRecipientContext.jsx create mode 100644 web-ui/src/index_feedback_external_recipient.css create mode 100644 web-ui/src/index_feedback_external_recipient.jsx diff --git a/web-ui/index_external_recipient.html b/web-ui/index_external_recipient.html index 5f22069502..15a089a938 100644 --- a/web-ui/index_external_recipient.html +++ b/web-ui/index_external_recipient.html @@ -39,6 +39,6 @@ To begin the development, run `npm start` or `yarn start`. To create a production bundle, use `npm run build` or `yarn build`. --> - + diff --git a/web-ui/src/AppFeedbackExternalRecipient.css b/web-ui/src/AppFeedbackExternalRecipient.css new file mode 100644 index 0000000000..eab0f94582 --- /dev/null +++ b/web-ui/src/AppFeedbackExternalRecipient.css @@ -0,0 +1,46 @@ +@import 'styles/variables.css'; + +.AppFeedbackExternalRecipient { + display: flex; + flex-direction: column; + justify-content: center; + + a, + a:visited { + color: var(--checkins-palette-primary-link); + } + + a:hover { + color: var(--checkins-palette-primary-link-hover); + } +} + +@media (min-width: 600px) { + .App { + margin-top: 65px; + padding-left: var(--nav-width); + } +} + +@media print { + :root { + --nav-width: 0px; + } + + .App { + padding-left: 0; + } +} + +.App-header { + align-items: center; + display: flex; + flex-direction: column; + font-size: calc(10px + 2vmin); + justify-content: center; + min-height: 100vh; +} + +textarea { + resize: none; +} diff --git a/web-ui/src/AppFeedbackExternalRecipient.jsx b/web-ui/src/AppFeedbackExternalRecipient.jsx new file mode 100644 index 0000000000..78fd3bb204 --- /dev/null +++ b/web-ui/src/AppFeedbackExternalRecipient.jsx @@ -0,0 +1,91 @@ +import React from 'react'; +import { Router } from 'react-router-dom'; +import { ErrorBoundary } from 'react-error-boundary'; +import { createBrowserHistory } from 'history'; + +import RoutesFeedbackExternalRecipient from './components/routes/RoutesFeedbackExternalRecipient'; +import ErrorFallback from './pages/ErrorBoundaryPage'; +import SnackBarWithContext from './components/snackbar/SnackBarWithContext'; +import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; +import { LocalizationProvider } from '@mui/x-date-pickers'; +import { DarkMode, LightMode } from '@mui/icons-material'; + +import { + useColorScheme, + experimental_extendTheme as extendTheme, + Experimental_CssVarsProvider as CssVarsProvider +} from '@mui/material/styles'; + +import './AppFeedbackExternalRecipient.css'; +import {AppFeedbackExternalRecipientContextProvider} from "./context/AppFeedbackExternalRecipientContext.jsx"; + +function getUserColorScheme() { + if (window?.matchMedia('(prefers-color-scheme: dark)').matches) { + return 'dark'; + } else if (window?.matchMedia('(prefers-color-scheme: light)').matches) { + return 'light'; + } else { + return 'light'; + } +} + + +const theme = extendTheme({ + cssVarPrefix: 'checkins', + colorSchemes: { + light: { + palette: { + secondary: { + main: '#76c8d4' + } + } + }, + dark: { + palette: { + secondary: { + main: '#76c8d4' + } + } + } + }, + components: { + MuiCssBaseline: { + styleOverrides: { + secondary: { + main: '#f8b576' + }, + body: { + fontSize: '0.875rem', + lineHeight: 1.43, + letterSpacing: '0.01071rem' + } + } + } + } +}); + + +getUserColorScheme(); + +function AppFeedbackExternalRecipient() { + return ( + + + + + +
+
+ +
+
+
+ +
+
+
+
+ ); +} + +export default AppFeedbackExternalRecipient; diff --git a/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx b/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx new file mode 100644 index 0000000000..3d8f7e856c --- /dev/null +++ b/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx @@ -0,0 +1,212 @@ +import React, { useContext } from 'react'; +import { Switch, Route } from 'react-router-dom'; + +import { AppContext } from '../../context/AppContext'; + +import AnniversaryReportPage from '../../pages/AnniversaryReportPage'; +import AnnualReviewReportPage from '../../pages/AnnualReviewReportPage'; +import BirthdayReportPage from '../../pages/BirthdayReportPage'; +import CertificationReportPage from '../../pages/CertificationReportPage'; +import CheckinsPage from '../../pages/CheckinsPage'; +import CheckinsReportPage from '../../pages/CheckinsReportPage'; +import EditPermissionsPage from '../../pages/PermissionsPage'; +import EditSkillsPage from '../../pages/EditSkillsPage'; +import GroupIcon from '@mui/icons-material/Group'; +import GuildsPage from '../../pages/GuildsPage'; +import Header from '../header/Header'; +import HomePage from '../../pages/HomePage'; +import MemberProfilePage from '../../pages/MemberProfilePage'; +import PeoplePage from '../../pages/PeoplePage'; +import PulsePage from '../../pages/PulsePage'; +import PulseReportPage from '../../pages/PulseReportPage'; +import Roles from '../admin/roles/Roles'; +import SettingsPage from '../../pages/SettingsPage'; +import SkillReportPage from '../../pages/SkillReportPage'; +import TeamSkillReportPage from '../../pages/TeamSkillReportPage'; +import TeamsPage from '../../pages/TeamsPage'; +import MeritReportPage from '../../pages/MeritReportPage'; +import Users from '../admin/users/Users'; +import VolunteerReportPage from '../../pages/VolunteerReportPage'; + +import { selectIsAdmin } from '../../context/selectors'; +import FeedbackRequestConfirmation from '../feedback_request_confirmation/FeedbackRequestConfirmation'; +import FeedbackRequestPage from '../../pages/FeedbackRequestPage'; +import ViewFeedbackPage from '../../pages/ViewFeedbackPage'; +import ViewFeedbackResponses from '../view_feedback_responses/ViewFeedbackResponses'; +import FeedbackSubmitConfirmation from '../feedback_submit_confirmation/FeedbackSubmitConfirmation'; +import FeedbackSubmitPage from '../../pages/FeedbackSubmitPage'; +import ReceivedRequestsPage from '../../pages/ReceivedRequestsPage'; +import EmailPage from '../../pages/EmailPage'; +import ReviewsPage from '../../pages/ReviewsPage'; +import SelfReviewsPage from '../../pages/SelfReviewsPage'; +import KudosPage from '../../pages/KudosPage'; +import ManageKudosPage from '../../pages/ManageKudosPage'; +import SkillCategoriesPage from '../../pages/SkillCategoriesPage'; +import SkillCategoryEditPage from '../../pages/SkillCategoryEditPage'; +import FeedbackRequestForExternalRecipientPage from "../../pages/FeedbackRequestForExternalRecipientPage.jsx"; +import {AppFeedbackExternalRecipientContext} from "../../context/AppFeedbackExternalRecipientContext.jsx"; + +export default function RoutesFeedbackExternalRecipient() { + const { state } = useContext(AppFeedbackExternalRecipientContext); + + return ( + + +
+ +
+ +
+ +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + ); +} diff --git a/web-ui/src/context/AppFeedbackExternalRecipientContext.jsx b/web-ui/src/context/AppFeedbackExternalRecipientContext.jsx new file mode 100644 index 0000000000..a151995bbd --- /dev/null +++ b/web-ui/src/context/AppFeedbackExternalRecipientContext.jsx @@ -0,0 +1,19 @@ +import React, { useEffect, useReducer, useMemo } from 'react'; +import { reducer, initialState } from './reducer'; + +const AppFeedbackExternalRecipientContext = React.createContext(); + +const AppFeedbackExternalRecipientContextProvider = props => { + const [state, dispatch] = useReducer( + reducer, + props?.value?.state || initialState + ); + + return ( + + {props.children} + + ); +}; + +export { AppFeedbackExternalRecipientContext, AppFeedbackExternalRecipientContextProvider }; diff --git a/web-ui/src/index_feedback_external_recipient.css b/web-ui/src/index_feedback_external_recipient.css new file mode 100644 index 0000000000..ec2585e8c0 --- /dev/null +++ b/web-ui/src/index_feedback_external_recipient.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/web-ui/src/index_feedback_external_recipient.jsx b/web-ui/src/index_feedback_external_recipient.jsx new file mode 100644 index 0000000000..597762eb0f --- /dev/null +++ b/web-ui/src/index_feedback_external_recipient.jsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { createRoot } from 'react-dom/client'; +import CssBaseline from '@mui/material/CssBaseline'; +import './index.css'; +import * as serviceWorker from './serviceWorker'; +import AppFeedbackExternalRecipient from "./AppFeedbackExternalRecipient.jsx"; + +const container = document.getElementById('root'); +const root = createRoot(container); +root.render( + <> + + + +); + +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: https://bit.ly/CRA-PWA +serviceWorker.unregister(); From 1b43786f847f7be76d6a54635f10b77b9a205b5e Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 4 Nov 2024 08:23:30 -0500 Subject: [PATCH 034/102] 2024-11-04 - external-recips page --- .../FeedbackExternalRecipient.java | 2 +- .../FeedbackExternalRecipientCard.jsx | 38 +------------------ .../FeedbackExternalRecipientSelector.jsx | 32 +++++++++------- .../FeedbackRecipientSelector.jsx | 3 ++ web-ui/src/context/selectors.js | 2 + 5 files changed, 27 insertions(+), 50 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java index 67a5871fba..26a910f79e 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java @@ -59,7 +59,7 @@ public class FeedbackExternalRecipient { @Column(name = "company_name") @ColumnTransformer( - read = "pgp_sym_decrypt(lastName::bytea,'${aes.key}')", + read = "pgp_sym_decrypt(company_name::bytea,'${aes.key}')", write = "pgp_sym_encrypt(?,'${aes.key}') " ) @Schema(description = "company of the feedback external recipient") diff --git a/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx b/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx index 3a0c4b8a58..75dc7f23d8 100644 --- a/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx +++ b/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx @@ -61,7 +61,6 @@ const StyledBox = styled(Box)({ const FeedbackExternalRecipientCard = ({ recipientProfile, selected, - reason = null, onClick }) => { const { state } = useContext(AppContext); @@ -85,24 +84,7 @@ const FeedbackExternalRecipientCard = ({ ) : null } - subheader={ - - {recipientProfile?.title} - - } disableTypography - avatar={ - !recipientProfile?.terminationDate ? ( - - ) : ( - - - - ) - } /> @@ -115,31 +97,15 @@ const FeedbackExternalRecipientCard = ({ {recipientProfile?.email}
- Location: {recipientProfile?.location} -
- Supervisor: {supervisorProfile?.name} -
- PDL: {pdlProfile?.name} + Company: {recipientProfile?.companyName}
- {reason && ( -
- - - {reason} - -
- )}
); + }; export default FeedbackExternalRecipientCard; diff --git a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx index adaf165636..03f5c88fe2 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx +++ b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx @@ -83,7 +83,9 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) } searchTextUpdated.current = true; } - }, [searchText, profiles, fromQuery, state, userProfile, normalizedMembers]); + } + , [searchText, profiles, fromQuery, state, userProfile, normalizedMembers]) + ; useEffect(() => { function bindFromURL() { @@ -93,20 +95,18 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) fromQuery !== undefined ) { let profileCopy = profiles; + console.log("FeedbackExternalRecipientSelector, bindFromURL, profiles: ", profiles); + console.log("FeedbackExternalRecipientSelector, bindFromURL, fromQuery: ", fromQuery); if (typeof fromQuery === 'string') { let newProfile = { id: fromQuery }; - if ( - profiles.filter(member => member.id === newProfile.id).length === 0 - ) { + console.log("FeedbackExternalRecipientSelector, bindFromURL, newProfile: ", newProfile); + if (profiles.filter(member => member.id === newProfile.id).length === 0) { profileCopy.push(newProfile); } } else if (Array.isArray(fromQuery)) { for (let i = 0; i < fromQuery.length; ++i) { let newProfile = { id: fromQuery[i] }; - if ( - profiles.filter(member => member.id === newProfile.id).length === - 0 - ) { + if (profiles.filter(member => member.id === newProfile.id).length === 0) { profileCopy.push(newProfile); } } @@ -116,7 +116,7 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) } } - async function getSuggestions() { + async function getExternalRecipientsForSelector() { if (forQuery === undefined || forQuery === null) { return; } @@ -128,7 +128,7 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) } if (csrf && (searchText === '' || searchText.length === 0)) { - getSuggestions().then(res => { + getExternalRecipientsForSelector().then(res => { bindFromURL(); if (res !== undefined && res !== null) { let filteredProfileCopy = profiles.filter(member => { @@ -137,13 +137,17 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) }); }); let newProfiles = filteredProfileCopy.concat(res); + console.log("FeedbackExternalRecipientSelector, getExternalRecipientsForSelector, newProfiles: ", newProfiles); setProfiles(newProfiles); } }); } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [id, csrf, searchText]); + }, [id, csrf, searchText]) + ; const cardClickHandler = id => { + console.log("FeedbackExternalRecipientSelector, cardClickHandler, id: ", id); + console.log("FeedbackExternalRecipientSelector, cardClickHandler, fromQuery: ", fromQuery); if (!Array.isArray(fromQuery)) { fromQuery = fromQuery ? [fromQuery] : []; } @@ -240,8 +244,7 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) .map(profile => ( cardClickHandler(profile.id)} /> ))} @@ -252,6 +255,9 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) ); + + //recipientProfile={selectProfile(state, profile.id)} + }; FeedbackExternalRecipientSelector.propTypes = propTypes; diff --git a/web-ui/src/components/feedback_recipient_selector/FeedbackRecipientSelector.jsx b/web-ui/src/components/feedback_recipient_selector/FeedbackRecipientSelector.jsx index 4aeebd972f..024c78881c 100644 --- a/web-ui/src/components/feedback_recipient_selector/FeedbackRecipientSelector.jsx +++ b/web-ui/src/components/feedback_recipient_selector/FeedbackRecipientSelector.jsx @@ -138,6 +138,7 @@ const FeedbackRecipientSelector = ({ changeQuery, fromQuery, forQuery }) => { }); }); let newProfiles = filteredProfileCopy.concat(res); + console.log("FeedbackRecipientSelector, getSuggestions, newProfiles: ", newProfiles); setProfiles(newProfiles); } }); @@ -145,6 +146,8 @@ const FeedbackRecipientSelector = ({ changeQuery, fromQuery, forQuery }) => { }, [id, csrf, searchText]); const cardClickHandler = id => { + console.log("FeedbackRecipientSelector, cardClickHandler, id: ", id); + console.log("FeedbackRecipientSelector, cardClickHandler, fromQuery: ", fromQuery); if (!Array.isArray(fromQuery)) { fromQuery = fromQuery ? [fromQuery] : []; } diff --git a/web-ui/src/context/selectors.js b/web-ui/src/context/selectors.js index 725aa4a776..70ee1d8c89 100644 --- a/web-ui/src/context/selectors.js +++ b/web-ui/src/context/selectors.js @@ -246,12 +246,14 @@ export const selectTerminatedMemberIds = createSelector( export const selectProfileMap = createSelector( selectCurrentMembers, currentMembers => { + console.log("selectors, currentMembers 01, currentMembers: ", currentMembers); if (currentMembers && currentMembers.length) { currentMembers = currentMembers.reduce((mappedById, member) => { mappedById[member.id] = member; return mappedById; }, {}); } + console.log("selectors, currentMembers 02, currentMembers: ", currentMembers); return currentMembers; } ); From 0439bb0fddc09db012ce559fce918610bab83ebc Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 4 Nov 2024 11:30:46 -0500 Subject: [PATCH 035/102] 2024-11-04 - external-recips page --- .../FeedbackExternalRecipientSelector.jsx | 4 +- web-ui/src/context/AppContext.jsx | 30 +++++++- web-ui/src/context/actions.js | 8 +- web-ui/src/context/reducer.js | 9 ++- web-ui/src/context/selectors.js | 12 +++ web-ui/src/pages/FeedbackRequestPage.jsx | 74 ++++++++++++++----- 6 files changed, 107 insertions(+), 30 deletions(-) diff --git a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx index 03f5c88fe2..4272bd9cf1 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx +++ b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx @@ -6,7 +6,7 @@ import { selectProfile, selectCsrfToken, selectCurrentUser, - selectNormalizedMembers + selectNormalizedMembers, selectFeedbackExternalRecipient } from '../../context/selectors'; import {getExternalRecipients} from '../../api/feedback'; import Typography from '@mui/material/Typography'; @@ -194,7 +194,7 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) cardClickHandler(id)} /> diff --git a/web-ui/src/context/AppContext.jsx b/web-ui/src/context/AppContext.jsx index 32f8378817..54d199367b 100644 --- a/web-ui/src/context/AppContext.jsx +++ b/web-ui/src/context/AppContext.jsx @@ -14,7 +14,7 @@ import { UPDATE_CERTIFICATIONS, UPDATE_TEAMS, UPDATE_PEOPLE_LOADING, - UPDATE_TEAMS_LOADING + UPDATE_TEAMS_LOADING, UPDATE_EXTERNAL_RECIPIENTS, UPDATE_EXTERNAL_RECIPIENTS_LOADING } from './actions'; import { getCurrentUser, @@ -31,6 +31,7 @@ import { getAllGuilds } from '../api/guild'; import { getSkills } from '../api/skill'; import { getAllTeams } from '../api/team'; import {getCertifications} from "../api/certification.js"; +import { getExternalRecipients } from '../api/feedback.js'; const AppContext = React.createContext(); @@ -54,6 +55,7 @@ const AppContextProvider = props => { teams, memberSkills, memberProfiles, + feedbackExternalRecipients, checkins, skills, certifications, @@ -145,7 +147,28 @@ const AppContextProvider = props => { if (csrf && !memberSkills) { getAllMemberSkills(); } - }, [csrf, memberSkills]); + } + , [csrf, memberSkills]) + ; + + useEffect(() => { + async function getAllExternalRecipients() { + let res = await getExternalRecipients(csrf); + let externalRecipients = + res.payload && res.payload.data && !res.error + ? res.payload.data + : undefined + ; + if (externalRecipients) { + dispatch({ type: UPDATE_EXTERNAL_RECIPIENTS, payload: externalRecipients }); + dispatch({ type: UPDATE_EXTERNAL_RECIPIENTS_LOADING, payload: false }); + } + } + if (csrf && !feedbackExternalRecipients) { + getAllExternalRecipients(); + } + }, [csrf, feedbackExternalRecipients]) + ; useEffect(() => { async function getMemberProfiles() { @@ -178,7 +201,8 @@ const AppContextProvider = props => { getTerminatedMembers(); } } - }, [csrf, userProfile, memberProfiles]); + } + , [csrf, userProfile, memberProfiles]); useEffect(() => { function getAllTheCheckins() { diff --git a/web-ui/src/context/actions.js b/web-ui/src/context/actions.js index c51b7e707b..9a397f40d7 100644 --- a/web-ui/src/context/actions.js +++ b/web-ui/src/context/actions.js @@ -25,14 +25,14 @@ export const UPDATE_SKILLS = '@@check-ins/update_skills'; export const UPDATE_CERTIFICATIONS = '@@check-ins/update_certifications'; export const UPDATE_TEAM_MEMBERS = '@@check-ins/update_team_members'; export const UPDATE_TEAMS = '@@check-ins/update_teams'; -export const UPDATE_TERMINATED_MEMBERS = - '@@check-ins/update_terminated_members'; +export const UPDATE_TERMINATED_MEMBERS = '@@check-ins/update_terminated_members'; export const UPDATE_TOAST = '@@check-ins/update_toast'; export const UPDATE_USER_BIO = '@@check-ins/update_bio'; -export const UPDATE_FEEEDBACK_SUGGESTIONS = - '@@check-ins/update_feedback_suggestions'; +export const UPDATE_FEEEDBACK_SUGGESTIONS = '@@check-ins/update_feedback_suggestions'; export const UPDATE_PEOPLE_LOADING = '@@check-ins/update_people_loading'; export const UPDATE_TEAMS_LOADING = '@@check-ins/update_teams_loading'; export const UPDATE_REVIEW_PERIOD = '@@check-ins/update_review_period'; export const UPDATE_REVIEW_PERIODS = '@@check-ins/update_review_periods'; export const ADD_REVIEW_PERIOD = '@@check-ins/add_review_period'; +export const UPDATE_EXTERNAL_RECIPIENTS = '@@check-ins/update_external_recipients'; +export const UPDATE_EXTERNAL_RECIPIENTS_LOADING = '@@check-ins/update_external_recipients_loading'; diff --git a/web-ui/src/context/reducer.js b/web-ui/src/context/reducer.js index 4e9d952e61..f85d7ed005 100644 --- a/web-ui/src/context/reducer.js +++ b/web-ui/src/context/reducer.js @@ -32,7 +32,7 @@ import { UPDATE_TEAMS_LOADING, UPDATE_REVIEW_PERIOD, UPDATE_REVIEW_PERIODS, - ADD_REVIEW_PERIOD + ADD_REVIEW_PERIOD, UPDATE_EXTERNAL_RECIPIENTS, UPDATE_EXTERNAL_RECIPIENTS_LOADING } from './actions'; export const initialState = { @@ -46,6 +46,7 @@ export const initialState = { memberProfiles: null, terminatedMembers: [], memberSkills: null, + feedbackExternalRecipients: null, roles: null, userRoles: null, skills: null, @@ -248,6 +249,12 @@ export const reducer = (state, action) => { case UPDATE_REVIEW_PERIODS: state.reviewPeriods = action.payload; break; + case UPDATE_EXTERNAL_RECIPIENTS: + state.feedbackExternalRecipients = action.payload; + break; + case UPDATE_EXTERNAL_RECIPIENTS_LOADING: + state.loading = { ...state.loading, feedbackExternalRecipients: action.payload }; + break; default: } return { ...state }; diff --git a/web-ui/src/context/selectors.js b/web-ui/src/context/selectors.js index 70ee1d8c89..f8acd2da63 100644 --- a/web-ui/src/context/selectors.js +++ b/web-ui/src/context/selectors.js @@ -15,6 +15,7 @@ export const selectGuilds = state => state.guilds || []; export const selectLoading = state => state.loading; export const selectReviewPeriods = state => state.reviewPeriods; export const selectPermissions = state => state.permissions; +export const selectFeedbackExternalRecipients = state => state.feedbackExternalRecipients || []; export const noPermission = 'You do not have permission to view this page.'; @@ -724,3 +725,14 @@ export const selectReviewPeriod = createSelector( (state, periodId) => periodId, (periodMap, periodId) => periodMap[periodId] ); + +export const selectFeedbackExternalRecipientIds = createSelector( + selectFeedbackExternalRecipients, + externalRecipients => externalRecipients.map(externalRecipient => externalRecipient.id) +); + +export const selectFeedbackExternalRecipient = createSelector( + selectFeedbackExternalRecipients, + (state, feedbackExternalRecipientId) => feedbackExternalRecipientId, + (feedbackExternalRecipients, feedbackExternalRecipientId) => feedbackExternalRecipients.find(feedbackExternalRecipient => feedbackExternalRecipient.id === feedbackExternalRecipientId) +); diff --git a/web-ui/src/pages/FeedbackRequestPage.jsx b/web-ui/src/pages/FeedbackRequestPage.jsx index 357d160d6d..75bb1a99d7 100644 --- a/web-ui/src/pages/FeedbackRequestPage.jsx +++ b/web-ui/src/pages/FeedbackRequestPage.jsx @@ -25,7 +25,7 @@ import { selectCurrentUser, selectCurrentMemberIds, selectHasCreateFeedbackPermission, - noPermission, + noPermission, selectFeedbackExternalRecipientIds, } from '../context/selectors'; import DateFnsUtils from '@date-io/date-fns'; import { getFeedbackTemplate, softDeleteAdHocTemplates } from '../api/feedbacktemplate'; @@ -126,6 +126,7 @@ const FeedbackRequestPage = () => { const [templateIsForExternalRecipient, setTemplateIsForExternalRecipient] = useState(); const [requestee, setRequestee] = useState({}); const [memberIds, setMemberIds] = useState([]); + const [externalRecipientIds, setExternalRecipientIds] = useState([]); const [activeStep, setActiveStep] = useState(1); const handleQueryChange = useCallback( @@ -151,27 +152,51 @@ const FeedbackRequestPage = () => { }, [query.for, memberIds]); const hasFrom = useCallback(() => { - if (!memberIds.length) return true; - let from = query.from; - if (from) { - from = Array.isArray(from) ? from : [from]; - for (let recipientId of from) { - if (!memberIds.includes(recipientId)) { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'Member ID in URL is invalid' - } - }); - handleQueryChange('from', undefined); - return false; + if (templateIsForExternalRecipient) { + if (!externalRecipientIds.length) return true; + let from = query.from; + if (from) { + from = Array.isArray(from) ? from : [from]; + for (let externalRecipientId of from) { + if (!externalRecipientIds.includes(externalRecipientId)) { + dispatch({ + type: UPDATE_TOAST, + payload: { + severity: 'error', + toast: 'External Recipient ID in URL is invalid' + } + }); + handleQueryChange('from', undefined); + return false; + } + } + return true; + } + return false; + } else { + if (!memberIds.length) return true; + let from = query.from; + if (from) { + from = Array.isArray(from) ? from : [from]; + for (let recipientId of from) { + if (!memberIds.includes(recipientId)) { + dispatch({ + type: UPDATE_TOAST, + payload: { + severity: 'error', + toast: 'Member ID in URL is invalid' + } + }); + handleQueryChange('from', undefined); + return false; + } } + return true; } - return true; + return false; } - return false; - }, [memberIds, query, dispatch, handleQueryChange]); + + }, [memberIds, query, dispatch, handleQueryChange, externalRecipientIds]); const isValidDate = useCallback(dateString => { const today = new Date().setHours(0, 0, 0, 0); @@ -269,7 +294,8 @@ const FeedbackRequestPage = () => { id: null, creatorId: currentUserId, requesteeId: query.for, - recipientId: recipient, + recipientId: (templateIsForExternalRecipient) ? null : recipient, + externalRecipientId: (templateIsForExternalRecipient) ? recipient : null, templateId: query.template, sendDate, dueDate, @@ -331,6 +357,14 @@ const FeedbackRequestPage = () => { } }, [state]); + useEffect(() => { + const feedbackExternalRecipients = selectFeedbackExternalRecipientIds(state); + console.log("FeedbackRequestPage, useEffect, feedbackExternalRecipients: ", feedbackExternalRecipients); + if (feedbackExternalRecipients) { + setExternalRecipientIds(feedbackExternalRecipients); + } + }, [state]); + useEffect(() => { const params = queryString.parse(location?.search); console.log("FeedbackRequestPage, useEffect, setQuery, params: ", params); From e06459ac1836827179024d1b5e490935cc37f105 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 4 Nov 2024 11:40:02 -0500 Subject: [PATCH 036/102] 2024-11-04 - external-recips page --- web-ui/src/context/selectors.js | 2 -- web-ui/src/pages/FeedbackRequestPage.jsx | 11 +++-------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/web-ui/src/context/selectors.js b/web-ui/src/context/selectors.js index f8acd2da63..c4f3b0745a 100644 --- a/web-ui/src/context/selectors.js +++ b/web-ui/src/context/selectors.js @@ -247,14 +247,12 @@ export const selectTerminatedMemberIds = createSelector( export const selectProfileMap = createSelector( selectCurrentMembers, currentMembers => { - console.log("selectors, currentMembers 01, currentMembers: ", currentMembers); if (currentMembers && currentMembers.length) { currentMembers = currentMembers.reduce((mappedById, member) => { mappedById[member.id] = member; return mappedById; }, {}); } - console.log("selectors, currentMembers 02, currentMembers: ", currentMembers); return currentMembers; } ); diff --git a/web-ui/src/pages/FeedbackRequestPage.jsx b/web-ui/src/pages/FeedbackRequestPage.jsx index 75bb1a99d7..36aee8e7a1 100644 --- a/web-ui/src/pages/FeedbackRequestPage.jsx +++ b/web-ui/src/pages/FeedbackRequestPage.jsx @@ -135,7 +135,6 @@ const FeedbackRequestPage = () => { ...query, [key]: value }; - console.log("FeedbackRequestPage, handleQueryChange, query: ", query); history.push({ ...location, search: queryString.stringify(newQuery) }); }, [history, location, query] @@ -221,7 +220,7 @@ const FeedbackRequestPage = () => { return hasFor() && templateIsValid && hasFrom(); } else if (activeStep === 3) { const dueQueryValid = query.due ? isValidDate(query.due) : true; - console.log({ + console.log("FeedbackRequestPage, canProceed: ",{ hasFor: hasFor(), templateIsValid, hasFrom: hasFrom(), @@ -359,7 +358,6 @@ const FeedbackRequestPage = () => { useEffect(() => { const feedbackExternalRecipients = selectFeedbackExternalRecipientIds(state); - console.log("FeedbackRequestPage, useEffect, feedbackExternalRecipients: ", feedbackExternalRecipients); if (feedbackExternalRecipients) { setExternalRecipientIds(feedbackExternalRecipients); } @@ -367,7 +365,6 @@ const FeedbackRequestPage = () => { useEffect(() => { const params = queryString.parse(location?.search); - console.log("FeedbackRequestPage, useEffect, setQuery, params: ", params); setQuery(params); }, [location.search]); @@ -398,13 +395,11 @@ const FeedbackRequestPage = () => { } else { // Set additionalData based on the res.payload.data content const additionalData = templateResponse.someField; // Replace with the actual data you want to return - console.log("FeedbackRequestPage, isTemplateValid, templateResponse.isForExternalRecipient: ", templateResponse.isForExternalRecipient); return { isValid: true, templateIsForExternalRecipientParam: templateResponse.isForExternalRecipient }; } } if (queryLoaded.current && csrf) { - console.log("FeedbackRequestPage, queryLoaded, queryLoaded.current: ", queryLoaded.current); isTemplateValid().then(({ isValid, templateIsForExternalRecipientParam: templateIsForExternalRecipientParam }) => { setTemplateIsValid(isValid); setTemplateIsForExternalRecipient(templateIsForExternalRecipientParam); @@ -412,8 +407,8 @@ const FeedbackRequestPage = () => { } else { queryLoaded.current = true; } - }, [csrf, query, queryLoaded]); - + }, [csrf, query, queryLoaded]) + ; useEffect(() => { if (!queryLoaded.current || templateIsValid === undefined) return; From 819b9b40b8e4c7577b0961e8f6cff01ba22a9e7d Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 4 Nov 2024 12:45:48 -0500 Subject: [PATCH 037/102] 2024-11-04 - external-recips page --- .../FeedbackRequestServicesImpl.java | 6 ++++-- .../FeedbackExternalRecipientSelector.jsx | 6 ------ .../FeedbackRequestConfirmation.jsx | 12 ++++++++++-- web-ui/src/pages/FeedbackRequestPage.jsx | 5 +---- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index d39c568057..a39b2ffd17 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -152,19 +152,21 @@ public void sendNewRequestEmail(FeedbackRequest storedRequest) { MemberProfile requestee = memberProfileServices.getById(storedRequest.getRequesteeId()); String senderName = MemberProfileUtils.getFullName(creator); UUID recipientOrExternalRecipientId; - String reviewerFirstName, reviewerEmail; + String reviewerFirstName, reviewerEmail, urlFeedbackSubmit; if (storedRequest.getExternalRecipientId() != null) { recipientOrExternalRecipientId = storedRequest.getExternalRecipientId(); reviewerExternalRecipient = feedbackExternalRecipientServices.getById(recipientOrExternalRecipientId); reviewerFirstName = reviewerExternalRecipient.getFirstName(); reviewerEmail = reviewerExternalRecipient.getEmail(); + urlFeedbackSubmit = "/feedback/submitForExternalRecipient?request="; } else { recipientOrExternalRecipientId = storedRequest.getRecipientId(); reviewerMemberProfile = memberProfileServices.getById(recipientOrExternalRecipientId); recipientOrExternalRecipientId = storedRequest.getRecipientId(); reviewerFirstName = reviewerMemberProfile.getFirstName(); reviewerEmail = reviewerMemberProfile.getWorkEmail(); + urlFeedbackSubmit = "/feedback/submit?request="; } String newContent = String.format( @@ -177,7 +179,7 @@ public void sendNewRequestEmail(FeedbackRequest storedRequest) { storedRequest.getDueDate().getMonth(), storedRequest.getDueDate().getDayOfMonth(), storedRequest.getDueDate().getYear()), - String.format("%s/feedback/submit?request=%s", + String.format("%s" + urlFeedbackSubmit + "%s", webURL, storedRequest.getId().toString()) ); emailSender.sendEmail( diff --git a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx index 4272bd9cf1..a80e2f4761 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx +++ b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx @@ -95,11 +95,8 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) fromQuery !== undefined ) { let profileCopy = profiles; - console.log("FeedbackExternalRecipientSelector, bindFromURL, profiles: ", profiles); - console.log("FeedbackExternalRecipientSelector, bindFromURL, fromQuery: ", fromQuery); if (typeof fromQuery === 'string') { let newProfile = { id: fromQuery }; - console.log("FeedbackExternalRecipientSelector, bindFromURL, newProfile: ", newProfile); if (profiles.filter(member => member.id === newProfile.id).length === 0) { profileCopy.push(newProfile); } @@ -137,7 +134,6 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) }); }); let newProfiles = filteredProfileCopy.concat(res); - console.log("FeedbackExternalRecipientSelector, getExternalRecipientsForSelector, newProfiles: ", newProfiles); setProfiles(newProfiles); } }); @@ -146,8 +142,6 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) ; const cardClickHandler = id => { - console.log("FeedbackExternalRecipientSelector, cardClickHandler, id: ", id); - console.log("FeedbackExternalRecipientSelector, cardClickHandler, fromQuery: ", fromQuery); if (!Array.isArray(fromQuery)) { fromQuery = fromQuery ? [fromQuery] : []; } diff --git a/web-ui/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx b/web-ui/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx index 8d01337fc8..1d4d3baffb 100644 --- a/web-ui/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx +++ b/web-ui/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx @@ -1,4 +1,4 @@ -import React, { useContext } from 'react'; +import React, {useContext, useEffect, useRef, useState} from 'react'; import { styled } from '@mui/material/styles'; import Typography from '@mui/material/Typography'; import CheckCircleIcon from '@mui/icons-material/CheckCircle'; @@ -47,11 +47,16 @@ const FeedbackRequestConfirmation = () => { const forQuery = query.for?.toString(); const fromQuery = query.from?.toString(); const sendQuery = query.send?.toString(); + const templateQuery = query.template?.toString(); const requestee = selectProfile(state, forQuery); let recipientInfo = getRecipientNames(); let sendDate = dateUtils.parse(sendQuery, 'MM/dd/yyyy', new Date()); function getRecipientNames() { + + console.log("FeedbackRequestConfirmation, getRecipientNames(), query: ", query); + + if (fromQuery !== undefined) { let fromArray = fromQuery.split(','); let recipientProfiles = []; @@ -85,7 +90,10 @@ const FeedbackRequestConfirmation = () => { Sent to: {recipientInfo?.map( (member, index) => - `${selectProfile(state, member)?.name}${index === recipientInfo.length - 1 ? '' : ', '}` + ` + ${selectProfile(state, member)?.name} - id: ${member} - templateQuery: ${templateQuery} + ${index === recipientInfo.length - 1 ? '' : ', '} + ` )} diff --git a/web-ui/src/pages/FeedbackRequestPage.jsx b/web-ui/src/pages/FeedbackRequestPage.jsx index 36aee8e7a1..b60821af89 100644 --- a/web-ui/src/pages/FeedbackRequestPage.jsx +++ b/web-ui/src/pages/FeedbackRequestPage.jsx @@ -32,8 +32,7 @@ import { getFeedbackTemplate, softDeleteAdHocTemplates } from '../api/feedbackte import './FeedbackRequestPage.css'; import FeedbackRequestForExternalRecipientPage from "./FeedbackRequestForExternalRecipientPage.jsx"; -import FeedbackExternalRecipientSelector - from "../components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx"; +import FeedbackExternalRecipientSelector from "../components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx"; const dateUtils = new DateFnsUtils(); const PREFIX = 'FeedbackRequestPage'; @@ -393,8 +392,6 @@ const FeedbackRequestPage = () => { }); return { isValid: false, templateIsForExternalRecipientParam: false }; } else { - // Set additionalData based on the res.payload.data content - const additionalData = templateResponse.someField; // Replace with the actual data you want to return return { isValid: true, templateIsForExternalRecipientParam: templateResponse.isForExternalRecipient }; } } From 40610f06faaf6c319924fd639af05c8e268ef8a7 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 4 Nov 2024 13:58:04 -0500 Subject: [PATCH 038/102] 2024-11-04 - external-recips page --- .../FeedbackRequestConfirmation.jsx | 179 +++++++++++------- 1 file changed, 106 insertions(+), 73 deletions(-) diff --git a/web-ui/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx b/web-ui/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx index 1d4d3baffb..e6bd806a5c 100644 --- a/web-ui/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx +++ b/web-ui/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx @@ -1,11 +1,11 @@ -import React, {useContext, useEffect, useRef, useState} from 'react'; +import React, { useContext, useEffect, useState } from 'react'; import { styled } from '@mui/material/styles'; import Typography from '@mui/material/Typography'; import CheckCircleIcon from '@mui/icons-material/CheckCircle'; import { - selectProfile, - selectHasCreateFeedbackPermission, - noPermission, + selectProfile, + selectHasCreateFeedbackPermission, + noPermission, selectFeedbackExternalRecipient, } from '../../context/selectors'; import { AppContext } from '../../context/AppContext'; import { Link, useLocation } from 'react-router-dom'; @@ -14,95 +14,128 @@ import DateFnsUtils from '@date-io/date-fns'; import './FeedbackRequestConfirmation.css'; import { green } from '@mui/material/colors'; import Button from '@mui/material/Button'; +import {getFeedbackTemplate} from "../../api/feedbacktemplate.js"; +import {UPDATE_TOAST} from "../../context/actions.js"; // Import the action type const dateUtils = new DateFnsUtils(); const PREFIX = 'FeedbackRequestConfirmation'; const classes = { - announcement: `${PREFIX}-announcement`, - checkmark: `${PREFIX}-checkmark` + announcement: `${PREFIX}-announcement`, + checkmark: `${PREFIX}-checkmark` }; const Root = styled('div')({ - [`& .${classes.announcement}`]: { - textAlign: 'center', - ['@media (max-width:820px)']: { - // eslint-disable-line no-useless-computed-key - fontSize: 'x-large' - } - }, - [`& .${classes.checkmark}`]: { - ['@media (max-width:820px)']: { - // eslint-disable-line no-useless-computed-key - width: '65%' + [`& .${classes.announcement}`]: { + textAlign: 'center', + ['@media (max-width:820px)']: { + // eslint-disable-line no-useless-computed-key + fontSize: 'x-large' + } + }, + [`& .${classes.checkmark}`]: { + ['@media (max-width:820px)']: { + // eslint-disable-line no-useless-computed-key + width: '65%' + } } - } }); let today = new Date(); const FeedbackRequestConfirmation = () => { - const { state } = useContext(AppContext); - const location = useLocation(); - const query = queryString.parse(location?.search); - const forQuery = query.for?.toString(); - const fromQuery = query.from?.toString(); - const sendQuery = query.send?.toString(); - const templateQuery = query.template?.toString(); - const requestee = selectProfile(state, forQuery); - let recipientInfo = getRecipientNames(); - let sendDate = dateUtils.parse(sendQuery, 'MM/dd/yyyy', new Date()); + const { state, dispatch } = useContext(AppContext); + const location = useLocation(); + const query = queryString.parse(location?.search); + const forQuery = query.for?.toString(); + const fromQuery = query.from?.toString(); + const sendQuery = query.send?.toString(); + const templateQuery = query.template?.toString(); + const requestee = selectProfile(state, forQuery); + const [templateIsForExternalRecipient, setTemplateIsForExternalRecipient] = useState(false); - function getRecipientNames() { + useEffect(() => { + async function fetchTemplateDetails() { + if (!templateQuery) return; - console.log("FeedbackRequestConfirmation, getRecipientNames(), query: ", query); + let res = await getFeedbackTemplate(templateQuery); + let templateResponse = + res.payload && + res.payload.data && + res.payload.status === 200 && + !res.error + ? res.payload.data + : null; + if (templateResponse === null) { + dispatch({ + type: UPDATE_TOAST, + payload: { + severity: 'error', + toast: 'The ID for the template you selected does not exist.' + } + }); + } else { + setTemplateIsForExternalRecipient(templateResponse.isForExternalRecipient); + } + } + + fetchTemplateDetails(); + }, [templateQuery, dispatch]); - if (fromQuery !== undefined) { - let fromArray = fromQuery.split(','); - let recipientProfiles = []; - if (fromArray.length !== 0) { - for (let i = 0; i < fromArray.length; ++i) { - let element = fromArray[i]; - recipientProfiles.push(element); + function getRecipientNames() { + if (fromQuery !== undefined) { + let fromArray = fromQuery.split(','); + let recipientProfiles = []; + if (fromArray.length !== 0) { + for (let i = 0; i < fromArray.length; ++i) { + let element = fromArray[i]; + recipientProfiles.push(element); + } + } else { + recipientProfiles.push(fromQuery); + } + return recipientProfiles; } - } else { - recipientProfiles.push(fromQuery); - } - return recipientProfiles; } - } - return selectHasCreateFeedbackPermission(state) ? ( - - - checkmark-image - - - - Feedback request{' '} - {dateUtils.isBefore(today, sendDate) - ? ' scheduled on: ' + sendQuery - : ' sent'}{' '} - for {requestee?.name}{' '} - - - - Sent to: - {recipientInfo?.map( - (member, index) => - ` - ${selectProfile(state, member)?.name} - id: ${member} - templateQuery: ${templateQuery} - ${index === recipientInfo.length - 1 ? '' : ', '} - ` - )} - - - - - - ) : ( -

{noPermission}

- ); + let recipientInfo = getRecipientNames(); + let sendDate = dateUtils.parse(sendQuery, 'MM/dd/yyyy', new Date()); + + return selectHasCreateFeedbackPermission(state) ? ( + + + checkmark-image + + + + Feedback request{' '} + {dateUtils.isBefore(today, sendDate) + ? ' scheduled on: ' + sendQuery + : ' sent'}{' '} + for {requestee?.name}{' '} + + + + Sent to: + {recipientInfo?.map( + (recipient, index) => + ` + ${ + templateIsForExternalRecipient + ? selectFeedbackExternalRecipient(state, recipient)?.firstName + " " + selectFeedbackExternalRecipient(state, recipient)?.lastName + " (" + selectFeedbackExternalRecipient(state, recipient)?.companyName + ") " + : selectProfile(state, recipient)?.name + } + ${index === recipientInfo.length - 1 ? '' : ', '} + ` + )} + + + + + + ) : ( +

{noPermission}

+ ); }; export default FeedbackRequestConfirmation; From 3b727666f357b7b88f462fedc434cac997d7494e Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Tue, 5 Nov 2024 11:26:23 -0500 Subject: [PATCH 039/102] 2024-11-05 - external-recips page --- web-ui/src/api/feedbacktemplate.js | 21 ++ .../FeedbackExternalRecipientSelector.jsx | 218 +++++++++++------- .../NewExternalRecipientModal.jsx | 78 +++++++ web-ui/src/pages/FeedbackRequestPage.jsx | 8 +- 4 files changed, 243 insertions(+), 82 deletions(-) create mode 100644 web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx diff --git a/web-ui/src/api/feedbacktemplate.js b/web-ui/src/api/feedbacktemplate.js index 0355c75e03..07ed76d5e8 100644 --- a/web-ui/src/api/feedbacktemplate.js +++ b/web-ui/src/api/feedbacktemplate.js @@ -2,6 +2,7 @@ import { resolve } from './api.js'; const feedbackTemplateUrl = '/services/feedback/templates'; const templateQuestionsUrl = '/services/feedback/template_questions'; +const feedbackExternalRecipientUrl = '/services/feedback/external/recipients'; export const createFeedbackTemplate = async (feedbackTemplate, cookie) => { return resolve({ @@ -154,3 +155,23 @@ export const getAllFeedbackTemplates = async cookie => { headers: { 'X-CSRF-Header': cookie, Accept: 'application/json' } }); }; + + +export const createFeedbackExternalRecipient = async (feedbackExternalRecipient, cookie) => { + const feedbackExternalRecipientReq = resolve({ + method: 'POST', + url: feedbackExternalRecipientUrl, + data: feedbackExternalRecipient, + headers: { + 'X-CSRF-Header': cookie, + Accept: 'application/json', + 'Content-Type': 'application/json;charset=UTF-8' + } + }); + return Promise.all([feedbackExternalRecipientReq]).then( + ([feedbackExternalRecipientRes]) => { + return { feedbackExternalRecipientRes }; + } + ); +}; + diff --git a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx index a80e2f4761..1f8ce74c21 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx +++ b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx @@ -14,6 +14,13 @@ import { TextField, Grid, InputAdornment } from '@mui/material'; import { Search } from '@mui/icons-material'; import PropTypes from 'prop-types'; import './FeedbackExternalRecipientSelector.css'; +import Button from '@mui/material/Button'; +import Tooltip from '@mui/material/Tooltip'; +import HelpOutlineIcon from '@mui/icons-material/HelpOutline'; +import {createFeedbackExternalRecipient, createFeedbackTemplateWithQuestion} from "../../api/feedbacktemplate.js"; +import NewExternalRecipientModal from "./NewExternalRecipientModal.jsx"; +import {UPDATE_TOAST} from "../../context/actions.js"; + const PREFIX = 'FeedbackExternalRecipientSelector'; const classes = { @@ -45,12 +52,13 @@ const StyledGrid = styled(Grid)({ }); const propTypes = { - changeQuery: PropTypes.func.isRequired, - fromQuery: PropTypes.array.isRequired, - forQuery: PropTypes.string.isRequired + changeQuery: PropTypes.func.isRequired, + fromQuery: PropTypes.array.isRequired, + forQuery: PropTypes.string.isRequired, + addExternalRecipientId: PropTypes.func.isRequired, }; -const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) => { +const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, addExternalRecipientId }) => { const { state } = useContext(AppContext); const csrf = selectCsrfToken(state); const userProfile = selectCurrentUser(state); @@ -58,7 +66,7 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) const searchTextUpdated = useRef(false); const hasRenewedFromURL = useRef(false); const [searchText, setSearchText] = useState(''); - const [profiles, setProfiles] = useState([]); + const [externalRecipients, setExternalRecipients] = useState([]); const normalizedMembers = selectNormalizedMembers(state, searchText); useEffect(() => { @@ -69,7 +77,7 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) searchText ) { if (fromQuery !== undefined) { - let selectedMembers = profiles.filter(profile => + let selectedMembers = externalRecipients.filter(profile => fromQuery.includes(profile.id) ); let filteredNormalizedMembers = normalizedMembers.filter(member => { @@ -77,14 +85,13 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) return selectedMember.id === member.id; }); }); - setProfiles(filteredNormalizedMembers); + setExternalRecipients(filteredNormalizedMembers); } else { - setProfiles(normalizedMembers); + setExternalRecipients(normalizedMembers); } searchTextUpdated.current = true; } - } - , [searchText, profiles, fromQuery, state, userProfile, normalizedMembers]) + }, [searchText, externalRecipients, fromQuery, state, userProfile, normalizedMembers]) ; useEffect(() => { @@ -94,21 +101,21 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) fromQuery !== null && fromQuery !== undefined ) { - let profileCopy = profiles; + let profileCopy = externalRecipients; if (typeof fromQuery === 'string') { let newProfile = { id: fromQuery }; - if (profiles.filter(member => member.id === newProfile.id).length === 0) { + if (externalRecipients.filter(member => member.id === newProfile.id).length === 0) { profileCopy.push(newProfile); } } else if (Array.isArray(fromQuery)) { for (let i = 0; i < fromQuery.length; ++i) { let newProfile = { id: fromQuery[i] }; - if (profiles.filter(member => member.id === newProfile.id).length === 0) { + if (externalRecipients.filter(member => member.id === newProfile.id).length === 0) { profileCopy.push(newProfile); } } } - setProfiles(profileCopy); + setExternalRecipients(profileCopy); hasRenewedFromURL.current = true; } } @@ -128,32 +135,32 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) getExternalRecipientsForSelector().then(res => { bindFromURL(); if (res !== undefined && res !== null) { - let filteredProfileCopy = profiles.filter(member => { + let filteredProfileCopy = externalRecipients.filter(member => { return !res.some(suggestedMember => { return suggestedMember.id === member.id; }); }); let newProfiles = filteredProfileCopy.concat(res); - setProfiles(newProfiles); + setExternalRecipients(newProfiles); } }); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [id, csrf, searchText]) ; - const cardClickHandler = id => { - if (!Array.isArray(fromQuery)) { - fromQuery = fromQuery ? [fromQuery] : []; - } - if (fromQuery.includes(id)) { - fromQuery.splice(fromQuery.indexOf(id), 1); - } else { - fromQuery.push(id); - } - - changeQuery('from', fromQuery); - hasRenewedFromURL.current = false; - }; + const cardClickHandler = id => { + if (!Array.isArray(fromQuery)) { + fromQuery = fromQuery ? [fromQuery] : []; + } + if (fromQuery.includes(id)) { + fromQuery.splice(fromQuery.indexOf(id), 1); + } else { + fromQuery.push(id); + } + console.log("FeedbackExternalRecipientSelector.jsx, cardClickHandler, 02 - fromQuery: ", fromQuery); + changeQuery('from', fromQuery); + hasRenewedFromURL.current = false; + }; const getSelectedCards = () => { if (fromQuery) { @@ -188,7 +195,7 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) profile.id === id)} selected onClick={() => cardClickHandler(id)} /> @@ -199,59 +206,108 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery }) } }; - return ( - - - - { - setSearchText(e.target.value); - searchTextUpdated.current = false; - }} - InputProps={{ - startAdornment: ( - - - - ) - }} - /> - - -
{getSelectedCards()}
-
- {profiles ? ( -
- {profiles - .filter( - profile => - !fromQuery || - (!fromQuery.includes(profile.id) && profile.id !== forQuery) - ) - .map(profile => ( - cardClickHandler(profile.id)} - /> - ))} -
- ) : ( -

Can't get suggestions, please come back later :(

- )} -
-
- ); + const [newRecipientModalOpen, setNewRecipientModalOpen] = useState(false); + const handleNewRecipientOpen = () => { + setNewRecipientModalOpen(true); + }; + const handleNewRecipientClose = () => { + setNewRecipientModalOpen(false); + }; + const handleNewRecipientSubmit = async (newRecipient) => { + const { feedbackExternalRecipientRes } = + await createFeedbackExternalRecipient( + newRecipient, + csrf + ); - //recipientProfile={selectProfile(state, profile.id)} + console.log("FeedbackExternalRecipientSelector.jsx, handleNewRecipientSubmit, feedbackExternalRecipientRes: ", feedbackExternalRecipientRes); + + if (feedbackExternalRecipientRes.error) { + const errorMessage = 'Failed to save external recipient'; + dispatch({ + type: UPDATE_TOAST, + payload: { + severity: 'error', + toast: errorMessage + } + }); + } else if (feedbackExternalRecipientRes.payload && feedbackExternalRecipientRes.payload.data) { + newRecipient.id = feedbackExternalRecipientRes.payload.data.id; + console.log("FeedbackExternalRecipientSelector.jsx, handleNewRecipientSubmit, newRecipient: ", newRecipient); + setExternalRecipients([...externalRecipients, newRecipient]); + addExternalRecipientId(newRecipient.id); + handleNewRecipientClose(); + } + }; + + return ( + + + + { + setSearchText(e.target.value); + searchTextUpdated.current = false; + }} + InputProps={{ + startAdornment: ( + + + + ) + }} + /> +
+ + + + +
+
+
+
{getSelectedCards()}
+
+ {externalRecipients ? ( +
+ {externalRecipients + .filter( + profile => + !fromQuery || + (!fromQuery.includes(profile.id) && profile.id !== forQuery) + ) + .map(profile => ( + cardClickHandler(profile.id)} + /> + ))} +
+ ) : ( +

Can't get suggestions, please come back later :(

+ )} +
+ +
+ ); + //recipientProfile={selectProfile(state, profile.id)} }; FeedbackExternalRecipientSelector.propTypes = propTypes; diff --git a/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx b/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx new file mode 100644 index 0000000000..9863dfc603 --- /dev/null +++ b/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx @@ -0,0 +1,78 @@ +import React, { useState } from 'react'; +import { Modal, TextField, Button, Box } from '@mui/material'; +import PropTypes from 'prop-types'; + +const NewExternalRecipientModal = ({ open, onClose, onSubmit }) => { + const [email, setEmail] = useState(''); + const [firstName, setFirstName] = useState(''); + const [lastName, setLastName] = useState(''); + const [companyName, setCompanyName] = useState(''); + + const handleSubmit = () => { + const newRecipient = { + email, + firstName, + lastName, + companyName, + }; + onSubmit(newRecipient); + }; + + return ( + + +

Create New External Recipient

+ setEmail(e.target.value)} + fullWidth + margin="normal" + /> + setFirstName(e.target.value)} + fullWidth + margin="normal" + /> + setLastName(e.target.value)} + fullWidth + margin="normal" + /> + setCompanyName(e.target.value)} + fullWidth + margin="normal" + /> + +
+
+ ); +}; + +NewExternalRecipientModal.propTypes = { + open: PropTypes.bool.isRequired, + onClose: PropTypes.func.isRequired, + onSubmit: PropTypes.func.isRequired, +}; + +const modalStyle = { + position: 'absolute', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + width: 400, + bgcolor: 'background.paper', + boxShadow: 24, + p: 4, +}; + +export default NewExternalRecipientModal; diff --git a/web-ui/src/pages/FeedbackRequestPage.jsx b/web-ui/src/pages/FeedbackRequestPage.jsx index b60821af89..4650205562 100644 --- a/web-ui/src/pages/FeedbackRequestPage.jsx +++ b/web-ui/src/pages/FeedbackRequestPage.jsx @@ -194,7 +194,12 @@ const FeedbackRequestPage = () => { return false; } - }, [memberIds, query, dispatch, handleQueryChange, externalRecipientIds]); + }, [memberIds, query, dispatch, handleQueryChange, externalRecipientIds]) + ; + + const addExternalRecipientId = (id) => { + setExternalRecipientIds((prevIds) => [...prevIds, id]); + }; const isValidDate = useCallback(dateString => { const today = new Date().setHours(0, 0, 0, 0); @@ -498,6 +503,7 @@ const FeedbackRequestPage = () => { : [query.from] : [] } + addExternalRecipientId={addExternalRecipientId} /> ) : ( Date: Wed, 6 Nov 2024 11:12:39 -0500 Subject: [PATCH 040/102] 2024-11-06 - add inactive flag to ext-recip --- .../FeedbackExternalRecipient.java | 12 +++++-- .../FeedbackExternalRecipientController.java | 34 +++++++------------ .../FeedbackExternalRecipientCreateDTO.java | 8 ++++- .../FeedbackExternalRecipientRepository.java | 22 ++++++++++++ .../FeedbackExternalRecipientResponseDTO.java | 4 +++ .../FeedbackExternalRecipientServices.java | 6 +--- ...FeedbackExternalRecipientServicesImpl.java | 18 ++-------- .../FeedbackExternalRecipientUpdateDTO.java | 5 +++ ...ackRequestExternalRecipientController.java | 20 ++++++++++- ...410241018__feedback_external_recipient.sql | 3 +- .../resources/db/dev/R__Load_testing_data.sql | 4 +++ web-ui/src/api/feedback.js | 2 +- 12 files changed, 90 insertions(+), 48 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java index 26a910f79e..2cc6a43c2f 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipient.java @@ -65,13 +65,19 @@ public class FeedbackExternalRecipient { @Schema(description = "company of the feedback external recipient") private String companyName; + @Column(name = "inactive") + @Nullable + @Schema(description = "Indicates if the external-recipient can no longer be used for feedback requests") + private Boolean inactive; + public FeedbackExternalRecipient( - @NotBlank String email, @Nullable String firstName, @Nullable String lastName, @Nullable String companyName + @NotBlank String email, @Nullable String firstName, @Nullable String lastName, @Nullable String companyName, @Nullable Boolean inactive ) { this.email = email; this.firstName = firstName; this.lastName = lastName; this.companyName = companyName; + this.inactive = inactive; } public FeedbackExternalRecipient() {} @@ -86,12 +92,13 @@ public boolean equals(Object o) { && Objects.equals(firstName, that.firstName) && Objects.equals(lastName, that.lastName) && Objects.equals(companyName, that.companyName) + && Objects.equals(inactive, that.inactive) ; } @Override public int hashCode() { - return Objects.hash(id, email, firstName, lastName, companyName); + return Objects.hash(id, email, firstName, lastName, companyName, inactive); } @Override @@ -102,6 +109,7 @@ public String toString() { ", firstName='" + firstName + '\'' + ", lastName='" + lastName + '\'' + ", company='" + companyName + '\'' + + ", inactive='" + inactive + '\'' + '}'; } } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java index dd4ce96e8e..711b634df3 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java @@ -41,38 +41,28 @@ public FeedbackExternalRecipientController(FeedbackExternalRecipientServices fee * @param feedbackExternalRecipientCreateDTO {@link FeedbackExternalRecipientCreateDTO} New feedback-req external recipient to create * @return {@link FeedbackExternalRecipient} */ - @RequiredPermission(Permission.CAN_CREATE_FEEDBACK_REQUEST) @Post public HttpResponse save(@Body @Valid @NotNull FeedbackExternalRecipientCreateDTO feedbackExternalRecipientCreateDTO) { FeedbackExternalRecipient savedFeedbackExternalRecipient; FeedbackExternalRecipient feedbackExternalRecipientFromDto = fromDTO(feedbackExternalRecipientCreateDTO); - try { - savedFeedbackExternalRecipient = feedbackExternalRecipientServices.save(feedbackExternalRecipientFromDto); - } catch (Exception e) { - throw e; - } + savedFeedbackExternalRecipient = feedbackExternalRecipientServices.save(feedbackExternalRecipientFromDto); return HttpResponse.created(fromEntity(savedFeedbackExternalRecipient)) .headers(headers -> headers.location(URI.create("/feedback_external_recipient/" + savedFeedbackExternalRecipient.getId()))); } - /* - @Get("/{?email, firstName, lastName, companyName}") - public List findByValues(@Nullable String email, @Nullable String firstName, @Nullable String lastName, @Nullable String companyName) { - return this.feedbackExternalRecipientServices.findByValues(email, firstName, lastName, companyName) - .stream() - .map(this::fromEntity) - .toList(); - } - */ - /** - * Return list of all external-recipients used for feedback-requests + * Update a feedback request external recipient * - * @return list of {@link FeedbackExternalRecipientResponseDTO} + * @param email The {@link String} email of the external-recipient + * @param firstName The {@link String} first name of the external-recipient + * @param lastName The {@link String} last name of the external-recipient + * @param companyName The {@link String} company name of the external-recipient + * @param inactive The {@link Boolean} inactive status of the external-recipient + * @return {@link FeedbackExternalRecipient} */ - @Get("/findAll") - public List findAll() { - return this.feedbackExternalRecipientServices.findAll() + @Get("/{?email, firstName, lastName, companyName,inactive}") + public List findByValues(@Nullable String email, @Nullable String firstName, @Nullable String lastName, @Nullable String companyName, @Nullable Boolean inactive) { + return this.feedbackExternalRecipientServices.findByValues(email, firstName, lastName, companyName, inactive) .stream() .map(this::fromEntity) .toList(); @@ -96,6 +86,7 @@ private FeedbackExternalRecipient fromDTO(FeedbackExternalRecipientCreateDTO dto object.setFirstName(dto.getFirstName()); object.setLastName(dto.getLastName()); object.setCompanyName(dto.getCompanyName()); + object.setInactive(dto.getInactive()); return object; } @@ -106,6 +97,7 @@ private FeedbackExternalRecipientResponseDTO fromEntity(FeedbackExternalRecipien dto.setFirstName(feedbackExternalRecipient.getFirstName()); dto.setLastName(feedbackExternalRecipient.getLastName()); dto.setCompanyName(feedbackExternalRecipient.getCompanyName()); + dto.setInactive(feedbackExternalRecipient.getInactive()); return dto; } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientCreateDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientCreateDTO.java index f746eae5df..3778093dfd 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientCreateDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientCreateDTO.java @@ -3,6 +3,7 @@ import io.micronaut.core.annotation.Introspected; import io.micronaut.core.annotation.Nullable; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.Column; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Getter; @@ -33,6 +34,10 @@ public class FeedbackExternalRecipientCreateDTO { @Schema(description = "company-name of the feedback-external-recipient") private String companyName; + @Nullable + @Schema(description = "Indicates if the external-recipient can no longer be used for feedback requests") + private Boolean inactive; + @Override public boolean equals(@Nullable Object o) { if (this == o) return true; @@ -43,12 +48,13 @@ public boolean equals(@Nullable Object o) { && Objects.equals(firstName, that.firstName) && Objects.equals(lastName, that.lastName) && Objects.equals(companyName, that.companyName) + && Objects.equals(inactive, that.inactive) ; } @Override public int hashCode() { - return Objects.hash(email, firstName, lastName, companyName); + return Objects.hash(email, firstName, lastName, companyName, inactive); } } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientRepository.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientRepository.java index 2ee066e1a6..585de27212 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientRepository.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientRepository.java @@ -23,5 +23,27 @@ public interface FeedbackExternalRecipientRepository extends CrudRepository S save(@Valid @NotNull @NonNull S entity); @Override S update(@NotNull @NonNull S entity); + + // , PGP_SYM_DECRYPT(cast(FER. as bytea), '${aes.key}') as + + @Query("" + + "SELECT id" + + ", PGP_SYM_DECRYPT(cast(FER.email as bytea), '${aes.key}') as email" + + ", PGP_SYM_DECRYPT(cast(FER.firstname as bytea), '${aes.key}') as firstname" + + ", PGP_SYM_DECRYPT(cast(FER.lastname as bytea), '${aes.key}') as lastname" + + ", PGP_SYM_DECRYPT(cast(FER.company_name as bytea), '${aes.key}') as company_name" + + ", FER.inactive " + + "FROM feedback_external_recipient FER " + + "WHERE 1=1 " + + "AND (:email IS NULL OR FER.email = :email) " + + "AND (:firstName IS NULL OR FER.firstName = :firstName) " + + "AND (:lastName IS NULL OR FER.lastName = :lastName) " + + "AND (:companyName IS NULL OR FER.company_name = :companyName) " + + "AND (:inactive IS NULL OR coalesce(FER.inactive,false) = :inactive)" + ) + List findByValues( + @Nullable String email, @Nullable String firstName, @Nullable String lastName, @Nullable String companyName, @Nullable Boolean inactive + ); + } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientResponseDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientResponseDTO.java index 67ff27ae26..66025827ea 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientResponseDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientResponseDTO.java @@ -35,4 +35,8 @@ public class FeedbackExternalRecipientResponseDTO { @Schema(description = "company-name of the feedback-external-recipient") private String companyName; + @Nullable + @Schema(description = "Indicates if the external-recipient can no longer be used for feedback requests") + private Boolean inactive; + } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java index 9c6c6a75e6..1eba8a268a 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java @@ -9,12 +9,8 @@ public interface FeedbackExternalRecipientServices { FeedbackExternalRecipient update(FeedbackExternalRecipientUpdateDTO feedbackExternalRecipientUpdateDTO); - void delete(UUID id); - FeedbackExternalRecipient getById(UUID id); - //List findByValues(String email, String firstName, String lastName, String companyName); - - List findAll(); + List findByValues(String email, String firstName, String lastName, String companyName, Boolean inactive); } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java index fc2e0ddb63..b29bc78469 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java @@ -25,11 +25,6 @@ public FeedbackExternalRecipient update(FeedbackExternalRecipientUpdateDTO feedb return null; } - @Override - public void delete(UUID id) { - - } - @Override public FeedbackExternalRecipient getById(UUID id) { Optional optional = feedbackExternalRecipientRepository.findById(id); @@ -41,17 +36,8 @@ public FeedbackExternalRecipient getById(UUID id) { } @Override - public List findAll() { - return feedbackExternalRecipientRepository.findAll(); - } - - /* - @Override - public List findByValues(@Nullable String email, @Nullable String firstName, @Nullable String lastName, @Nullable String companyName) { - List feedbackExternalRecipients = new ArrayList<>(feedbackExternalRecipientRepository.search()); - - return feedbackExternalRecipients; + public List findByValues(@Nullable String email, @Nullable String firstName, @Nullable String lastName, @Nullable String companyName, @Nullable Boolean inactive) { + return feedbackExternalRecipientRepository.findByValues(email, firstName, lastName, companyName, inactive); } - */ } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientUpdateDTO.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientUpdateDTO.java index 57b984f738..8872c19c5b 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientUpdateDTO.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientUpdateDTO.java @@ -3,6 +3,7 @@ import io.micronaut.core.annotation.Introspected; import io.micronaut.core.annotation.Nullable; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.Column; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Getter; @@ -36,5 +37,9 @@ public class FeedbackExternalRecipientUpdateDTO { @Schema(description = "company-name of the feedback-external-recipient") private String companyName; + @Nullable + @Schema(description = "Indicates if the external-recipient can no longer be used for feedback requests") + private Boolean inactive; + } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java index b739ec9a18..421ab9f5c1 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java @@ -40,6 +40,12 @@ public FeedbackRequestExternalRecipientController(FeedbackRequestServices feedba this.feedbackExternalRecipientServices = feedbackExternalRecipientServices; } + /** + * Retrieve feedback request record by ID + * + * @param id {@link UUID} ID of feedback request record to retrieve + * @return {@link FeedbackRequestResponseDTO} + */ @Get("/{id}") public HttpResponse getById(UUID id) { FeedbackRequest feedbackRequest = feedbackReqServices.getById(id); @@ -50,6 +56,18 @@ public HttpResponse getById(UUID id) { .headers(headers -> headers.location(URI.create("/feedback_request" + feedbackRequest.getId()))); } + /** + * Find feedback requests by values + * @param creatorId {@link UUID} ID of the creator + * @param requesteeId {@link UUID} ID of the requestee + * @param recipientId {@link UUID} ID of the recipient + * @param oldestDate {@link LocalDate} The oldest date to search for + * @param reviewPeriodId {@link UUID} ID of the review period + * @param templateId {@link UUID} ID of the template + * @param externalRecipientId {@link UUID} ID of the external recipient + * @return {@link FeedbackRequestResponseDTO} + */ + /* @Get("/{?creatorId,requesteeId,recipientId,oldestDate,reviewPeriodId,templateId,externalRecipientId,requesteeIds}") public List findByValues(@Nullable UUID creatorId, @Nullable UUID requesteeId, @Nullable UUID recipientId, @Nullable @Format("yyyy-MM-dd") LocalDate oldestDate, @Nullable UUID reviewPeriodId, @Nullable UUID templateId, UUID externalRecipientId, @Nullable List requesteeIds) { return feedbackReqServices.findByValues(creatorId, requesteeId, recipientId, oldestDate, reviewPeriodId, templateId, externalRecipientId, requesteeIds) @@ -57,6 +75,7 @@ public List findByValues(@Nullable UUID creatorId, @ .map(this::feedbackRequestFromEntity) .toList(); } + */ @Get("/hello") @Produces(MediaType.TEXT_HTML) @@ -99,7 +118,6 @@ private FeedbackRequestResponseDTO feedbackRequestFromEntity(FeedbackRequest fee dto.setSubmitDate(feedbackRequest.getSubmitDate()); dto.setReviewPeriodId(feedbackRequest.getReviewPeriodId()); dto.setExternalRecipientId(feedbackRequest.getExternalRecipientId()); - return dto; } diff --git a/server/src/main/resources/db/common/V202410241018__feedback_external_recipient.sql b/server/src/main/resources/db/common/V202410241018__feedback_external_recipient.sql index 1a8d1dc4e2..50b48b0193 100644 --- a/server/src/main/resources/db/common/V202410241018__feedback_external_recipient.sql +++ b/server/src/main/resources/db/common/V202410241018__feedback_external_recipient.sql @@ -4,7 +4,8 @@ CREATE TABLE feedback_external_recipient email varchar, firstname varchar, lastname varchar, - company_name varchar + company_name varchar, + inactive boolean ); ALTER TABLE feedback_requests ADD column external_recipient_id varchar; ALTER TABLE feedback_requests ADD CONSTRAINT feedback_requests_externalrecipientid_fkey FOREIGN KEY (external_recipient_id) REFERENCES feedback_external_recipient(id) ON DELETE CASCADE; diff --git a/server/src/main/resources/db/dev/R__Load_testing_data.sql b/server/src/main/resources/db/dev/R__Load_testing_data.sql index 5eb1f4ccd3..847570c0ea 100644 --- a/server/src/main/resources/db/dev/R__Load_testing_data.sql +++ b/server/src/main/resources/db/dev/R__Load_testing_data.sql @@ -1289,6 +1289,10 @@ INSERT INTO feedback_external_recipient (id, email, firstname, lastname, company_name) VALUES('9aefc565-b9b0-4efa-bf9e-c721441d2747', PGP_SYM_ENCRYPT('tim.cook@apple.com', '${aeskey}'), PGP_SYM_ENCRYPT('Tim', '${aeskey}'), PGP_SYM_ENCRYPT('Cook', '${aeskey}'), PGP_SYM_ENCRYPT('Apple', '${aeskey}')) ; +INSERT INTO feedback_external_recipient +(id, email, firstname, lastname, company_name, inactive) +VALUES('dc2921c1-cfff-4e91-a518-d60da098a53e', PGP_SYM_ENCRYPT('inn.unactive@inactive.com', '${aeskey}'), PGP_SYM_ENCRYPT('Inn', '${aeskey}'), PGP_SYM_ENCRYPT('Unactive', '${aeskey}'), PGP_SYM_ENCRYPT('Inactive, Inc.', '${aeskey}'), true) +; -- Feedback Requests without responses ---- Creator: Huey Emmerich diff --git a/web-ui/src/api/feedback.js b/web-ui/src/api/feedback.js index adb8b07a78..aa47a5753a 100644 --- a/web-ui/src/api/feedback.js +++ b/web-ui/src/api/feedback.js @@ -295,7 +295,7 @@ export const getFeedbackRequestsByRequestees = async ( export const getExternalRecipients = async (cookie) => { return resolve({ - url: `${feedbackExternalRecipientsURL}/findAll`, + url: `${feedbackExternalRecipientsURL}?inactive=false`, headers: { 'X-CSRF-Header': cookie, Accept: 'application/json' } }); }; From 9525260114335c2493d87a4b38d623f4d1ff0ea7 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Thu, 7 Nov 2024 14:41:45 -0500 Subject: [PATCH 041/102] 2024-11-07 - add inactive flag to ext-recip --- .../FeedbackExternalRecipientController.java | 17 +++ .../FeedbackExternalRecipientServices.java | 2 +- ...FeedbackExternalRecipientServicesImpl.java | 4 +- web-ui/src/api/feedback.js | 14 ++- .../FeedbackExternalRecipientCard.jsx | 111 ++++++++++-------- .../FeedbackExternalRecipientSelector.jsx | 44 +++++-- 6 files changed, 135 insertions(+), 57 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java index 711b634df3..f1cbddbd96 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientController.java @@ -50,6 +50,23 @@ public HttpResponse save(@Body @Valid @Not .headers(headers -> headers.location(URI.create("/feedback_external_recipient/" + savedFeedbackExternalRecipient.getId()))); } + /** + * Mark a feedback request external recipient as inactive + * + * @param id {@link UUID} ID of the external-recipient + * @return {@link HttpResponse} + */ + @Put("/inactivate/{id}") + public HttpResponse inactivate(UUID id) { + FeedbackExternalRecipient feedbackExternalRecipient = feedbackExternalRecipientServices.getById(id); + if (feedbackExternalRecipient == null) { + throw new BadArgException("Invalid external recipient ID"); + } + feedbackExternalRecipient.setInactive(true); + feedbackExternalRecipientServices.update(feedbackExternalRecipient); + return HttpResponse.ok(); + } + /** * Update a feedback request external recipient * diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java index 1eba8a268a..e96dcb37c5 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServices.java @@ -7,7 +7,7 @@ public interface FeedbackExternalRecipientServices { FeedbackExternalRecipient save(FeedbackExternalRecipient feedbackExternalRecipient); - FeedbackExternalRecipient update(FeedbackExternalRecipientUpdateDTO feedbackExternalRecipientUpdateDTO); + FeedbackExternalRecipient update(FeedbackExternalRecipient feedbackExternalRecipient); FeedbackExternalRecipient getById(UUID id); diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java index b29bc78469..64605268a1 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_external_recipient/FeedbackExternalRecipientServicesImpl.java @@ -21,8 +21,8 @@ public FeedbackExternalRecipient save(FeedbackExternalRecipient feedbackExternal } @Override - public FeedbackExternalRecipient update(FeedbackExternalRecipientUpdateDTO feedbackExternalRecipientUpdateDTO) { - return null; + public FeedbackExternalRecipient update(FeedbackExternalRecipient feedbackExternalRecipient) { + return feedbackExternalRecipientRepository.update(feedbackExternalRecipient); } @Override diff --git a/web-ui/src/api/feedback.js b/web-ui/src/api/feedback.js index aa47a5753a..63814c235a 100644 --- a/web-ui/src/api/feedback.js +++ b/web-ui/src/api/feedback.js @@ -295,7 +295,19 @@ export const getFeedbackRequestsByRequestees = async ( export const getExternalRecipients = async (cookie) => { return resolve({ - url: `${feedbackExternalRecipientsURL}?inactive=false`, + url: `${feedbackExternalRecipientsURL}`, headers: { 'X-CSRF-Header': cookie, Accept: 'application/json' } }); }; + +export const putExternalRecipientInactivate = async (externalRecipientId, cookie) => { + return resolve({ + method: 'PUT', + url: `${feedbackExternalRecipientsURL}/inactivate/${externalRecipientId}`, + headers: { + 'X-CSRF-Header': cookie, + Accept: 'application/json', + 'Content-Type': 'application/json;charset=UTF-8' + } + }); +}; diff --git a/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx b/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx index 75dc7f23d8..37c033e9fb 100644 --- a/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx +++ b/web-ui/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx @@ -1,16 +1,17 @@ import React, { useContext } from 'react'; import { styled } from '@mui/material/styles'; import { AppContext } from '../../context/AppContext.jsx'; -import { selectProfileMap } from '../../context/selectors.js'; -import { getAvatarURL } from '../../api/api.js'; -import { Box, Card, CardHeader, CardContent, Container, Typography } from '@mui/material'; +import { selectCsrfToken, selectProfileMap } from '../../context/selectors.js'; +import { Box, Card, CardHeader, CardContent, Container, Typography, IconButton, Tooltip } from '@mui/material'; import Avatar from '@mui/material/Avatar'; -import PriorityHighIcon from '@mui/icons-material/PriorityHigh'; import { green } from '@mui/material/colors'; import CheckCircleIcon from '@mui/icons-material/CheckCircle'; -import Divider from '@mui/material/Divider'; +import CloseIcon from '@mui/icons-material/Close'; import './FeedbackExternalRecipientCard.css'; +import FeedbackExternalRecipientSelector + from "../feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx"; +import PropTypes from "prop-types"; const PREFIX = 'FeedbackExternalRecipientCard'; const classes = { @@ -59,53 +60,71 @@ const StyledBox = styled(Box)({ }); const FeedbackExternalRecipientCard = ({ - recipientProfile, - selected, - onClick -}) => { + recipientProfile, + selected, + onClick, + onInactivateHandle + }) => { const { state } = useContext(AppContext); + const csrf = selectCsrfToken(state); const supervisorProfile = selectProfileMap(state)[recipientProfile?.supervisorid]; const pdlProfile = selectProfileMap(state)[recipientProfile?.pdlId]; + async function handleInactivate() { + onInactivateHandle(); + } + return ( - - - - {recipientProfile?.firstName} {recipientProfile?.lastName} - - } - action={ - selected ? ( - - checkmark-image - - ) : null - } - disableTypography - /> - - - - - {recipientProfile?.email} - -
- Company: {recipientProfile?.companyName} -
-
-
-
-
-
+ + + + {recipientProfile?.firstName} {recipientProfile?.lastName} + + } + action={ + <> + {selected ? ( + + checkmark-image + + ) : ( + + { + e.stopPropagation(); + handleInactivate(); + }} + > + + + + )} + + } + disableTypography + /> + + + +
+ {recipientProfile?.email} + +
+ Company: {recipientProfile?.companyName} +
+ + + + + ); - }; export default FeedbackExternalRecipientCard; diff --git a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx index 1f8ce74c21..7e79571c5a 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx +++ b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx @@ -8,7 +8,7 @@ import { selectCurrentUser, selectNormalizedMembers, selectFeedbackExternalRecipient } from '../../context/selectors'; -import {getExternalRecipients} from '../../api/feedback'; +import {putExternalRecipientInactivate, getExternalRecipients} from '../../api/feedback'; import Typography from '@mui/material/Typography'; import { TextField, Grid, InputAdornment } from '@mui/material'; import { Search } from '@mui/icons-material'; @@ -159,9 +159,41 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, a } console.log("FeedbackExternalRecipientSelector.jsx, cardClickHandler, 02 - fromQuery: ", fromQuery); changeQuery('from', fromQuery); - hasRenewedFromURL.current = false; + //hasRenewedFromURL.current = false; }; + async function externalRecipientInactivate(id) { + let externalRecipientsCopy = [...externalRecipients]; + let indexArray = externalRecipientsCopy.findIndex(profile => profile.id === id); + + try { + const response = await putExternalRecipientInactivate(id, csrf); + if (response && !response.error) { + externalRecipientsCopy[indexArray].inactive = true; + hasRenewedFromURL.current = false; + setExternalRecipients(externalRecipientsCopy); + } else { + const errorMessage = 'Failed to inactivate recipient'; + dispatch({ + type: UPDATE_TOAST, + payload: { + severity: 'error', + toast: errorMessage + } + }); + } + } catch (error) { + const errorMessage = ("An error occurred while inactivating the recipient: ", error); + dispatch({ + type: UPDATE_TOAST, + payload: { + severity: 'error', + toast: errorMessage + } + }); + } + } + const getSelectedCards = () => { if (fromQuery) { const title = ( @@ -219,9 +251,6 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, a newRecipient, csrf ); - - console.log("FeedbackExternalRecipientSelector.jsx, handleNewRecipientSubmit, feedbackExternalRecipientRes: ", feedbackExternalRecipientRes); - if (feedbackExternalRecipientRes.error) { const errorMessage = 'Failed to save external recipient'; dispatch({ @@ -286,13 +315,14 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, a .filter( profile => !fromQuery || - (!fromQuery.includes(profile.id) && profile.id !== forQuery) + (!fromQuery.includes(profile.id) && profile.id !== forQuery && !!!profile.inactive) ) - .map(profile => ( + .map((profile, index) => ( cardClickHandler(profile.id)} + onInactivateHandle={() => externalRecipientInactivate(profile.id)} /> ))} From 9aaf10b4efb5b167dc28a67404dc86e5b769399a Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Thu, 7 Nov 2024 15:04:54 -0500 Subject: [PATCH 042/102] 2024-11-07 - add close-button to new-recip-modal screen --- .../NewExternalRecipientModal.jsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx b/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx index 9863dfc603..9741b1c573 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx +++ b/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx @@ -1,5 +1,6 @@ import React, { useState } from 'react'; -import { Modal, TextField, Button, Box } from '@mui/material'; +import { Modal, TextField, Button, Box, IconButton } from '@mui/material'; +import CloseIcon from '@mui/icons-material/Close'; import PropTypes from 'prop-types'; const NewExternalRecipientModal = ({ open, onClose, onSubmit }) => { @@ -21,6 +22,15 @@ const NewExternalRecipientModal = ({ open, onClose, onSubmit }) => { return ( + + +

Create New External Recipient

Date: Thu, 7 Nov 2024 15:09:51 -0500 Subject: [PATCH 043/102] 2024-11-07 - add close-button to new-recip-modal screen --- .../FeedbackExternalRecipientSelector.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx index 7e79571c5a..3f97ee5a78 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx +++ b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx @@ -159,7 +159,7 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, a } console.log("FeedbackExternalRecipientSelector.jsx, cardClickHandler, 02 - fromQuery: ", fromQuery); changeQuery('from', fromQuery); - //hasRenewedFromURL.current = false; + hasRenewedFromURL.current = false; }; async function externalRecipientInactivate(id) { From bef7e3a78539ea01d655efc5eec4df9eb98b79aa Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Fri, 8 Nov 2024 10:56:57 -0500 Subject: [PATCH 044/102] 2024-11-08 - non-recipient search --- .../FeedbackExternalRecipientSelector.jsx | 96 +++++++++---------- web-ui/src/pages/FeedbackRequestPage.jsx | 1 + 2 files changed, 49 insertions(+), 48 deletions(-) diff --git a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx index 3f97ee5a78..df1d3edf31 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx +++ b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx @@ -67,72 +67,72 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, a const hasRenewedFromURL = useRef(false); const [searchText, setSearchText] = useState(''); const [externalRecipients, setExternalRecipients] = useState([]); - const normalizedMembers = selectNormalizedMembers(state, searchText); - useEffect(() => { - if ( - !searchTextUpdated.current && - searchText.length !== 0 && - searchText !== '' && - searchText - ) { - if (fromQuery !== undefined) { - let selectedMembers = externalRecipients.filter(profile => - fromQuery.includes(profile.id) - ); - let filteredNormalizedMembers = normalizedMembers.filter(member => { - return !selectedMembers.some(selectedMember => { - return selectedMember.id === member.id; - }); - }); - setExternalRecipients(filteredNormalizedMembers); - } else { - setExternalRecipients(normalizedMembers); - } - searchTextUpdated.current = true; - } - }, [searchText, externalRecipients, fromQuery, state, userProfile, normalizedMembers]) - ; - useEffect(() => { - function bindFromURL() { - if ( + useEffect(() => { + + if (!searchTextUpdated.current && searchText.length !== 0 && searchText !== '' && searchText) { + if (fromQuery !== undefined) { + let selectedRecipients = externalRecipients.filter(externalRecipient => + fromQuery.includes(externalRecipient.id) + ); + const normalizedRecipients = [...externalRecipients]; + const filteredNormalizedMembers = normalizedRecipients.filter(member => { + const searchTextLower = searchText.toLowerCase(); + const matchesSearchText = ['firstName', 'lastName', 'email', 'companyName'].some(key => + member[key] && member[key].toLowerCase().includes(searchTextLower) + ); + const isInFromQuery = fromQuery.includes(member.id); + return matchesSearchText || isInFromQuery; + }); + setExternalRecipients(filteredNormalizedMembers); + } else { + setExternalRecipients(normalizedRecipients); + } + searchTextUpdated.current = true; + } + }, [searchText, externalRecipients, fromQuery, state, userProfile]) + ; + + useEffect(() => { + function bindFromURL() { + if ( !hasRenewedFromURL.current && fromQuery !== null && fromQuery !== undefined - ) { + ) { let profileCopy = externalRecipients; if (typeof fromQuery === 'string') { let newProfile = { id: fromQuery }; - if (externalRecipients.filter(member => member.id === newProfile.id).length === 0) { + if (externalRecipients.filter(externalRecipient => externalRecipient.id === newProfile.id).length === 0) { profileCopy.push(newProfile); } } else if (Array.isArray(fromQuery)) { for (let i = 0; i < fromQuery.length; ++i) { let newProfile = { id: fromQuery[i] }; - if (externalRecipients.filter(member => member.id === newProfile.id).length === 0) { + if (externalRecipients.filter(externalRecipient => externalRecipient.id === newProfile.id).length === 0) { profileCopy.push(newProfile); } } } setExternalRecipients(profileCopy); hasRenewedFromURL.current = true; - } - } + } + } - async function getExternalRecipientsForSelector() { - if (forQuery === undefined || forQuery === null) { + async function getExternalRecipientsForSelector() { + if (forQuery === undefined || forQuery === null) { return; - } - let res = await getExternalRecipients(csrf); - if (res && res.payload) { + } + let res = await getExternalRecipients(csrf); + if (res && res.payload) { return res.payload.data && !res.error ? res.payload.data : undefined; - } - return null; - } + } + return null; + } - if (csrf && (searchText === '' || searchText.length === 0)) { - getExternalRecipientsForSelector().then(res => { + if (csrf && (searchText === '' || searchText.length === 0)) { + getExternalRecipientsForSelector().then(res => { bindFromURL(); if (res !== undefined && res !== null) { let filteredProfileCopy = externalRecipients.filter(member => { @@ -143,10 +143,10 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, a let newProfiles = filteredProfileCopy.concat(res); setExternalRecipients(newProfiles); } - }); - } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [id, csrf, searchText]) - ; + }); + } // eslint-disable-next-line react-hooks/exhaustive-deps + }, [id, csrf, searchText]) + ; const cardClickHandler = id => { if (!Array.isArray(fromQuery)) { @@ -194,7 +194,7 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, a } } - const getSelectedCards = () => { + const getSelectedCards = () => { if (fromQuery) { const title = ( { return; } query.step = `${activeStep + 1}`; + query.from = null; history.push({ ...location, search: queryString.stringify(query) }); }, [canProceed, steps.length, query, location, history]); // eslint-disable-line react-hooks/exhaustive-deps From 48a2f35ea2e047fbd30a88de59ed1e75a76a5dd1 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Fri, 8 Nov 2024 14:32:43 -0500 Subject: [PATCH 045/102] 2024-11-08 - non-recipient search --- .../FeedbackExternalRecipientSelector.jsx | 1 - web-ui/src/pages/FeedbackRequestPage.jsx | 7 +++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx index df1d3edf31..d6b4dc81aa 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx +++ b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx @@ -267,7 +267,6 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, a addExternalRecipientId(newRecipient.id); handleNewRecipientClose(); } - }; return ( diff --git a/web-ui/src/pages/FeedbackRequestPage.jsx b/web-ui/src/pages/FeedbackRequestPage.jsx index 2a48fe027d..0452c77bdc 100644 --- a/web-ui/src/pages/FeedbackRequestPage.jsx +++ b/web-ui/src/pages/FeedbackRequestPage.jsx @@ -316,9 +316,12 @@ const FeedbackRequestPage = () => { return; } query.step = `${activeStep + 1}`; - query.from = null; + if (query.step == 2) { + query.from = null; + } history.push({ ...location, search: queryString.stringify(query) }); - }, [canProceed, steps.length, query, location, history]); // eslint-disable-line react-hooks/exhaustive-deps + }, [canProceed, steps.length, query, location, history]) + ; // eslint-disable-line react-hooks/exhaustive-deps const onBackClick = useCallback(() => { if (activeStep === 1) return; From 6aa1bda94a501ae20162cdeaed1517942647a801 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Fri, 8 Nov 2024 14:35:23 -0500 Subject: [PATCH 046/102] 2024-11-08 - non-recipient search --- .../NewExternalRecipientModal.jsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx b/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx index 9741b1c573..87b4b53a22 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx +++ b/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { Modal, TextField, Button, Box, IconButton } from '@mui/material'; import CloseIcon from '@mui/icons-material/Close'; import PropTypes from 'prop-types'; @@ -9,6 +9,15 @@ const NewExternalRecipientModal = ({ open, onClose, onSubmit }) => { const [lastName, setLastName] = useState(''); const [companyName, setCompanyName] = useState(''); + useEffect(() => { + if (open) { + setEmail(''); + setFirstName(''); + setLastName(''); + setCompanyName(''); + } + }, [open]); + const handleSubmit = () => { const newRecipient = { email, From 9fd2a8a2943236d2b4a0f896d66192065ebf50f4 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Fri, 8 Nov 2024 14:38:10 -0500 Subject: [PATCH 047/102] 2024-11-08 - non-recipient search --- .../NewExternalRecipientModal.jsx | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx b/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx index 87b4b53a22..5f614cad92 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx +++ b/web-ui/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx @@ -8,6 +8,7 @@ const NewExternalRecipientModal = ({ open, onClose, onSubmit }) => { const [firstName, setFirstName] = useState(''); const [lastName, setLastName] = useState(''); const [companyName, setCompanyName] = useState(''); + const [emailError, setEmailError] = useState(''); useEffect(() => { if (open) { @@ -15,10 +16,15 @@ const NewExternalRecipientModal = ({ open, onClose, onSubmit }) => { setFirstName(''); setLastName(''); setCompanyName(''); + setEmailError(''); } }, [open]); const handleSubmit = () => { + if (!validateEmail(email)) { + setEmailError('Please enter a valid email address'); + return; + } const newRecipient = { email, firstName, @@ -28,6 +34,11 @@ const NewExternalRecipientModal = ({ open, onClose, onSubmit }) => { onSubmit(newRecipient); }; + const validateEmail = (email) => { + const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + return re.test(String(email).toLowerCase()); + }; + return ( @@ -44,7 +55,12 @@ const NewExternalRecipientModal = ({ open, onClose, onSubmit }) => { setEmail(e.target.value)} + onChange={(e) => { + setEmail(e.target.value); + if (emailError) setEmailError(''); + }} + error={!!emailError} + helperText={emailError} fullWidth margin="normal" /> @@ -69,7 +85,12 @@ const NewExternalRecipientModal = ({ open, onClose, onSubmit }) => { fullWidth margin="normal" /> - From 1e4d0d5c99d1be9dadab26432659206b3f2cac3c Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 11 Nov 2024 12:37:36 -0500 Subject: [PATCH 048/102] 2024-11-11 - search and add-new external-recip --- .../FeedbackExternalRecipientSelector.jsx | 73 ++++++++++--------- .../FeedbackRecipientSelector.jsx | 3 - .../FeedbackRequestConfirmation.jsx | 54 ++++++++++---- web-ui/src/context/AppContext.jsx | 20 ----- web-ui/src/context/actions.js | 2 - web-ui/src/context/reducer.js | 3 +- web-ui/src/context/selectors.js | 13 ---- web-ui/src/pages/FeedbackRequestPage.jsx | 20 +++-- 8 files changed, 90 insertions(+), 98 deletions(-) diff --git a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx index d6b4dc81aa..8328fb6f0a 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx +++ b/web-ui/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx @@ -3,10 +3,7 @@ import { styled } from '@mui/material/styles'; import FeedbackExternalRecipientCard from '../feedback_external_recipient_card/FeedbackExternalRecipientCard'; import { AppContext } from '../../context/AppContext'; import { - selectProfile, - selectCsrfToken, - selectCurrentUser, - selectNormalizedMembers, selectFeedbackExternalRecipient + selectProfile, selectCsrfToken, selectCurrentUser, selectNormalizedMembers, } from '../../context/selectors'; import {putExternalRecipientInactivate, getExternalRecipients} from '../../api/feedback'; import Typography from '@mui/material/Typography'; @@ -59,7 +56,7 @@ const propTypes = { }; const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, addExternalRecipientId }) => { - const { state } = useContext(AppContext); + const { state, dispatch } = useContext(AppContext); const csrf = selectCsrfToken(state); const userProfile = selectCurrentUser(state); const { id } = userProfile; @@ -96,39 +93,39 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, a useEffect(() => { function bindFromURL() { - if ( - !hasRenewedFromURL.current && - fromQuery !== null && - fromQuery !== undefined - ) { - let profileCopy = externalRecipients; - if (typeof fromQuery === 'string') { - let newProfile = { id: fromQuery }; - if (externalRecipients.filter(externalRecipient => externalRecipient.id === newProfile.id).length === 0) { - profileCopy.push(newProfile); - } - } else if (Array.isArray(fromQuery)) { - for (let i = 0; i < fromQuery.length; ++i) { - let newProfile = { id: fromQuery[i] }; - if (externalRecipients.filter(externalRecipient => externalRecipient.id === newProfile.id).length === 0) { - profileCopy.push(newProfile); + if ( + !hasRenewedFromURL.current && + fromQuery !== null && + fromQuery !== undefined + ) { + let profileCopy = externalRecipients; + if (typeof fromQuery === 'string') { + let newProfile = { id: fromQuery }; + if (externalRecipients.filter(externalRecipient => externalRecipient.id === newProfile.id).length === 0) { + profileCopy.push(newProfile); + } + } else if (Array.isArray(fromQuery)) { + for (let i = 0; i < fromQuery.length; ++i) { + let newProfile = { id: fromQuery[i] }; + if (externalRecipients.filter(externalRecipient => externalRecipient.id === newProfile.id).length === 0) { + profileCopy.push(newProfile); + } + } + } + setExternalRecipients(profileCopy); + hasRenewedFromURL.current = true; } - } - } - setExternalRecipients(profileCopy); - hasRenewedFromURL.current = true; - } } async function getExternalRecipientsForSelector() { - if (forQuery === undefined || forQuery === null) { - return; - } - let res = await getExternalRecipients(csrf); - if (res && res.payload) { - return res.payload.data && !res.error ? res.payload.data : undefined; - } - return null; + if (forQuery === undefined || forQuery === null) { + return; + } + let res = await getExternalRecipients(csrf); + if (res && res.payload) { + return res.payload.data && !res.error ? res.payload.data : undefined; + } + return null; } if (csrf && (searchText === '' || searchText.length === 0)) { @@ -157,7 +154,6 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, a } else { fromQuery.push(id); } - console.log("FeedbackExternalRecipientSelector.jsx, cardClickHandler, 02 - fromQuery: ", fromQuery); changeQuery('from', fromQuery); hasRenewedFromURL.current = false; }; @@ -263,8 +259,13 @@ const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, a } else if (feedbackExternalRecipientRes.payload && feedbackExternalRecipientRes.payload.data) { newRecipient.id = feedbackExternalRecipientRes.payload.data.id; console.log("FeedbackExternalRecipientSelector.jsx, handleNewRecipientSubmit, newRecipient: ", newRecipient); - setExternalRecipients([...externalRecipients, newRecipient]); + //setExternalRecipients([...externalRecipients, newRecipient]); addExternalRecipientId(newRecipient.id); + const updatedRecipients = await getExternalRecipients(csrf); + console.log("FeedbackExternalRecipientSelector.jsx, handleNewRecipientSubmit, updatedRecipients: ", updatedRecipients); + if (updatedRecipients && updatedRecipients.payload) { + setExternalRecipients(updatedRecipients.payload.data); + } handleNewRecipientClose(); } }; diff --git a/web-ui/src/components/feedback_recipient_selector/FeedbackRecipientSelector.jsx b/web-ui/src/components/feedback_recipient_selector/FeedbackRecipientSelector.jsx index 024c78881c..4aeebd972f 100644 --- a/web-ui/src/components/feedback_recipient_selector/FeedbackRecipientSelector.jsx +++ b/web-ui/src/components/feedback_recipient_selector/FeedbackRecipientSelector.jsx @@ -138,7 +138,6 @@ const FeedbackRecipientSelector = ({ changeQuery, fromQuery, forQuery }) => { }); }); let newProfiles = filteredProfileCopy.concat(res); - console.log("FeedbackRecipientSelector, getSuggestions, newProfiles: ", newProfiles); setProfiles(newProfiles); } }); @@ -146,8 +145,6 @@ const FeedbackRecipientSelector = ({ changeQuery, fromQuery, forQuery }) => { }, [id, csrf, searchText]); const cardClickHandler = id => { - console.log("FeedbackRecipientSelector, cardClickHandler, id: ", id); - console.log("FeedbackRecipientSelector, cardClickHandler, fromQuery: ", fromQuery); if (!Array.isArray(fromQuery)) { fromQuery = fromQuery ? [fromQuery] : []; } diff --git a/web-ui/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx b/web-ui/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx index e6bd806a5c..d7f37595d2 100644 --- a/web-ui/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx +++ b/web-ui/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx @@ -5,7 +5,7 @@ import CheckCircleIcon from '@mui/icons-material/CheckCircle'; import { selectProfile, selectHasCreateFeedbackPermission, - noPermission, selectFeedbackExternalRecipient, + noPermission, } from '../../context/selectors'; import { AppContext } from '../../context/AppContext'; import { Link, useLocation } from 'react-router-dom'; @@ -15,7 +15,8 @@ import './FeedbackRequestConfirmation.css'; import { green } from '@mui/material/colors'; import Button from '@mui/material/Button'; import {getFeedbackTemplate} from "../../api/feedbacktemplate.js"; -import {UPDATE_TOAST} from "../../context/actions.js"; // Import the action type +import {UPDATE_TOAST} from "../../context/actions.js"; +import {getExternalRecipients} from "../../api/feedback.js"; // Import the action type const dateUtils = new DateFnsUtils(); const PREFIX = 'FeedbackRequestConfirmation'; @@ -52,11 +53,11 @@ const FeedbackRequestConfirmation = () => { const templateQuery = query.template?.toString(); const requestee = selectProfile(state, forQuery); const [templateIsForExternalRecipient, setTemplateIsForExternalRecipient] = useState(false); + const [externalRecipients, setExternalRecipients] = useState([]); useEffect(() => { async function fetchTemplateDetails() { if (!templateQuery) return; - let res = await getFeedbackTemplate(templateQuery); let templateResponse = res.payload && @@ -78,24 +79,45 @@ const FeedbackRequestConfirmation = () => { setTemplateIsForExternalRecipient(templateResponse.isForExternalRecipient); } } - fetchTemplateDetails(); }, [templateQuery, dispatch]); + useEffect(() => { + async function fetchExternalRecipients() { + let res = await getExternalRecipients(); + let externalRecipientsResponse = + res.payload && res.payload.data && res.payload.status === 200 && !res.error + ? res.payload.data + : null + ; + if (externalRecipientsResponse) { + setExternalRecipients(externalRecipientsResponse); + } + } + fetchExternalRecipients(); + }, [templateIsForExternalRecipient]); + function getRecipientNames() { - if (fromQuery !== undefined) { - let fromArray = fromQuery.split(','); - let recipientProfiles = []; - if (fromArray.length !== 0) { - for (let i = 0; i < fromArray.length; ++i) { - let element = fromArray[i]; - recipientProfiles.push(element); - } - } else { - recipientProfiles.push(fromQuery); + let recipientProfiles = []; + if (templateIsForExternalRecipient) { + if (fromQuery !== undefined) { + let fromArray = fromQuery.split(','); + fromArray.forEach(id => { + let recipient = externalRecipients.find(recipient => recipient.id === id); + if (recipient) { + recipientProfiles.push(recipient.firstName + ' ' + recipient.lastName + ' (' + recipient.companyName + ')'); + } + }); + } + } else { + if (fromQuery !== undefined) { + let fromArray = fromQuery.split(','); + fromArray.forEach(id => { + recipientProfiles.push(id); + }); } - return recipientProfiles; } + return recipientProfiles; } let recipientInfo = getRecipientNames(); @@ -122,7 +144,7 @@ const FeedbackRequestConfirmation = () => { ` ${ templateIsForExternalRecipient - ? selectFeedbackExternalRecipient(state, recipient)?.firstName + " " + selectFeedbackExternalRecipient(state, recipient)?.lastName + " (" + selectFeedbackExternalRecipient(state, recipient)?.companyName + ") " + ? recipient : selectProfile(state, recipient)?.name } ${index === recipientInfo.length - 1 ? '' : ', '} diff --git a/web-ui/src/context/AppContext.jsx b/web-ui/src/context/AppContext.jsx index 7d13fa7c48..124c55771e 100644 --- a/web-ui/src/context/AppContext.jsx +++ b/web-ui/src/context/AppContext.jsx @@ -66,7 +66,6 @@ const AppContextProvider = props => { teams, memberSkills, memberProfiles, - feedbackExternalRecipients, checkins, skills, certifications, @@ -167,25 +166,6 @@ const AppContextProvider = props => { , [csrf, memberSkills]) ; - useEffect(() => { - async function getAllExternalRecipients() { - let res = await getExternalRecipients(csrf); - let externalRecipients = - res.payload && res.payload.data && !res.error - ? res.payload.data - : undefined - ; - if (externalRecipients) { - dispatch({ type: UPDATE_EXTERNAL_RECIPIENTS, payload: externalRecipients }); - dispatch({ type: UPDATE_EXTERNAL_RECIPIENTS_LOADING, payload: false }); - } - } - if (csrf && !feedbackExternalRecipients) { - getAllExternalRecipients(); - } - }, [csrf, feedbackExternalRecipients]) - ; - useEffect(() => { async function getMemberProfiles() { let res = await getAllMembers(csrf); diff --git a/web-ui/src/context/actions.js b/web-ui/src/context/actions.js index 9a397f40d7..1581996013 100644 --- a/web-ui/src/context/actions.js +++ b/web-ui/src/context/actions.js @@ -34,5 +34,3 @@ export const UPDATE_TEAMS_LOADING = '@@check-ins/update_teams_loading'; export const UPDATE_REVIEW_PERIOD = '@@check-ins/update_review_period'; export const UPDATE_REVIEW_PERIODS = '@@check-ins/update_review_periods'; export const ADD_REVIEW_PERIOD = '@@check-ins/add_review_period'; -export const UPDATE_EXTERNAL_RECIPIENTS = '@@check-ins/update_external_recipients'; -export const UPDATE_EXTERNAL_RECIPIENTS_LOADING = '@@check-ins/update_external_recipients_loading'; diff --git a/web-ui/src/context/reducer.js b/web-ui/src/context/reducer.js index f85d7ed005..006fd1aea8 100644 --- a/web-ui/src/context/reducer.js +++ b/web-ui/src/context/reducer.js @@ -32,7 +32,7 @@ import { UPDATE_TEAMS_LOADING, UPDATE_REVIEW_PERIOD, UPDATE_REVIEW_PERIODS, - ADD_REVIEW_PERIOD, UPDATE_EXTERNAL_RECIPIENTS, UPDATE_EXTERNAL_RECIPIENTS_LOADING + ADD_REVIEW_PERIOD } from './actions'; export const initialState = { @@ -46,7 +46,6 @@ export const initialState = { memberProfiles: null, terminatedMembers: [], memberSkills: null, - feedbackExternalRecipients: null, roles: null, userRoles: null, skills: null, diff --git a/web-ui/src/context/selectors.js b/web-ui/src/context/selectors.js index 8c77ded808..c5424252cc 100644 --- a/web-ui/src/context/selectors.js +++ b/web-ui/src/context/selectors.js @@ -15,8 +15,6 @@ export const selectGuilds = state => state.guilds || []; export const selectLoading = state => state.loading; export const selectReviewPeriods = state => state.reviewPeriods; export const selectPermissions = state => state.permissions; -export const selectFeedbackExternalRecipients = state => state.feedbackExternalRecipients || []; - export const noPermission = 'You do not have permission to view this page.'; const hasPermission = permissionName => @@ -733,14 +731,3 @@ export const selectReviewPeriod = createSelector( (state, periodId) => periodId, (periodMap, periodId) => periodMap[periodId] ); - -export const selectFeedbackExternalRecipientIds = createSelector( - selectFeedbackExternalRecipients, - externalRecipients => externalRecipients.map(externalRecipient => externalRecipient.id) -); - -export const selectFeedbackExternalRecipient = createSelector( - selectFeedbackExternalRecipients, - (state, feedbackExternalRecipientId) => feedbackExternalRecipientId, - (feedbackExternalRecipients, feedbackExternalRecipientId) => feedbackExternalRecipients.find(feedbackExternalRecipient => feedbackExternalRecipient.id === feedbackExternalRecipientId) -); diff --git a/web-ui/src/pages/FeedbackRequestPage.jsx b/web-ui/src/pages/FeedbackRequestPage.jsx index 0452c77bdc..2ed9dfece3 100644 --- a/web-ui/src/pages/FeedbackRequestPage.jsx +++ b/web-ui/src/pages/FeedbackRequestPage.jsx @@ -18,14 +18,14 @@ import FeedbackTemplateSelector from '../components/feedback_template_selector/F import FeedbackRecipientSelector from '../components/feedback_recipient_selector/FeedbackRecipientSelector'; import SelectDate from '../components/feedback_date_selector/SelectDate'; import { AppContext } from '../context/AppContext'; -import { createFeedbackRequest } from '../api/feedback'; +import {createFeedbackRequest, getExternalRecipients} from '../api/feedback'; import { selectProfile, selectCsrfToken, selectCurrentUser, selectCurrentMemberIds, selectHasCreateFeedbackPermission, - noPermission, selectFeedbackExternalRecipientIds, + noPermission, } from '../context/selectors'; import DateFnsUtils from '@date-io/date-fns'; import { getFeedbackTemplate, softDeleteAdHocTemplates } from '../api/feedbacktemplate'; @@ -259,7 +259,7 @@ const FeedbackRequestPage = () => { await softDeleteAdHoc(currentUserId); const newLocation = { pathname: '/feedback/request/confirmation', - search: queryString.stringify(query) + search: queryString.stringify(query), }; history.push(newLocation); } else if (res.error || data === null) { @@ -365,10 +365,18 @@ const FeedbackRequestPage = () => { }, [state]); useEffect(() => { - const feedbackExternalRecipients = selectFeedbackExternalRecipientIds(state); - if (feedbackExternalRecipients) { - setExternalRecipientIds(feedbackExternalRecipients); + async function fetchExternalRecipients() { + let res = await getExternalRecipients(); + let externalRecipientsResponse = + res.payload && res.payload.data && res.payload.status === 200 && !res.error + ? res.payload.data + : null + ; + if (externalRecipientsResponse) { + setExternalRecipientIds(externalRecipientsResponse.map(recipient => recipient.id)); + } } + fetchExternalRecipients(); }, [state]); useEffect(() => { From 24629e147df1f8cf8358ffca56c7b38a1e1e55a2 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 11 Nov 2024 12:53:11 -0500 Subject: [PATCH 049/102] 2024-11-11 - search and add-new external-recip --- ...eedbackExternalRecipientCard.test.jsx.snap | 49 +++++++++++-------- ...ackExternalRecipientSelector.test.jsx.snap | 36 ++++++++++++-- 2 files changed, 61 insertions(+), 24 deletions(-) diff --git a/web-ui/src/components/feedback_external_recipient_card/__snapshots__/FeedbackExternalRecipientCard.test.jsx.snap b/web-ui/src/components/feedback_external_recipient_card/__snapshots__/FeedbackExternalRecipientCard.test.jsx.snap index 7049f17dcf..1151880564 100644 --- a/web-ui/src/components/feedback_external_recipient_card/__snapshots__/FeedbackExternalRecipientCard.test.jsx.snap +++ b/web-ui/src/components/feedback_external_recipient_card/__snapshots__/FeedbackExternalRecipientCard.test.jsx.snap @@ -12,26 +12,39 @@ exports[`renders the recipient card 1`] = ` class="MuiCardHeader-root FeedbackExternalRecipientCard-header css-185gdzj-MuiCardHeader-root" >
-
- -
+ +
-

-

+


- Location: -
- Supervisor: -
- PDL: + Company:

diff --git a/web-ui/src/components/feedback_external_recipient_selector/__snapshots__/FeedbackExternalRecipientSelector.test.jsx.snap b/web-ui/src/components/feedback_external_recipient_selector/__snapshots__/FeedbackExternalRecipientSelector.test.jsx.snap index 33cc0f304f..89214ae7aa 100644 --- a/web-ui/src/components/feedback_external_recipient_selector/__snapshots__/FeedbackExternalRecipientSelector.test.jsx.snap +++ b/web-ui/src/components/feedback_external_recipient_selector/__snapshots__/FeedbackExternalRecipientSelector.test.jsx.snap @@ -20,7 +20,7 @@ exports[`FeedbackExternalRecipientSelector > renders the component 1`] = ` for=":r0:" id=":r0:-label" > - Search employees... + Search external recipients...
renders the component 1`] = ` aria-invalid="false" class="MuiInputBase-input MuiOutlinedInput-input MuiInputBase-inputAdornedStart css-1o9s3wi-MuiInputBase-input-MuiOutlinedInput-input" id=":r0:" - placeholder="Member Name" + placeholder="Recipient Name" type="text" value="" /> @@ -61,12 +61,40 @@ exports[`FeedbackExternalRecipientSelector > renders the component 1`] = ` class="css-14lo706" > - Search employees... + Search external recipients...
+
+ + +
renders the component 1`] = ` style="font-weight: bold; color: rgb(69, 69, 69); margin-bottom: 1em;" > 0 - external recipient + recipient s selected From 31037f1afb49f55e4db8da1dce56a9c34bf20d23 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 11 Nov 2024 13:43:43 -0500 Subject: [PATCH 050/102] 2024-11-11 - search and add-new external-recip --- .../FeedbackRequestControllerTest.java | 44 ------------------- .../FeedbackExternalRecipientFixture.java | 6 +-- 2 files changed, 3 insertions(+), 47 deletions(-) diff --git a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java index aaa7c718ba..c2fc7fcbe1 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestControllerTest.java @@ -1170,32 +1170,6 @@ void testGetByCreatorRequesteeIdNotPermittedToRecipients() { assertEquals(HttpStatus.OK, response.getStatus()); } - @Test - void testGetByCreatorRequesteeIdIsPermittedToExternalRecipients() { - //create two employee-PDL relationships - MemberProfile pdlMemberProfile = createADefaultMemberProfile(); - assignPdlRole(pdlMemberProfile); - MemberProfile memberOne = createADefaultMemberProfileForPdl(pdlMemberProfile); - MemberProfile pdlMemberProfileTwo = createASecondDefaultMemberProfile(); - assignPdlRole(pdlMemberProfileTwo); - MemberProfile memberTwo = createASecondDefaultMemberProfileForPdl(pdlMemberProfileTwo); - final FeedbackExternalRecipient externalRecipient01 = createADefaultFeedbackExternalRecipient(); - final FeedbackExternalRecipient externalRecipient02 = createASecondDefaultFeedbackExternalRecipient(); - - //create two sample feedback requests by the same PDL - final FeedbackRequest feedbackReq = saveFeedbackRequest(pdlMemberProfile, memberOne, externalRecipient01); - saveFeedbackRequest(pdlMemberProfileTwo, memberTwo, externalRecipient02); - - //search for feedback requests by a specific creator, requestee, and template - final HttpRequest request = HttpRequest.GET(String.format("/?creatorId=%s&requesteeId=%s&externalRecipientId=%s", feedbackReq.getCreatorId(), feedbackReq.getRequesteeId(), feedbackReq.getExternalRecipientId())); - final HttpResponse> response = clientExternalRecipient.toBlocking() - .exchange(request, Argument.listOf(FeedbackRequestResponseDTO.class)); - - assertTrue(response.getBody().isPresent()); - assertEquals(1, response.getBody().get().size()); - assertEquals(HttpStatus.OK, response.getStatus()); - } - @Test void testGetByCreatorRecipientIdPermittedToRecipients() { MemberProfile pdlMemberProfile = createADefaultMemberProfile(); @@ -1215,24 +1189,6 @@ void testGetByCreatorRecipientIdPermittedToRecipients() { assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); } - @Test - void testGetByCreatorRecipientIdPermittedToExternalRecipients() { - MemberProfile pdlMemberProfile = createADefaultMemberProfile(); - assignPdlRole(pdlMemberProfile); - MemberProfile requestee = createADefaultMemberProfileForPdl(pdlMemberProfile); - final FeedbackExternalRecipient externalRecipient = createADefaultFeedbackExternalRecipient(); - FeedbackRequest feedbackRequest = saveFeedbackRequest(pdlMemberProfile, requestee, externalRecipient); - - //get feedback request - final HttpRequest request = HttpRequest.GET(String.format("/?externalRecipientId=%s", feedbackRequest.getExternalRecipientId())); - final HttpResponse response = clientExternalRecipient.toBlocking().exchange(request, FeedbackRequestResponseDTO.class); - - // recipient must be able to get the feedback request - assertEquals(HttpStatus.OK, response.getStatus()); - assertTrue(response.getBody().isPresent()); - assertResponseEqualsEntity(feedbackRequest, response.getBody().get()); - } - @Test void testGetByCreatorRequesteeIdMultiplePermittedToRecipients() { //create two employee-PDL relationships diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackExternalRecipientFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackExternalRecipientFixture.java index eaa2883cc0..fc28ca947b 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackExternalRecipientFixture.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/FeedbackExternalRecipientFixture.java @@ -15,7 +15,7 @@ default FeedbackExternalRecipient createADefaultFeedbackExternalRecipient() { String companyName = "Company Name"; return getFeedbackExternalRecipientRepository().save(new FeedbackExternalRecipient( - email, firstName, lastName, companyName + email, firstName, lastName, companyName, null )); } @@ -26,7 +26,7 @@ default FeedbackExternalRecipient createASecondDefaultFeedbackExternalRecipient( String companyName = "Company Name"; return getFeedbackExternalRecipientRepository().save(new FeedbackExternalRecipient( - email, firstName, lastName, companyName + email, firstName, lastName, companyName, null )); } @@ -37,7 +37,7 @@ default FeedbackExternalRecipient createAThirdDefaultFeedbackExternalRecipient() String companyName = "Company Name"; return getFeedbackExternalRecipientRepository().save(new FeedbackExternalRecipient( - email, firstName, lastName, companyName + email, firstName, lastName, companyName, null )); } From db27a4d33b8701bdfa6c7df3fd19e03388cab1a9 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 11 Nov 2024 14:08:09 -0500 Subject: [PATCH 051/102] 2024-11-11 - Email link correction --- .../services/feedback_request/FeedbackRequestServicesImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index a39b2ffd17..9ddfd37505 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -159,7 +159,7 @@ public void sendNewRequestEmail(FeedbackRequest storedRequest) { reviewerExternalRecipient = feedbackExternalRecipientServices.getById(recipientOrExternalRecipientId); reviewerFirstName = reviewerExternalRecipient.getFirstName(); reviewerEmail = reviewerExternalRecipient.getEmail(); - urlFeedbackSubmit = "/feedback/submitForExternalRecipient?request="; + urlFeedbackSubmit = "/feedbackExternalRecipient/submitForExternalRecipient?request="; } else { recipientOrExternalRecipientId = storedRequest.getRecipientId(); reviewerMemberProfile = memberProfileServices.getById(recipientOrExternalRecipientId); From ec026e618620ac73727381b844345144085960f1 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Tue, 12 Nov 2024 10:28:36 -0500 Subject: [PATCH 052/102] 2024-11-12 - routes --- .../RoutesFeedbackExternalRecipient.jsx | 196 ------------------ 1 file changed, 196 deletions(-) diff --git a/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx b/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx index 3d8f7e856c..592d189b9b 100644 --- a/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx +++ b/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx @@ -1,48 +1,5 @@ import React, { useContext } from 'react'; import { Switch, Route } from 'react-router-dom'; - -import { AppContext } from '../../context/AppContext'; - -import AnniversaryReportPage from '../../pages/AnniversaryReportPage'; -import AnnualReviewReportPage from '../../pages/AnnualReviewReportPage'; -import BirthdayReportPage from '../../pages/BirthdayReportPage'; -import CertificationReportPage from '../../pages/CertificationReportPage'; -import CheckinsPage from '../../pages/CheckinsPage'; -import CheckinsReportPage from '../../pages/CheckinsReportPage'; -import EditPermissionsPage from '../../pages/PermissionsPage'; -import EditSkillsPage from '../../pages/EditSkillsPage'; -import GroupIcon from '@mui/icons-material/Group'; -import GuildsPage from '../../pages/GuildsPage'; -import Header from '../header/Header'; -import HomePage from '../../pages/HomePage'; -import MemberProfilePage from '../../pages/MemberProfilePage'; -import PeoplePage from '../../pages/PeoplePage'; -import PulsePage from '../../pages/PulsePage'; -import PulseReportPage from '../../pages/PulseReportPage'; -import Roles from '../admin/roles/Roles'; -import SettingsPage from '../../pages/SettingsPage'; -import SkillReportPage from '../../pages/SkillReportPage'; -import TeamSkillReportPage from '../../pages/TeamSkillReportPage'; -import TeamsPage from '../../pages/TeamsPage'; -import MeritReportPage from '../../pages/MeritReportPage'; -import Users from '../admin/users/Users'; -import VolunteerReportPage from '../../pages/VolunteerReportPage'; - -import { selectIsAdmin } from '../../context/selectors'; -import FeedbackRequestConfirmation from '../feedback_request_confirmation/FeedbackRequestConfirmation'; -import FeedbackRequestPage from '../../pages/FeedbackRequestPage'; -import ViewFeedbackPage from '../../pages/ViewFeedbackPage'; -import ViewFeedbackResponses from '../view_feedback_responses/ViewFeedbackResponses'; -import FeedbackSubmitConfirmation from '../feedback_submit_confirmation/FeedbackSubmitConfirmation'; -import FeedbackSubmitPage from '../../pages/FeedbackSubmitPage'; -import ReceivedRequestsPage from '../../pages/ReceivedRequestsPage'; -import EmailPage from '../../pages/EmailPage'; -import ReviewsPage from '../../pages/ReviewsPage'; -import SelfReviewsPage from '../../pages/SelfReviewsPage'; -import KudosPage from '../../pages/KudosPage'; -import ManageKudosPage from '../../pages/ManageKudosPage'; -import SkillCategoriesPage from '../../pages/SkillCategoriesPage'; -import SkillCategoryEditPage from '../../pages/SkillCategoryEditPage'; import FeedbackRequestForExternalRecipientPage from "../../pages/FeedbackRequestForExternalRecipientPage.jsx"; import {AppFeedbackExternalRecipientContext} from "../../context/AppFeedbackExternalRecipientContext.jsx"; @@ -51,162 +8,9 @@ export default function RoutesFeedbackExternalRecipient() { return ( - -
- -
- -
- -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - - - - - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- -
- -
- -
- -
- -
- - - - - - - - - - - - - - - - - - - -
- -
); } From a957972d8bab735e84ae6a505b6cfcba6483821f Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Tue, 12 Nov 2024 12:22:22 -0500 Subject: [PATCH 053/102] 2024-11-12 - remove ext recips from context --- web-ui/src/AppFeedbackExternalRecipient.jsx | 14 +++----------- web-ui/src/context/AppContext.jsx | 2 +- web-ui/src/context/reducer.js | 8 ++------ 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/web-ui/src/AppFeedbackExternalRecipient.jsx b/web-ui/src/AppFeedbackExternalRecipient.jsx index 78fd3bb204..ab6db02799 100644 --- a/web-ui/src/AppFeedbackExternalRecipient.jsx +++ b/web-ui/src/AppFeedbackExternalRecipient.jsx @@ -66,22 +66,14 @@ const theme = extendTheme({ getUserColorScheme(); +const customHistory = createBrowserHistory(); function AppFeedbackExternalRecipient() { return ( - - - -
-
- -
-
-
- -
+ +
diff --git a/web-ui/src/context/AppContext.jsx b/web-ui/src/context/AppContext.jsx index 124c55771e..90d5cf2215 100644 --- a/web-ui/src/context/AppContext.jsx +++ b/web-ui/src/context/AppContext.jsx @@ -14,7 +14,7 @@ import { UPDATE_CERTIFICATIONS, UPDATE_TEAMS, UPDATE_PEOPLE_LOADING, - UPDATE_TEAMS_LOADING, UPDATE_EXTERNAL_RECIPIENTS, UPDATE_EXTERNAL_RECIPIENTS_LOADING + UPDATE_TEAMS_LOADING } from './actions'; import { getCurrentUser, diff --git a/web-ui/src/context/reducer.js b/web-ui/src/context/reducer.js index 006fd1aea8..b137fbbcb7 100644 --- a/web-ui/src/context/reducer.js +++ b/web-ui/src/context/reducer.js @@ -59,6 +59,8 @@ export const initialState = { reviewPeriods: [] }; +// 2024-11-12 - Added then removed for feedback_external_recipients + export const reducer = (state, action) => { switch (action.type) { case MY_PROFILE_UPDATE: @@ -248,12 +250,6 @@ export const reducer = (state, action) => { case UPDATE_REVIEW_PERIODS: state.reviewPeriods = action.payload; break; - case UPDATE_EXTERNAL_RECIPIENTS: - state.feedbackExternalRecipients = action.payload; - break; - case UPDATE_EXTERNAL_RECIPIENTS_LOADING: - state.loading = { ...state.loading, feedbackExternalRecipients: action.payload }; - break; default: } return { ...state }; From b9767f897ad66000fb05a710d0addbace2c7e4da Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Tue, 12 Nov 2024 12:57:58 -0500 Subject: [PATCH 054/102] 2024-11-12 - routes --- web-ui/src/components/routes/Routes.jsx | 4 - .../RoutesFeedbackExternalRecipient.jsx | 4 +- ...eedbackRequestForExternalRecipientPage.jsx | 9 - web-ui/src/pages/FeedbackRequestPage.jsx | 1 - ...FeedbackSubmitPageForExternalRecipient.jsx | 195 ++++++++++++++++++ 5 files changed, 197 insertions(+), 16 deletions(-) delete mode 100644 web-ui/src/pages/FeedbackRequestForExternalRecipientPage.jsx create mode 100644 web-ui/src/pages/FeedbackSubmitPageForExternalRecipient.jsx diff --git a/web-ui/src/components/routes/Routes.jsx b/web-ui/src/components/routes/Routes.jsx index fca6f80376..6f6a10e51d 100644 --- a/web-ui/src/components/routes/Routes.jsx +++ b/web-ui/src/components/routes/Routes.jsx @@ -43,7 +43,6 @@ import KudosPage from '../../pages/KudosPage'; import ManageKudosPage from '../../pages/ManageKudosPage'; import SkillCategoriesPage from '../../pages/SkillCategoriesPage'; import SkillCategoryEditPage from '../../pages/SkillCategoryEditPage'; -import FeedbackRequestForExternalRecipientPage from "../../pages/FeedbackRequestForExternalRecipientPage.jsx"; export default function Routes() { const { state } = useContext(AppContext); @@ -200,9 +199,6 @@ export default function Routes() { - - -
diff --git a/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx b/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx index 592d189b9b..7999e477be 100644 --- a/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx +++ b/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx @@ -1,7 +1,7 @@ import React, { useContext } from 'react'; import { Switch, Route } from 'react-router-dom'; -import FeedbackRequestForExternalRecipientPage from "../../pages/FeedbackRequestForExternalRecipientPage.jsx"; import {AppFeedbackExternalRecipientContext} from "../../context/AppFeedbackExternalRecipientContext.jsx"; +import FeedbackSubmitForExternalRecipientPage from "../../pages/FeedbackSubmitPageForExternalRecipient.jsx"; export default function RoutesFeedbackExternalRecipient() { const { state } = useContext(AppFeedbackExternalRecipientContext); @@ -9,7 +9,7 @@ export default function RoutesFeedbackExternalRecipient() { return ( - + ); diff --git a/web-ui/src/pages/FeedbackRequestForExternalRecipientPage.jsx b/web-ui/src/pages/FeedbackRequestForExternalRecipientPage.jsx deleted file mode 100644 index d0bdcfb816..0000000000 --- a/web-ui/src/pages/FeedbackRequestForExternalRecipientPage.jsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; - -function FeedbackRequestForExternalRecipientPage() { - return ( -

Hello, World! From FeedbackRequestForExternalRecipientPage

- ); -} - -export default FeedbackRequestForExternalRecipientPage; diff --git a/web-ui/src/pages/FeedbackRequestPage.jsx b/web-ui/src/pages/FeedbackRequestPage.jsx index 2ed9dfece3..89d70933c6 100644 --- a/web-ui/src/pages/FeedbackRequestPage.jsx +++ b/web-ui/src/pages/FeedbackRequestPage.jsx @@ -31,7 +31,6 @@ import DateFnsUtils from '@date-io/date-fns'; import { getFeedbackTemplate, softDeleteAdHocTemplates } from '../api/feedbacktemplate'; import './FeedbackRequestPage.css'; -import FeedbackRequestForExternalRecipientPage from "./FeedbackRequestForExternalRecipientPage.jsx"; import FeedbackExternalRecipientSelector from "../components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx"; const dateUtils = new DateFnsUtils(); diff --git a/web-ui/src/pages/FeedbackSubmitPageForExternalRecipient.jsx b/web-ui/src/pages/FeedbackSubmitPageForExternalRecipient.jsx new file mode 100644 index 0000000000..647c2fe520 --- /dev/null +++ b/web-ui/src/pages/FeedbackSubmitPageForExternalRecipient.jsx @@ -0,0 +1,195 @@ +import React, { useContext, useEffect, useRef, useState } from 'react'; +import { styled } from '@mui/material/styles'; +import FeedbackSubmissionTips from '../components/feedback_submission_tips/FeedbackSubmissionTips'; +import FeedbackSubmitForm from '../components/feedback_submit_form/FeedbackSubmitForm'; +import TeamMemberReview from '../components/reviews/TeamMemberReview'; +import { useHistory, useLocation } from 'react-router-dom'; +import { + selectCsrfToken, + selectCurrentUser, + selectProfile +} from '../context/selectors'; +import { AppContext } from '../context/AppContext'; +import { getFeedbackRequestById } from '../api/feedback'; +import Typography from '@mui/material/Typography'; +import { UPDATE_TOAST } from '../context/actions'; +import * as queryString from 'query-string'; + +import './FeedbackRequestPage.css'; + +const PREFIX = 'FeedbackSubmitForExternalRecipientPage'; +const classes = { + announcement: `${PREFIX}-announcement` +}; + +const Root = styled('div')({ + [`& .${classes.announcement}`]: { + textAlign: 'center', + marginTop: '3em', + ['@media (max-width: 800px)']: { + // eslint-disable-line no-useless-computed-key + fontSize: '22px' + } + } +}); + +const FeedbackSubmitForExternalRecipientPage = () => { + const { state } = useContext(AppContext); + const csrf = selectCsrfToken(state); + const currentUserId = selectCurrentUser(state)?.id; + const location = useLocation(); + const history = useHistory(); + const query = queryString.parse(location?.search); + const tabs = query.tabs?.toString(); + const requestQuery = query.request?.toString(); + const selfRequestQuery = query.selfrequest?.toString(); + const [showTips, setShowTips] = useState(true); + const [feedbackRequest, setFeedbackRequest] = useState(null); + const [selfReviewRequest, setSelfReviewRequest] = useState(null); + const [requestee, setRequestee] = useState(null); + const [recipient, setRecipient] = useState(null); + const [requestSubmitted, setRequestSubmitted] = useState(false); + const [requestCanceled, setRequestCanceled] = useState(false); + const feedbackRequestFetched = useRef(false); + + function isManager(revieweeProfile) { + const supervisorId = revieweeProfile?.supervisorid; + return supervisorId === currentUserId; + } + + useEffect(() => { + if (!requestQuery && !selfRequestQuery) { + history.push('/checkins'); + window.snackDispatch({ + type: UPDATE_TOAST, + payload: { + severity: 'error', + toast: 'No request present' + } + }); + } + + async function getFeedbackRequest(query, cookie) { + if (!currentUserId || !cookie || feedbackRequestFetched.current) { + return null; + } + + // make call to the API + let res = await getFeedbackRequestById(query, cookie); + return res.payload && + res.payload.data && + res.payload.status === 200 && + !res.error + ? res.payload.data + : null; + } + + if (csrf && currentUserId && requestQuery && !feedbackRequestFetched.current) { + getFeedbackRequest(requestQuery, csrf).then(request => { + if (request) { + // Permission to view this feedback request will be checked later. + if ( + request.status.toLowerCase() === 'submitted' || + request.submitDate + ) { + setRequestSubmitted(true); + setFeedbackRequest(request); + } else if (request.status.toLowerCase() === 'canceled') { + setRequestCanceled(true); + } else { + setFeedbackRequest(request); + } + } else { + history.push('/checkins'); + window.snackDispatch({ + type: UPDATE_TOAST, + payload: { + severity: 'error', + toast: "Can't find feedback request with that ID" + } + }); + } + }); + } + + if (csrf && currentUserId && selfRequestQuery) { + getFeedbackRequest(selfRequestQuery, csrf).then(request => { + if (request) { + setSelfReviewRequest(request); + } + }); + } + }, [csrf, currentUserId, requestQuery, history]); + + useEffect(() => { + if (feedbackRequest) { + feedbackRequestFetched.current = true; + } + + if (feedbackRequestFetched.current) { + const requesteeProfile = selectProfile( + state, + feedbackRequest?.requesteeId + ); + setRequestee(requesteeProfile); + + const recipientProfile = selectProfile( + state, + feedbackRequest?.recipientId + ); + + // If this is our review or we are the manager of the reviewer we are + // allowed to view this review. + if (recipientProfile?.id != currentUserId && + !isManager(recipientProfile)) { + // The current user is not the recipients's manager, we need to leave. + history.push('/checkins'); + window.snackDispatch({ + type: UPDATE_TOAST, + payload: { + severity: 'error', + toast: 'You are not authorized to perform this operation.' + } + }); + } + } + + if (selfReviewRequest) { + const recipientProfile = selectProfile( + state, + selfReviewRequest?.recipientId + ); + setRecipient(recipientProfile); + } + }, [feedbackRequest, selfReviewRequest, state]); + + return ( + + {requestCanceled ? ( + + This feedback request has been canceled. + + ) : tabs || requestSubmitted || selfReviewRequest ? ( + + ) : ( + <> + {feedbackRequest && + (showTips ? ( + setShowTips(false)} /> + ) : ( + + ))} + + )} + + ); +}; +export default FeedbackSubmitForExternalRecipientPage; From 8571eca7e9c09192ee27e1f18eabf6cc0830b61a Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Tue, 12 Nov 2024 18:42:49 -0500 Subject: [PATCH 055/102] 2024-11-12 - routes --- .../src/api/apiFeedbackExternalRecipient.js | 113 ++++++++++++ web-ui/src/api/feedbackExternalRecipients.js | 17 ++ .../AppFeedbackExternalRecipientContext.jsx | 52 +++++- .../actionsFeedbackExternalRecipient.js | 3 + .../reducerFeedbackExternalRecilpients.js | 27 +++ .../selectorsFeedbackExternalRecipient.js | 4 + ...FeedbackSubmitPageForExternalRecipient.jsx | 173 ++---------------- 7 files changed, 234 insertions(+), 155 deletions(-) create mode 100644 web-ui/src/api/apiFeedbackExternalRecipient.js create mode 100644 web-ui/src/api/feedbackExternalRecipients.js create mode 100644 web-ui/src/context/actionsFeedbackExternalRecipient.js create mode 100644 web-ui/src/context/reducerFeedbackExternalRecilpients.js create mode 100644 web-ui/src/context/selectorsFeedbackExternalRecipient.js diff --git a/web-ui/src/api/apiFeedbackExternalRecipient.js b/web-ui/src/api/apiFeedbackExternalRecipient.js new file mode 100644 index 0000000000..f3838944e2 --- /dev/null +++ b/web-ui/src/api/apiFeedbackExternalRecipient.js @@ -0,0 +1,113 @@ +import { UPDATE_TOAST } from '../context/actionsFeedbackExternalRecipient.js'; +import qs from 'qs'; + +export const BASE_API_URL = import.meta.env.VITE_APP_API_URL + ? import.meta.env.VITE_APP_API_URL + : 'http://localhost:8080'; + +export const getAvatarURL = email => + BASE_API_URL + + '/services/member-profiles/member-photos/' + + encodeURIComponent(email); + +function fetchAbsolute(fetch) { + return baseUrl => (url, otherParams) => + url.startsWith('/') + ? fetch(baseUrl + url, { credentials: 'include', ...otherParams }) + : fetch(url, { credentials: 'include', ...otherParams }); +} + +let myFetch = null; + +export const getMyFetch = async () => { + if (!myFetch) { + myFetch = fetchAbsolute(fetch)(BASE_API_URL); + + /* + I'm not sure this was working before, but we need to figure out an approach for fetch. I will + open an issue for this. + + myAxios.interceptors.response.use( + // Any status code that lie within the range of 2xx cause this function to trigger + (res) => { + return res; + }, + // Any status codes that falls outside the range of 2xx cause this function to trigger + (err) => { + if (err.response.status !== 401) { + return Promise.reject(err); + } + + // trade in refresh token for access token + return axios.get('/oauth/access_token', { + baseURL: BASE_API_URL, + withCredentials: true, + timeout: 30000 + }) + .then(() => { + // retry original request + return myAxios(err.config); + }) + .catch(() => { + return Promise.reject(err); + }) + } + ); + */ + } + return myFetch; +}; + +export const resolve = async payload => { + let { url } = payload; + const { params = null, data = null, ...rest } = payload; + const myFetch = await getMyFetch(); + + // Convert params to fetch style... + params && (url = `${url}?` + qs.stringify(params, { arrayFormat: 'repeat' })); + + // Convert data to body... + data && (rest.body = JSON.stringify(data)); + + const promise = myFetch(url, rest); + const resolved = { + payload: null, + error: null + }; + + resolved.payload = await promise; + + if (!resolved.payload.ok) { + try { + resolved.error = await resolved.payload.json(); + } catch (error) { + resolved.error = resolved.payload.statusText; + console.error(error); + } + + if (window.snackDispatch) { + window.snackDispatch({ + type: UPDATE_TOAST, + payload: { + severity: 'error', + toast: resolved?.error + } + }); + } + } else { + const contentType = resolved.payload.headers.get('Content-Type'); + const contentLength = resolved.payload.headers.get('Content-Length'); + if (contentType && contentType.indexOf('text/csv') !== -1) { + resolved.payload.data = await resolved.payload.blob(); + } else if (contentLength && contentLength > 0) { + if (contentType && contentType.indexOf('application/json') !== -1) { + resolved.payload.data = await resolved.payload.json(); + } else { + resolved.payload.data = await resolved.payload.text(); + } + } else { + resolved.payload.data = null; + } + } + return resolved; +}; diff --git a/web-ui/src/api/feedbackExternalRecipients.js b/web-ui/src/api/feedbackExternalRecipients.js new file mode 100644 index 0000000000..49fe8ce0fa --- /dev/null +++ b/web-ui/src/api/feedbackExternalRecipients.js @@ -0,0 +1,17 @@ +import { resolve } from './apiFeedbackExternalRecipient.js'; + +const feedbackExternalRecipientsURL = '/services/feedback/requests/external/recipients'; + +export const getFeedbackRequest = async (cookie, id) => { + return resolve({ + url: `${feedbackExternalRecipientsURL}/${id}`, + headers: { 'X-CSRF-Header': cookie, Accept: 'application/json' } + }); +}; + +export const getFeedbackRequestNoCookie = async (id) => { + return resolve({ + url: `${feedbackExternalRecipientsURL}/${id}`, + headers: { Accept: 'application/json' } + }); +}; diff --git a/web-ui/src/context/AppFeedbackExternalRecipientContext.jsx b/web-ui/src/context/AppFeedbackExternalRecipientContext.jsx index a151995bbd..bea4c2b8c2 100644 --- a/web-ui/src/context/AppFeedbackExternalRecipientContext.jsx +++ b/web-ui/src/context/AppFeedbackExternalRecipientContext.jsx @@ -1,14 +1,62 @@ import React, { useEffect, useReducer, useMemo } from 'react'; -import { reducer, initialState } from './reducer'; +import {reducerFeedbackExternalRecipient, initialState} from "./reducerFeedbackExternalRecilpients.js"; +import {BASE_API_URL} from "../api/apiFeedbackExternalRecipient.js"; +import {SET_CSRF} from "./actionsFeedbackExternalRecipient.js"; const AppFeedbackExternalRecipientContext = React.createContext(); +function getSessionCookieValue(name) { + const cookies = document?.cookie?.split(';'); + for (let i = 0; i < cookies.length; i++) { + const cookie = cookies[i].trim(); + if (cookie.startsWith(name + '=')) { + return decodeURIComponent(cookie.substring(name.length + 1)); + } + } + return null; +} + const AppFeedbackExternalRecipientContextProvider = props => { + console.log("AppFeedbackExternalRecipientContextProvider props: ", props); const [state, dispatch] = useReducer( - reducer, + reducerFeedbackExternalRecipient, props?.value?.state || initialState ); + const { + csrf, + } = state; + const url = `${BASE_API_URL}/csrf/cookie`; + + useEffect(() => { + + console.log("AppFeedbackExternalRecipientContextProvider useEffect, csrf"); + + const getCsrf = async () => { + if (!csrf) { + const payload = getSessionCookieValue('_csrf'); + if (payload) { + dispatch({ type: SET_CSRF, payload }); + } else { + const res = await fetch(url, { + responseType: 'text', + credentials: 'include' + }); + if (res && res.ok) { + dispatch({ type: SET_CSRF, payload: await res.text() }); + } + } + } + }; + getCsrf(); + }, [csrf]); + + const value = useMemo(() => { + console.log("AppFeedbackExternalRecipientContextProvider useMemo, state: ", state); + console.log("AppFeedbackExternalRecipientContextProvider useMemo, dispatch: ", dispatch); + return { state, dispatch }; + }, [state]); + return ( {props.children} diff --git a/web-ui/src/context/actionsFeedbackExternalRecipient.js b/web-ui/src/context/actionsFeedbackExternalRecipient.js new file mode 100644 index 0000000000..db09adeec4 --- /dev/null +++ b/web-ui/src/context/actionsFeedbackExternalRecipient.js @@ -0,0 +1,3 @@ +export const SET_CSRF = '@@check-ins/update_csrf'; +export const UPDATE_TOAST = '@@check-ins/update_toast'; + diff --git a/web-ui/src/context/reducerFeedbackExternalRecilpients.js b/web-ui/src/context/reducerFeedbackExternalRecilpients.js new file mode 100644 index 0000000000..87161cbbf7 --- /dev/null +++ b/web-ui/src/context/reducerFeedbackExternalRecilpients.js @@ -0,0 +1,27 @@ +import { + SET_CSRF, + UPDATE_TOAST, + +} from './actionsFeedbackExternalRecipient.js'; + +export const initialState = { + csrf: undefined, + index: 0, + toast: { + severity: '', + toast: '' + }, +}; + +export const reducerFeedbackExternalRecipient = (state, action) => { + switch (action.type) { + case SET_CSRF: + state.csrf = action.payload; + break; + case UPDATE_TOAST: + state.toast = action.payload; + break; + default: + } + return { ...state }; +}; diff --git a/web-ui/src/context/selectorsFeedbackExternalRecipient.js b/web-ui/src/context/selectorsFeedbackExternalRecipient.js new file mode 100644 index 0000000000..f332cf77a6 --- /dev/null +++ b/web-ui/src/context/selectorsFeedbackExternalRecipient.js @@ -0,0 +1,4 @@ +import { createSelector } from 'reselect'; + +export const selectCsrfToken = state => state.csrf; +export const noPermission = 'You do not have permission to view this page.'; diff --git a/web-ui/src/pages/FeedbackSubmitPageForExternalRecipient.jsx b/web-ui/src/pages/FeedbackSubmitPageForExternalRecipient.jsx index 647c2fe520..eab173eeeb 100644 --- a/web-ui/src/pages/FeedbackSubmitPageForExternalRecipient.jsx +++ b/web-ui/src/pages/FeedbackSubmitPageForExternalRecipient.jsx @@ -8,9 +8,11 @@ import { selectCsrfToken, selectCurrentUser, selectProfile -} from '../context/selectors'; +} from '../context/selectorsFeedbackExternalRecipient.js'; import { AppContext } from '../context/AppContext'; -import { getFeedbackRequestById } from '../api/feedback'; +import { AppFeedbackExternalRecipientContext } from "../context/AppFeedbackExternalRecipientContext.jsx"; +import { getFeedbackRequestById, getExternalRecipients } from '../api/feedback'; +import { getFeedbackRequestNoCookie } from '../api/feedbackExternalRecipients'; import Typography from '@mui/material/Typography'; import { UPDATE_TOAST } from '../context/actions'; import * as queryString from 'query-string'; @@ -34,162 +36,27 @@ const Root = styled('div')({ }); const FeedbackSubmitForExternalRecipientPage = () => { - const { state } = useContext(AppContext); - const csrf = selectCsrfToken(state); - const currentUserId = selectCurrentUser(state)?.id; - const location = useLocation(); - const history = useHistory(); - const query = queryString.parse(location?.search); - const tabs = query.tabs?.toString(); - const requestQuery = query.request?.toString(); - const selfRequestQuery = query.selfrequest?.toString(); - const [showTips, setShowTips] = useState(true); - const [feedbackRequest, setFeedbackRequest] = useState(null); - const [selfReviewRequest, setSelfReviewRequest] = useState(null); - const [requestee, setRequestee] = useState(null); - const [recipient, setRecipient] = useState(null); - const [requestSubmitted, setRequestSubmitted] = useState(false); - const [requestCanceled, setRequestCanceled] = useState(false); - const feedbackRequestFetched = useRef(false); - - function isManager(revieweeProfile) { - const supervisorId = revieweeProfile?.supervisorid; - return supervisorId === currentUserId; - } + const { state, dispatch } = useContext(AppFeedbackExternalRecipientContext); + //const csrfToken = selectCsrfToken(state); useEffect(() => { - if (!requestQuery && !selfRequestQuery) { - history.push('/checkins'); - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'No request present' - } - }); - } - - async function getFeedbackRequest(query, cookie) { - if (!currentUserId || !cookie || feedbackRequestFetched.current) { - return null; + const fetchData = async () => { + try { + const response = await getFeedbackRequestNoCookie('93e72102-62f8-449d-a9ef-7c1ffae9a098'); + console.log("FeedbackSubmitPageForExternalRecipient, useEffect, response: ", response.payload.data); + } catch (error) { + console.error("FeedbackSubmitPageForExternalRecipient, useEffect, error: ", error); } - - // make call to the API - let res = await getFeedbackRequestById(query, cookie); - return res.payload && - res.payload.data && - res.payload.status === 200 && - !res.error - ? res.payload.data - : null; - } - - if (csrf && currentUserId && requestQuery && !feedbackRequestFetched.current) { - getFeedbackRequest(requestQuery, csrf).then(request => { - if (request) { - // Permission to view this feedback request will be checked later. - if ( - request.status.toLowerCase() === 'submitted' || - request.submitDate - ) { - setRequestSubmitted(true); - setFeedbackRequest(request); - } else if (request.status.toLowerCase() === 'canceled') { - setRequestCanceled(true); - } else { - setFeedbackRequest(request); - } - } else { - history.push('/checkins'); - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: "Can't find feedback request with that ID" - } - }); - } - }); - } - - if (csrf && currentUserId && selfRequestQuery) { - getFeedbackRequest(selfRequestQuery, csrf).then(request => { - if (request) { - setSelfReviewRequest(request); - } - }); - } - }, [csrf, currentUserId, requestQuery, history]); - - useEffect(() => { - if (feedbackRequest) { - feedbackRequestFetched.current = true; - } - - if (feedbackRequestFetched.current) { - const requesteeProfile = selectProfile( - state, - feedbackRequest?.requesteeId - ); - setRequestee(requesteeProfile); - - const recipientProfile = selectProfile( - state, - feedbackRequest?.recipientId - ); - - // If this is our review or we are the manager of the reviewer we are - // allowed to view this review. - if (recipientProfile?.id != currentUserId && - !isManager(recipientProfile)) { - // The current user is not the recipients's manager, we need to leave. - history.push('/checkins'); - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'You are not authorized to perform this operation.' - } - }); - } - } - - if (selfReviewRequest) { - const recipientProfile = selectProfile( - state, - selfReviewRequest?.recipientId - ); - setRecipient(recipientProfile); - } - }, [feedbackRequest, selfReviewRequest, state]); + }; + fetchData(); + }, []) + ; return ( - - {requestCanceled ? ( - - This feedback request has been canceled. - - ) : tabs || requestSubmitted || selfReviewRequest ? ( - - ) : ( - <> - {feedbackRequest && - (showTips ? ( - setShowTips(false)} /> - ) : ( - - ))} - - )} - + +

6:28pm ET

+
); }; + export default FeedbackSubmitForExternalRecipientPage; From d57b5e5b9e89dda48c458fd8384ece4f53b21047 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Wed, 13 Nov 2024 11:41:19 -0500 Subject: [PATCH 056/102] 2024-11-13 - routes --- web-ui/src/context/actionsFeedbackExternalRecipient.js | 1 - 1 file changed, 1 deletion(-) diff --git a/web-ui/src/context/actionsFeedbackExternalRecipient.js b/web-ui/src/context/actionsFeedbackExternalRecipient.js index db09adeec4..df5cbb0b1a 100644 --- a/web-ui/src/context/actionsFeedbackExternalRecipient.js +++ b/web-ui/src/context/actionsFeedbackExternalRecipient.js @@ -1,3 +1,2 @@ export const SET_CSRF = '@@check-ins/update_csrf'; export const UPDATE_TOAST = '@@check-ins/update_toast'; - From b30e3380bed0f7f6756c976b0123cd6a64418aee Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Wed, 13 Nov 2024 11:41:37 -0500 Subject: [PATCH 057/102] 2024-11-13 - routes --- web-ui/src/context/reducerFeedbackExternalRecilpients.js | 1 - 1 file changed, 1 deletion(-) diff --git a/web-ui/src/context/reducerFeedbackExternalRecilpients.js b/web-ui/src/context/reducerFeedbackExternalRecilpients.js index 87161cbbf7..cffd4853c6 100644 --- a/web-ui/src/context/reducerFeedbackExternalRecilpients.js +++ b/web-ui/src/context/reducerFeedbackExternalRecilpients.js @@ -1,7 +1,6 @@ import { SET_CSRF, UPDATE_TOAST, - } from './actionsFeedbackExternalRecipient.js'; export const initialState = { From 96e498cd18eb308f307760827287377e5616504b Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Wed, 13 Nov 2024 14:45:56 -0500 Subject: [PATCH 058/102] 2024-11-13 - removed new index & related pages --- .../HomeExternalRecipientController.java | 2 +- ...ackRequestExternalRecipientController.java | 8 +- server/src/main/resources/application.yml | 5 + web-ui/index_external_recipient.html | 44 ------- web-ui/src/AppFeedbackExternalRecipient.css | 46 ------- web-ui/src/AppFeedbackExternalRecipient.jsx | 83 ------------- .../src/api/apiFeedbackExternalRecipient.js | 113 ------------------ web-ui/src/api/feedbackExternalRecipients.js | 17 --- .../RoutesFeedbackExternalRecipient.jsx | 16 --- web-ui/src/context/AppContext.jsx | 8 +- .../AppFeedbackExternalRecipientContext.jsx | 67 ----------- .../actionsFeedbackExternalRecipient.js | 2 - .../reducerFeedbackExternalRecilpients.js | 26 ---- .../selectorsFeedbackExternalRecipient.js | 4 - .../src/index_feedback_external_recipient.css | 13 -- .../src/index_feedback_external_recipient.jsx | 20 ---- ...FeedbackSubmitPageForExternalRecipient.jsx | 62 ---------- web-ui/vite.config.ts | 8 -- 18 files changed, 12 insertions(+), 532 deletions(-) delete mode 100644 web-ui/index_external_recipient.html delete mode 100644 web-ui/src/AppFeedbackExternalRecipient.css delete mode 100644 web-ui/src/AppFeedbackExternalRecipient.jsx delete mode 100644 web-ui/src/api/apiFeedbackExternalRecipient.js delete mode 100644 web-ui/src/api/feedbackExternalRecipients.js delete mode 100644 web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx delete mode 100644 web-ui/src/context/AppFeedbackExternalRecipientContext.jsx delete mode 100644 web-ui/src/context/actionsFeedbackExternalRecipient.js delete mode 100644 web-ui/src/context/reducerFeedbackExternalRecilpients.js delete mode 100644 web-ui/src/context/selectorsFeedbackExternalRecipient.js delete mode 100644 web-ui/src/index_feedback_external_recipient.css delete mode 100644 web-ui/src/index_feedback_external_recipient.jsx delete mode 100644 web-ui/src/pages/FeedbackSubmitPageForExternalRecipient.jsx diff --git a/server/src/main/java/com/objectcomputing/checkins/security/HomeExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/security/HomeExternalRecipientController.java index 1b4ebe79d7..0b2b2a4e77 100644 --- a/server/src/main/java/com/objectcomputing/checkins/security/HomeExternalRecipientController.java +++ b/server/src/main/java/com/objectcomputing/checkins/security/HomeExternalRecipientController.java @@ -33,7 +33,7 @@ public HomeExternalRecipientController(Environment environment) { @Get("/feedbackExternalRecipient/{path:.+}") public Optional forward(String path) { LOG.info("HomeExternalRecipientController, forward, path: " + path); - return environment.getResource("public/index_external_recipient.html").map(StreamedFile::new); + return environment.getResource("public-external-feedback/index_external_recipient.html").map(StreamedFile::new); } } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java index 421ab9f5c1..9d1e882020 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java @@ -83,10 +83,10 @@ public String hello() { return "

Hello, World!

"; } - @Get("/submitForExternalRecipient") - public HttpResponse redirectToReactPage() { - LOG.info("FeedbackRequestExternalRecipientController, redirectToReactPage"); - return HttpResponse.redirect(URI.create("/feedback/submitForExternalRecipient")); + @Get("/submitForExternalRecipient/{id}") + public HttpResponse redirectToReactPage(UUID id) { + LOG.info("FeedbackRequestExternalRecipientController, redirectToReactPage, id: {}", id); + return HttpResponse.redirect(URI.create("/feedback/submitForExternalRecipient?id=" + id)); } /** diff --git a/server/src/main/resources/application.yml b/server/src/main/resources/application.yml index fd8c2ea7f9..5622d4f201 100755 --- a/server/src/main/resources/application.yml +++ b/server/src/main/resources/application.yml @@ -24,6 +24,11 @@ micronaut: swagger-ui: paths: classpath:META-INF/swagger/views/swagger-ui mapping: /swagger-ui/** + externalFeedback: + enabled: true + mapping: "/externalFeedback/**" + paths: + - "classpath:public-external-feedback" default: enabled: true mapping: "/**" diff --git a/web-ui/index_external_recipient.html b/web-ui/index_external_recipient.html deleted file mode 100644 index 15a089a938..0000000000 --- a/web-ui/index_external_recipient.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - External Recipient - - - -
- - - - diff --git a/web-ui/src/AppFeedbackExternalRecipient.css b/web-ui/src/AppFeedbackExternalRecipient.css deleted file mode 100644 index eab0f94582..0000000000 --- a/web-ui/src/AppFeedbackExternalRecipient.css +++ /dev/null @@ -1,46 +0,0 @@ -@import 'styles/variables.css'; - -.AppFeedbackExternalRecipient { - display: flex; - flex-direction: column; - justify-content: center; - - a, - a:visited { - color: var(--checkins-palette-primary-link); - } - - a:hover { - color: var(--checkins-palette-primary-link-hover); - } -} - -@media (min-width: 600px) { - .App { - margin-top: 65px; - padding-left: var(--nav-width); - } -} - -@media print { - :root { - --nav-width: 0px; - } - - .App { - padding-left: 0; - } -} - -.App-header { - align-items: center; - display: flex; - flex-direction: column; - font-size: calc(10px + 2vmin); - justify-content: center; - min-height: 100vh; -} - -textarea { - resize: none; -} diff --git a/web-ui/src/AppFeedbackExternalRecipient.jsx b/web-ui/src/AppFeedbackExternalRecipient.jsx deleted file mode 100644 index ab6db02799..0000000000 --- a/web-ui/src/AppFeedbackExternalRecipient.jsx +++ /dev/null @@ -1,83 +0,0 @@ -import React from 'react'; -import { Router } from 'react-router-dom'; -import { ErrorBoundary } from 'react-error-boundary'; -import { createBrowserHistory } from 'history'; - -import RoutesFeedbackExternalRecipient from './components/routes/RoutesFeedbackExternalRecipient'; -import ErrorFallback from './pages/ErrorBoundaryPage'; -import SnackBarWithContext from './components/snackbar/SnackBarWithContext'; -import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; -import { LocalizationProvider } from '@mui/x-date-pickers'; -import { DarkMode, LightMode } from '@mui/icons-material'; - -import { - useColorScheme, - experimental_extendTheme as extendTheme, - Experimental_CssVarsProvider as CssVarsProvider -} from '@mui/material/styles'; - -import './AppFeedbackExternalRecipient.css'; -import {AppFeedbackExternalRecipientContextProvider} from "./context/AppFeedbackExternalRecipientContext.jsx"; - -function getUserColorScheme() { - if (window?.matchMedia('(prefers-color-scheme: dark)').matches) { - return 'dark'; - } else if (window?.matchMedia('(prefers-color-scheme: light)').matches) { - return 'light'; - } else { - return 'light'; - } -} - - -const theme = extendTheme({ - cssVarPrefix: 'checkins', - colorSchemes: { - light: { - palette: { - secondary: { - main: '#76c8d4' - } - } - }, - dark: { - palette: { - secondary: { - main: '#76c8d4' - } - } - } - }, - components: { - MuiCssBaseline: { - styleOverrides: { - secondary: { - main: '#f8b576' - }, - body: { - fontSize: '0.875rem', - lineHeight: 1.43, - letterSpacing: '0.01071rem' - } - } - } - } -}); - - -getUserColorScheme(); -const customHistory = createBrowserHistory(); - -function AppFeedbackExternalRecipient() { - return ( - - - - - - - - ); -} - -export default AppFeedbackExternalRecipient; diff --git a/web-ui/src/api/apiFeedbackExternalRecipient.js b/web-ui/src/api/apiFeedbackExternalRecipient.js deleted file mode 100644 index f3838944e2..0000000000 --- a/web-ui/src/api/apiFeedbackExternalRecipient.js +++ /dev/null @@ -1,113 +0,0 @@ -import { UPDATE_TOAST } from '../context/actionsFeedbackExternalRecipient.js'; -import qs from 'qs'; - -export const BASE_API_URL = import.meta.env.VITE_APP_API_URL - ? import.meta.env.VITE_APP_API_URL - : 'http://localhost:8080'; - -export const getAvatarURL = email => - BASE_API_URL + - '/services/member-profiles/member-photos/' + - encodeURIComponent(email); - -function fetchAbsolute(fetch) { - return baseUrl => (url, otherParams) => - url.startsWith('/') - ? fetch(baseUrl + url, { credentials: 'include', ...otherParams }) - : fetch(url, { credentials: 'include', ...otherParams }); -} - -let myFetch = null; - -export const getMyFetch = async () => { - if (!myFetch) { - myFetch = fetchAbsolute(fetch)(BASE_API_URL); - - /* - I'm not sure this was working before, but we need to figure out an approach for fetch. I will - open an issue for this. - - myAxios.interceptors.response.use( - // Any status code that lie within the range of 2xx cause this function to trigger - (res) => { - return res; - }, - // Any status codes that falls outside the range of 2xx cause this function to trigger - (err) => { - if (err.response.status !== 401) { - return Promise.reject(err); - } - - // trade in refresh token for access token - return axios.get('/oauth/access_token', { - baseURL: BASE_API_URL, - withCredentials: true, - timeout: 30000 - }) - .then(() => { - // retry original request - return myAxios(err.config); - }) - .catch(() => { - return Promise.reject(err); - }) - } - ); - */ - } - return myFetch; -}; - -export const resolve = async payload => { - let { url } = payload; - const { params = null, data = null, ...rest } = payload; - const myFetch = await getMyFetch(); - - // Convert params to fetch style... - params && (url = `${url}?` + qs.stringify(params, { arrayFormat: 'repeat' })); - - // Convert data to body... - data && (rest.body = JSON.stringify(data)); - - const promise = myFetch(url, rest); - const resolved = { - payload: null, - error: null - }; - - resolved.payload = await promise; - - if (!resolved.payload.ok) { - try { - resolved.error = await resolved.payload.json(); - } catch (error) { - resolved.error = resolved.payload.statusText; - console.error(error); - } - - if (window.snackDispatch) { - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: resolved?.error - } - }); - } - } else { - const contentType = resolved.payload.headers.get('Content-Type'); - const contentLength = resolved.payload.headers.get('Content-Length'); - if (contentType && contentType.indexOf('text/csv') !== -1) { - resolved.payload.data = await resolved.payload.blob(); - } else if (contentLength && contentLength > 0) { - if (contentType && contentType.indexOf('application/json') !== -1) { - resolved.payload.data = await resolved.payload.json(); - } else { - resolved.payload.data = await resolved.payload.text(); - } - } else { - resolved.payload.data = null; - } - } - return resolved; -}; diff --git a/web-ui/src/api/feedbackExternalRecipients.js b/web-ui/src/api/feedbackExternalRecipients.js deleted file mode 100644 index 49fe8ce0fa..0000000000 --- a/web-ui/src/api/feedbackExternalRecipients.js +++ /dev/null @@ -1,17 +0,0 @@ -import { resolve } from './apiFeedbackExternalRecipient.js'; - -const feedbackExternalRecipientsURL = '/services/feedback/requests/external/recipients'; - -export const getFeedbackRequest = async (cookie, id) => { - return resolve({ - url: `${feedbackExternalRecipientsURL}/${id}`, - headers: { 'X-CSRF-Header': cookie, Accept: 'application/json' } - }); -}; - -export const getFeedbackRequestNoCookie = async (id) => { - return resolve({ - url: `${feedbackExternalRecipientsURL}/${id}`, - headers: { Accept: 'application/json' } - }); -}; diff --git a/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx b/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx deleted file mode 100644 index 7999e477be..0000000000 --- a/web-ui/src/components/routes/RoutesFeedbackExternalRecipient.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import React, { useContext } from 'react'; -import { Switch, Route } from 'react-router-dom'; -import {AppFeedbackExternalRecipientContext} from "../../context/AppFeedbackExternalRecipientContext.jsx"; -import FeedbackSubmitForExternalRecipientPage from "../../pages/FeedbackSubmitPageForExternalRecipient.jsx"; - -export default function RoutesFeedbackExternalRecipient() { - const { state } = useContext(AppFeedbackExternalRecipientContext); - - return ( - - - - - - ); -} diff --git a/web-ui/src/context/AppContext.jsx b/web-ui/src/context/AppContext.jsx index 90d5cf2215..bd08fc7dc2 100644 --- a/web-ui/src/context/AppContext.jsx +++ b/web-ui/src/context/AppContext.jsx @@ -31,7 +31,6 @@ import { getAllGuilds } from '../api/guild'; import { getSkills } from '../api/skill'; import { getAllTeams } from '../api/team'; import {getCertifications} from "../api/certification.js"; -import { getExternalRecipients } from '../api/feedback.js'; const AppContext = React.createContext(); @@ -162,9 +161,7 @@ const AppContextProvider = props => { if (csrf && !memberSkills) { getAllMemberSkills(); } - } - , [csrf, memberSkills]) - ; + }, [csrf, memberSkills]); useEffect(() => { async function getMemberProfiles() { @@ -197,8 +194,7 @@ const AppContextProvider = props => { getTerminatedMembers(); } } - } - , [csrf, userProfile, memberProfiles]); + }, [csrf, userProfile, memberProfiles]); useEffect(() => { function getAllTheCheckins() { diff --git a/web-ui/src/context/AppFeedbackExternalRecipientContext.jsx b/web-ui/src/context/AppFeedbackExternalRecipientContext.jsx deleted file mode 100644 index bea4c2b8c2..0000000000 --- a/web-ui/src/context/AppFeedbackExternalRecipientContext.jsx +++ /dev/null @@ -1,67 +0,0 @@ -import React, { useEffect, useReducer, useMemo } from 'react'; -import {reducerFeedbackExternalRecipient, initialState} from "./reducerFeedbackExternalRecilpients.js"; -import {BASE_API_URL} from "../api/apiFeedbackExternalRecipient.js"; -import {SET_CSRF} from "./actionsFeedbackExternalRecipient.js"; - -const AppFeedbackExternalRecipientContext = React.createContext(); - -function getSessionCookieValue(name) { - const cookies = document?.cookie?.split(';'); - for (let i = 0; i < cookies.length; i++) { - const cookie = cookies[i].trim(); - if (cookie.startsWith(name + '=')) { - return decodeURIComponent(cookie.substring(name.length + 1)); - } - } - return null; -} - -const AppFeedbackExternalRecipientContextProvider = props => { - console.log("AppFeedbackExternalRecipientContextProvider props: ", props); - const [state, dispatch] = useReducer( - reducerFeedbackExternalRecipient, - props?.value?.state || initialState - ); - - const { - csrf, - } = state; - const url = `${BASE_API_URL}/csrf/cookie`; - - useEffect(() => { - - console.log("AppFeedbackExternalRecipientContextProvider useEffect, csrf"); - - const getCsrf = async () => { - if (!csrf) { - const payload = getSessionCookieValue('_csrf'); - if (payload) { - dispatch({ type: SET_CSRF, payload }); - } else { - const res = await fetch(url, { - responseType: 'text', - credentials: 'include' - }); - if (res && res.ok) { - dispatch({ type: SET_CSRF, payload: await res.text() }); - } - } - } - }; - getCsrf(); - }, [csrf]); - - const value = useMemo(() => { - console.log("AppFeedbackExternalRecipientContextProvider useMemo, state: ", state); - console.log("AppFeedbackExternalRecipientContextProvider useMemo, dispatch: ", dispatch); - return { state, dispatch }; - }, [state]); - - return ( - - {props.children} - - ); -}; - -export { AppFeedbackExternalRecipientContext, AppFeedbackExternalRecipientContextProvider }; diff --git a/web-ui/src/context/actionsFeedbackExternalRecipient.js b/web-ui/src/context/actionsFeedbackExternalRecipient.js deleted file mode 100644 index df5cbb0b1a..0000000000 --- a/web-ui/src/context/actionsFeedbackExternalRecipient.js +++ /dev/null @@ -1,2 +0,0 @@ -export const SET_CSRF = '@@check-ins/update_csrf'; -export const UPDATE_TOAST = '@@check-ins/update_toast'; diff --git a/web-ui/src/context/reducerFeedbackExternalRecilpients.js b/web-ui/src/context/reducerFeedbackExternalRecilpients.js deleted file mode 100644 index cffd4853c6..0000000000 --- a/web-ui/src/context/reducerFeedbackExternalRecilpients.js +++ /dev/null @@ -1,26 +0,0 @@ -import { - SET_CSRF, - UPDATE_TOAST, -} from './actionsFeedbackExternalRecipient.js'; - -export const initialState = { - csrf: undefined, - index: 0, - toast: { - severity: '', - toast: '' - }, -}; - -export const reducerFeedbackExternalRecipient = (state, action) => { - switch (action.type) { - case SET_CSRF: - state.csrf = action.payload; - break; - case UPDATE_TOAST: - state.toast = action.payload; - break; - default: - } - return { ...state }; -}; diff --git a/web-ui/src/context/selectorsFeedbackExternalRecipient.js b/web-ui/src/context/selectorsFeedbackExternalRecipient.js deleted file mode 100644 index f332cf77a6..0000000000 --- a/web-ui/src/context/selectorsFeedbackExternalRecipient.js +++ /dev/null @@ -1,4 +0,0 @@ -import { createSelector } from 'reselect'; - -export const selectCsrfToken = state => state.csrf; -export const noPermission = 'You do not have permission to view this page.'; diff --git a/web-ui/src/index_feedback_external_recipient.css b/web-ui/src/index_feedback_external_recipient.css deleted file mode 100644 index ec2585e8c0..0000000000 --- a/web-ui/src/index_feedback_external_recipient.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} diff --git a/web-ui/src/index_feedback_external_recipient.jsx b/web-ui/src/index_feedback_external_recipient.jsx deleted file mode 100644 index 597762eb0f..0000000000 --- a/web-ui/src/index_feedback_external_recipient.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import { createRoot } from 'react-dom/client'; -import CssBaseline from '@mui/material/CssBaseline'; -import './index.css'; -import * as serviceWorker from './serviceWorker'; -import AppFeedbackExternalRecipient from "./AppFeedbackExternalRecipient.jsx"; - -const container = document.getElementById('root'); -const root = createRoot(container); -root.render( - <> - - - -); - -// If you want your app to work offline and load faster, you can change -// unregister() to register() below. Note this comes with some pitfalls. -// Learn more about service workers: https://bit.ly/CRA-PWA -serviceWorker.unregister(); diff --git a/web-ui/src/pages/FeedbackSubmitPageForExternalRecipient.jsx b/web-ui/src/pages/FeedbackSubmitPageForExternalRecipient.jsx deleted file mode 100644 index eab173eeeb..0000000000 --- a/web-ui/src/pages/FeedbackSubmitPageForExternalRecipient.jsx +++ /dev/null @@ -1,62 +0,0 @@ -import React, { useContext, useEffect, useRef, useState } from 'react'; -import { styled } from '@mui/material/styles'; -import FeedbackSubmissionTips from '../components/feedback_submission_tips/FeedbackSubmissionTips'; -import FeedbackSubmitForm from '../components/feedback_submit_form/FeedbackSubmitForm'; -import TeamMemberReview from '../components/reviews/TeamMemberReview'; -import { useHistory, useLocation } from 'react-router-dom'; -import { - selectCsrfToken, - selectCurrentUser, - selectProfile -} from '../context/selectorsFeedbackExternalRecipient.js'; -import { AppContext } from '../context/AppContext'; -import { AppFeedbackExternalRecipientContext } from "../context/AppFeedbackExternalRecipientContext.jsx"; -import { getFeedbackRequestById, getExternalRecipients } from '../api/feedback'; -import { getFeedbackRequestNoCookie } from '../api/feedbackExternalRecipients'; -import Typography from '@mui/material/Typography'; -import { UPDATE_TOAST } from '../context/actions'; -import * as queryString from 'query-string'; - -import './FeedbackRequestPage.css'; - -const PREFIX = 'FeedbackSubmitForExternalRecipientPage'; -const classes = { - announcement: `${PREFIX}-announcement` -}; - -const Root = styled('div')({ - [`& .${classes.announcement}`]: { - textAlign: 'center', - marginTop: '3em', - ['@media (max-width: 800px)']: { - // eslint-disable-line no-useless-computed-key - fontSize: '22px' - } - } -}); - -const FeedbackSubmitForExternalRecipientPage = () => { - const { state, dispatch } = useContext(AppFeedbackExternalRecipientContext); - //const csrfToken = selectCsrfToken(state); - - useEffect(() => { - const fetchData = async () => { - try { - const response = await getFeedbackRequestNoCookie('93e72102-62f8-449d-a9ef-7c1ffae9a098'); - console.log("FeedbackSubmitPageForExternalRecipient, useEffect, response: ", response.payload.data); - } catch (error) { - console.error("FeedbackSubmitPageForExternalRecipient, useEffect, error: ", error); - } - }; - fetchData(); - }, []) - ; - - return ( - -

6:28pm ET

-
- ); -}; - -export default FeedbackSubmitForExternalRecipientPage; diff --git a/web-ui/vite.config.ts b/web-ui/vite.config.ts index 62fbe9a36e..2f103fa0b9 100644 --- a/web-ui/vite.config.ts +++ b/web-ui/vite.config.ts @@ -19,13 +19,5 @@ export default defineConfig({ }, optimizeDeps: { include: ['@mui/material/Tooltip'] - }, - build: { - rollupOptions: { - input: { - main: 'index.html', - externalRecipient: 'index_external_recipient.html' - } - } } }); From 38a91044ee0f682dc89271727394bf1b585e471a Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Wed, 13 Nov 2024 16:05:27 -0500 Subject: [PATCH 059/102] 2024-11-13 - created web-ui-external-feedback --- server/build.gradle | 6 + .../checkins/security/HomeController.java | 4 +- .../HomeExternalRecipientController.java | 2 +- .../FeedbackRequestServicesImpl.java | 2 +- settings.gradle | 3 +- web-ui-external-feedback/.env | 1 + web-ui-external-feedback/.gitignore | 27 + web-ui-external-feedback/.java-version | 1 + web-ui-external-feedback/.nvmrc | 1 + web-ui-external-feedback/.prettierignore | 1 + web-ui-external-feedback/.prettierrc | 6 + web-ui-external-feedback/.storybook/main.js | 22 + web-ui-external-feedback/README.md | 68 + web-ui-external-feedback/build.gradle | 83 + web-ui-external-feedback/eslint.config.js | 42 + web-ui-external-feedback/index.html | 46 + web-ui-external-feedback/package.json | 106 + .../default_profile.jpg | Bin 0 -> 5992 bytes .../public-external-feedback/favicon.ico | Bin 0 -> 1150 bytes .../fonts/roboto-300-light-italic.woff | Bin 0 -> 15004 bytes .../fonts/roboto-300-light.woff | Bin 0 -> 13360 bytes .../fonts/roboto-400-italic.woff | Bin 0 -> 14716 bytes .../fonts/roboto-400-regular.woff | Bin 0 -> 13308 bytes .../fonts/roboto-500-medium-italic.woff | Bin 0 -> 14620 bytes .../fonts/roboto-500-medium.woff | Bin 0 -> 13248 bytes .../fonts/roboto-700-bold-italic.woff | Bin 0 -> 14708 bytes .../fonts/roboto-700-bold.woff | Bin 0 -> 13348 bytes .../img/ocicube-color.png | Bin 0 -> 13062 bytes .../img/ocicube-color.svg | 17 + .../img/ocicube-white.png | Bin 0 -> 12953 bytes .../img/ocicube-white.svg | 17 + .../js/tinymce/icons/default/icons.min.js | 1 + .../js/tinymce/langs/README.md | 3 + .../js/tinymce/license.txt | 21 + .../js/tinymce/models/dom/model.min.js | 4 + .../js/tinymce/plugins/advlist/plugin.min.js | 4 + .../js/tinymce/plugins/anchor/plugin.min.js | 4 + .../js/tinymce/plugins/autolink/plugin.min.js | 4 + .../tinymce/plugins/autoresize/plugin.min.js | 4 + .../js/tinymce/plugins/autosave/plugin.min.js | 4 + .../js/tinymce/plugins/charmap/plugin.min.js | 4 + .../js/tinymce/plugins/code/plugin.min.js | 4 + .../tinymce/plugins/codesample/plugin.min.js | 4 + .../plugins/directionality/plugin.min.js | 4 + .../plugins/emoticons/js/emojiimages.js | 1 + .../plugins/emoticons/js/emojiimages.min.js | 3 + .../js/tinymce/plugins/emoticons/js/emojis.js | 1 + .../plugins/emoticons/js/emojis.min.js | 2 + .../tinymce/plugins/emoticons/plugin.min.js | 4 + .../tinymce/plugins/fullscreen/plugin.min.js | 4 + .../js/tinymce/plugins/help/plugin.min.js | 4 + .../js/tinymce/plugins/image/plugin.min.js | 4 + .../tinymce/plugins/importcss/plugin.min.js | 4 + .../plugins/insertdatetime/plugin.min.js | 4 + .../js/tinymce/plugins/link/plugin.min.js | 4 + .../js/tinymce/plugins/lists/plugin.min.js | 4 + .../js/tinymce/plugins/media/plugin.min.js | 4 + .../tinymce/plugins/nonbreaking/plugin.min.js | 4 + .../tinymce/plugins/pagebreak/plugin.min.js | 4 + .../js/tinymce/plugins/preview/plugin.min.js | 4 + .../tinymce/plugins/quickbars/plugin.min.js | 4 + .../js/tinymce/plugins/save/plugin.min.js | 4 + .../plugins/searchreplace/plugin.min.js | 4 + .../js/tinymce/plugins/table/plugin.min.js | 4 + .../js/tinymce/plugins/template/plugin.min.js | 4 + .../plugins/visualblocks/plugin.min.js | 4 + .../tinymce/plugins/visualchars/plugin.min.js | 4 + .../tinymce/plugins/wordcount/plugin.min.js | 4 + .../skins/content/dark/content.min.css | 1 + .../skins/content/default/content.min.css | 1 + .../skins/content/document/content.min.css | 1 + .../content/tinymce-5-dark/content.min.css | 1 + .../skins/content/tinymce-5/content.min.css | 1 + .../skins/content/writer/content.min.css | 1 + .../ui/oxide-dark/content.inline.min.css | 1 + .../skins/ui/oxide-dark/content.min.css | 1 + .../tinymce/skins/ui/oxide-dark/skin.min.css | 1 + .../ui/oxide-dark/skin.shadowdom.min.css | 1 + .../skins/ui/oxide/content.inline.min.css | 1 + .../js/tinymce/skins/ui/oxide/content.min.css | 1 + .../js/tinymce/skins/ui/oxide/skin.min.css | 1 + .../skins/ui/oxide/skin.shadowdom.min.css | 1 + .../ui/tinymce-5-dark/content.inline.min.css | 1 + .../skins/ui/tinymce-5-dark/content.min.css | 1 + .../skins/ui/tinymce-5-dark/skin.min.css | 1 + .../ui/tinymce-5-dark/skin.shadowdom.min.css | 1 + .../skins/ui/tinymce-5/content.inline.min.css | 1 + .../skins/ui/tinymce-5/content.min.css | 1 + .../tinymce/skins/ui/tinymce-5/skin.min.css | 1 + .../skins/ui/tinymce-5/skin.shadowdom.min.css | 1 + .../js/tinymce/themes/silver/theme.min.js | 4 + .../js/tinymce/tinymce.d.ts | 3071 +++++++++++++++++ .../js/tinymce/tinymce.min.js | 4 + .../public-external-feedback/logo192.png | Bin 0 -> 7613 bytes .../public-external-feedback/logo512.png | Bin 0 -> 23169 bytes .../public-external-feedback/manifest.json | 25 + .../Development_Discussion_Guide_for_PDLs.pdf | Bin 0 -> 1073162 bytes ...ment_Discussion_Guide_for_Team_Members.pdf | Bin 0 -> 1083691 bytes ...Expectations_Discussion_Guide_for_PDLs.pdf | Bin 0 -> 990900 bytes ...ions_Discussion_Guide_for_Team_Members.pdf | Bin 0 -> 903306 bytes .../pdfs/Expectations_Worksheet.pdf | Bin 0 -> 469234 bytes .../Feedback_Discussion_Guide_for_PDLs.pdf | Bin 0 -> 1032173 bytes ...back_Discussion_Guide_for_Team_Members.pdf | Bin 0 -> 1034712 bytes .../pdfs/Individual_Development_Plan.pdf | Bin 0 -> 568877 bytes .../public-external-feedback/robots.txt | 3 + web-ui-external-feedback/src/App.css | 46 + web-ui-external-feedback/src/App.jsx | 114 + .../src/api/actionitem.js | 55 + web-ui-external-feedback/src/api/agenda.js | 55 + web-ui-external-feedback/src/api/api.js | 113 + web-ui-external-feedback/src/api/api.test.js | 39 + .../src/api/birthdayanniversary.js | 52 + .../src/api/certification.js | 17 + web-ui-external-feedback/src/api/checkins.js | 159 + web-ui-external-feedback/src/api/document.js | 10 + web-ui-external-feedback/src/api/feedback.js | 313 ++ .../src/api/feedbackanswer.js | 105 + .../src/api/feedbacktemplate.js | 177 + web-ui-external-feedback/src/api/generic.js | 25 + web-ui-external-feedback/src/api/github.js | 19 + web-ui-external-feedback/src/api/guild.js | 101 + web-ui-external-feedback/src/api/hours.js | 25 + web-ui-external-feedback/src/api/kudos.js | 80 + web-ui-external-feedback/src/api/member.js | 124 + .../src/api/memberroles.js | 10 + .../src/api/memberskill.js | 78 + .../src/api/notifications.js | 48 + .../src/api/permissions.js | 10 + .../src/api/reviewassignments.js | 44 + .../src/api/reviewperiods.js | 51 + .../src/api/rolepermissions.js | 36 + web-ui-external-feedback/src/api/roles.js | 71 + web-ui-external-feedback/src/api/settings.js | 41 + web-ui-external-feedback/src/api/skill.js | 65 + .../src/api/skillcategory.js | 105 + web-ui-external-feedback/src/api/team.js | 95 + web-ui-external-feedback/src/api/upload.js | 40 + web-ui-external-feedback/src/api/volunteer.js | 49 + web-ui-external-feedback/src/app.d.js | 41 + .../action_item/ActionItemsPanel.css | 48 + .../action_item/ActionItemsPanel.jsx | 277 ++ .../action_item/ActionItemsPanel.test.jsx | 160 + .../ActionItemsPanel.test.jsx.snap | 76 + .../admin/permissions/DesktopTable.jsx | 66 + .../permissions/DesktopTable.stories.jsx | 23 + .../admin/permissions/DesktopTable.test.jsx | 16 + .../admin/permissions/MobileTable.jsx | 135 + .../admin/permissions/MobileTable.stories.jsx | 27 + .../admin/permissions/MobileTable.test.jsx | 15 + .../admin/permissions/Permissions.jsx | 10 + .../__snapshots__/DesktopTable.test.jsx.snap | 684 ++++ .../__snapshots__/MobileTable.test.jsx.snap | 366 ++ .../admin/permissions/sample-data.js | 52 + .../components/admin/roles/RoleUserCards.jsx | 59 + .../src/components/admin/roles/Roles.css | 169 + .../src/components/admin/roles/Roles.jsx | 409 +++ .../src/components/admin/roles/Roles.test.jsx | 38 + .../roles/__snapshots__/Roles.test.jsx.snap | 368 ++ .../src/components/admin/users/Users.css | 9 + .../src/components/admin/users/Users.jsx | 215 ++ .../src/components/admin/users/Users.test.jsx | 49 + .../users/__snapshots__/Users.test.jsx.snap | 146 + .../src/components/agenda/Agenda.css | 48 + .../src/components/agenda/Agenda.jsx | 275 ++ .../src/components/agenda/Agenda.test.jsx | 53 + .../agenda/__snapshots__/Agenda.test.jsx.snap | 76 + .../AnnualReviewReport.jsx | 316 ++ .../src/components/avatar/Avatar.css | 4 + .../src/components/avatar/Avatar.jsx | 10 + .../src/components/avatar/Avatar.stories.jsx | 17 + .../src/components/avatar/Avatar.test.jsx | 24 + .../avatar/__snapshots__/Avatar.test.jsx.snap | 21 + .../components/celebrations/Anniversaries.css | 181 + .../components/celebrations/Anniversaries.jsx | 109 + .../celebrations/Anniversaries.test.jsx | 35 + .../src/components/celebrations/Birthdays.css | 275 ++ .../src/components/celebrations/Birthdays.jsx | 120 + .../celebrations/Birthdays.test.jsx | 41 + .../components/celebrations/MyAnniversary.css | 201 ++ .../components/celebrations/MyAnniversary.jsx | 56 + .../celebrations/MyAnniversary.test.jsx | 25 + .../components/celebrations/MyBirthday.css | 346 ++ .../components/celebrations/MyBirthday.jsx | 45 + .../celebrations/MyBirthday.test.jsx | 20 + .../__snapshots__/Anniversaries.test.jsx.snap | 189 + .../__snapshots__/Birthdays.test.jsx.snap | 62 + .../DoubleCelebration.test.jsx.snap | 110 + .../__snapshots__/MyAnniversary.test.jsx.snap | 36 + .../__snapshots__/MyBirthday.test.jsx.snap | 67 + .../certifications/CertificationBadges.css | 10 + .../certifications/CertificationBadges.jsx | 64 + .../certifications/Certifications.css | 18 + .../certifications/Certifications.jsx | 276 ++ .../EarnedCertificationsTable.css | 67 + .../EarnedCertificationsTable.jsx | 591 ++++ .../src/components/checkin/Checkin.css | 50 + .../src/components/checkin/CheckinCycle.jsx | 14 + .../checkin/CheckinCycle.stories.jsx | 29 + .../components/checkin/CheckinCycle.test.jsx | 7 + .../src/components/checkin/CheckinHistory.jsx | 133 + .../checkin/CheckinHistory.stories.jsx | 79 + .../checkin/CheckinHistory.test.jsx | 63 + .../src/components/checkin/CheckinProfile.jsx | 55 + .../checkin/CheckinProfile.stories.jsx | 63 + .../checkin/CheckinProfile.test.jsx | 26 + .../__snapshots__/CheckinCycle.test.jsx.snap | 13 + .../CheckinHistory.test.jsx.snap | 93 + .../CheckinProfile.test.jsx.snap | 33 + .../src/components/checkin/checkin-cycle.png | Bin 0 -> 1784800 bytes .../checkin/documents/CheckinDocs.css | 10 + .../checkin/documents/CheckinDocs.jsx | 166 + .../checkin/documents/CheckinDocs.stories.jsx | 86 + .../checkin/documents/CheckinDocs.test.jsx | 48 + .../checkin/documents/FileUploader.jsx | 38 + .../__snapshots__/CheckinDocs.test.jsx.snap | 76 + .../contribution_hours/ProgressBar.jsx | 76 + .../ProgressBar.stories.jsx | 11 + .../contribution_hours/ProgressBar.test.jsx | 11 + .../__snapshots__/ProgressBar.test.jsx.snap | 105 + .../date-picker-field/DatePickerField.css | 18 + .../date-picker-field/DatePickerField.jsx | 52 + .../src/components/dialogs/AlertDialog.jsx | 36 + .../components/dialogs/ConfirmationDialog.jsx | 59 + .../components/dialogs/OrganizationDialog.jsx | 61 + .../discrete_slider/DiscreteSlider.jsx | 153 + .../DiscreteSlider.stories.jsx | 27 + .../discrete_slider/DiscreteSlider.test.tsx | 37 + .../DiscreteSlider.test.tsx.snap | 19 + .../EarnedCertificationBadges.css | 10 + .../EarnedCertificationBadges.jsx | 142 + .../src/components/edit_skills/EditSkills.css | 62 + .../components/edit_skills/EditSkillsCard.jsx | 210 ++ .../edit_skills/EditSkillsCard.test.jsx | 110 + .../edit_skills/EditSkillsModal.jsx | 144 + .../EditSkillsCard.test.jsx.snap | 183 + .../src/components/expand-more/ExpandMore.jsx | 20 + .../expand-more/ExpandMore.stories.jsx | 23 + .../expand-more/ExpandMore.test.jsx | 66 + .../FeedbackAnswerInput.jsx | 135 + .../feedback_date_selector/SelectDate.jsx | 119 + .../SelectDate.stories.jsx | 27 + .../FeedbackExternalRecipientCard.css | 55 + .../FeedbackExternalRecipientCard.jsx | 130 + .../FeedbackExternalRecipientCard.stories.jsx | 48 + .../FeedbackExternalRecipientCard.test.jsx | 14 + ...eedbackExternalRecipientCard.test.jsx.snap | 73 + .../FeedbackExternalRecipientSelector.css | 40 + .../FeedbackExternalRecipientSelector.jsx | 345 ++ ...FeedbackExternalRecipientSelector.test.jsx | 20 + .../NewExternalRecipientModal.jsx | 118 + ...ackExternalRecipientSelector.test.jsx.snap | 127 + .../FeedbackRecipientCard.css | 55 + .../FeedbackRecipientCard.jsx | 146 + .../FeedbackRecipientCard.stories.jsx | 48 + .../FeedbackRecipientCard.test.jsx | 14 + .../FeedbackRecipientCard.test.jsx.snap | 64 + .../FeedbackRecipientSelector.css | 40 + .../FeedbackRecipientSelector.jsx | 260 ++ .../FeedbackRecipientSelector.test.jsx | 20 + .../FeedbackRecipientSelector.test.jsx.snap | 99 + .../FeedbackRequestCard.css | 83 + .../FeedbackRequestCard.jsx | 291 ++ .../FeedbackRequestCard.stories.jsx | 42 + .../FeedbackRequestCard.test.jsx | 30 + .../FeedbackRequestCard.test.jsx.snap | 100 + .../FeedbackRequestSubcard.css | 17 + .../FeedbackRequestSubcard.jsx | 448 +++ .../FeedbackRequestSubcard.test.jsx | 29 + .../FeedbackRequestSubcard.test.jsx.snap | 109 + .../FeedbackRequestConfirmation.css | 15 + .../FeedbackRequestConfirmation.jsx | 163 + .../FeedbackRequestConfirmation.test.jsx | 44 + .../FeedbackRequestConfirmation.test.jsx.snap | 64 + .../FeedbackSubmissionTips.css | 86 + .../FeedbackSubmissionTips.jsx | 113 + .../FeedbackSubmissionTips.test.jsx | 6 + .../FeedbackSubmissionTips.test.jsx.snap | 116 + .../FeedbackSubmitConfirmation.css | 11 + .../FeedbackSubmitConfirmation.jsx | 104 + .../FeedbackSubmitConfirmation.test.jsx | 34 + .../FeedbackSubmitConfirmation.test.jsx.snap | 36 + .../FeedbackSubmitForm.css | 34 + .../FeedbackSubmitForm.jsx | 267 ++ .../FeedbackSubmitQuestion.css | 4 + .../FeedbackSubmitQuestion.jsx | 137 + .../FeedbackSubmitQuestion.test.jsx | 75 + .../FeedbackSubmitQuestion.test.jsx.snap | 46 + .../FeedbackTemplateSelector.css | 29 + .../FeedbackTemplateSelector.jsx | 252 ++ .../FeedbackTemplateSelector.test.jsx | 11 + .../FeedbackTemplateSelector.test.jsx.snap | 93 + .../src/components/feelings/Feelings.jsx | 65 + .../src/components/feelings/Feelings.test.jsx | 23 + .../__snapshots__/Feelings.test.jsx.snap | 317 ++ .../src/components/guides/GuideLink.css | 0 .../src/components/guides/GuideLink.jsx | 31 + .../src/components/guides/GuideLink.test.jsx | 19 + .../src/components/guides/GuidesPanel.css | 0 .../src/components/guides/GuidesPanel.jsx | 83 + .../components/guides/GuidesPanel.test.jsx | 45 + .../src/components/guides/PDLGuidesPanel.jsx | 41 + .../components/guides/PDLGuidesPanel.test.jsx | 61 + .../__snapshots__/GuideLink.test.jsx.snap | 46 + .../__snapshots__/GuidesPanel.test.jsx.snap | 77 + .../PDLGuidesPanel.test.jsx.snap | 59 + .../guild-results/EditGuildModal.css | 37 + .../guild-results/EditGuildModal.jsx | 284 ++ .../guild-results/EditGuildModal.spec.jsx | 114 + .../components/guild-results/GuildResults.css | 37 + .../components/guild-results/GuildResults.jsx | 154 + .../guild-results/GuildResults.test.jsx | 49 + .../guild-results/GuildSummaryCard.jsx | 241 ++ .../guild-results/GuildSummaryCard.test.jsx | 78 + .../__snapshots__/GuildResults.test.jsx.snap | 225 ++ .../GuildSummaryCard.test.jsx.snap | 221 ++ .../__snapshots__/GuildsActions.test.jsx.snap | 9 + .../src/components/header/Header.css | 26 + .../src/components/header/Header.jsx | 13 + .../src/components/header/Header.stories.jsx | 15 + .../src/components/header/Header.test.jsx | 7 + .../header/__snapshots__/Header.test.jsx.snap | 13 + .../src/components/kudos/PublicKudos.css | 9 + .../src/components/kudos/PublicKudos.jsx | 83 + .../src/components/kudos/PublicKudosCard.css | 3 + .../src/components/kudos/PublicKudosCard.jsx | 122 + .../src/components/kudos_card/KudosCard.css | 66 + .../src/components/kudos_card/KudosCard.jsx | 278 ++ .../components/kudos_dialog/KudosDialog.css | 10 + .../components/kudos_dialog/KudosDialog.jsx | 343 ++ .../member-directory/AdminMemberCard.jsx | 279 ++ .../member-directory/MemberModal.css | 41 + .../member-directory/MemberModal.jsx | 345 ++ .../member-directory/MemberModal.test.jsx | 68 + .../member-directory/MemberSummaryCard.css | 46 + .../member-directory/MemberSummaryCard.jsx | 141 + .../MemberSummaryCard.test.jsx | 50 + .../__snapshots__/MemberModal.test.jsx.snap | 76 + .../MemberSummaryCard.test.jsx.snap | 78 + .../member_selector/MemberSelector.css | 33 + .../member_selector/MemberSelector.jsx | 193 ++ .../member_selector/MemberSelector.test.jsx | 67 + .../MemberSelector.test.jsx.snap | 226 ++ .../MemberSelectorDialog.css | 99 + .../MemberSelectorDialog.jsx | 625 ++++ .../MemberSelectorDialog.spec.jsx | 202 ++ .../MemberSelectorDialog.test.jsx | 76 + .../MemberSelectorDialog.test.jsx.snap | 571 +++ .../member_skill_radar/MemberSkillRadar.jsx | 79 + .../member_skill_radar/RadarColors.jsx | 21 + .../src/components/menu/Menu.css | 120 + .../src/components/menu/Menu.jsx | 508 +++ .../src/components/menu/Menu.test.jsx | 124 + .../menu/__snapshots__/Menu.test.jsx.snap | 1321 +++++++ .../src/components/notes/Note.css | 29 + .../src/components/notes/Note.jsx | 155 + .../src/components/notes/Note.test.jsx | 68 + .../notes/__snapshots__/Note.test.jsx.snap | 66 + .../opportunity/OpportunityCard.jsx | 42 + .../opportunity/OpportunityCard.stories.jsx | 33 + .../opportunity/OpportunityCard.test.jsx | 20 + .../OpportunityCard.test.jsx.snap | 60 + .../src/components/personnel/Personnel.css | 24 + .../src/components/personnel/Personnel.jsx | 148 + .../components/personnel/Personnel.test.jsx | 11 + .../__snapshots__/Personnel.test.jsx.snap | 57 + .../components/private-note/PrivateNote.css | 29 + .../components/private-note/PrivateNote.jsx | 163 + .../private-note/PrivateNote.test.jsx | 68 + .../__snapshots__/PrivateNote.test.jsx.snap | 3 + .../src/components/profile/Profile.css | 0 .../src/components/profile/Profile.jsx | 165 + .../src/components/profile/Profile.test.jsx | 57 + .../src/components/profile/Search.css | 25 + .../src/components/profile/Search.jsx | 76 + .../__snapshots__/Profile.test.jsx.snap | 63 + .../src/components/pulse/Pulse.css | 31 + .../src/components/pulse/Pulse.jsx | 81 + .../src/components/pulse/Pulse.test.jsx | 42 + .../pulse/__snapshots__/Pulse.test.jsx.snap | 235 ++ .../ReceivedRequestCard.css | 19 + .../ReceivedRequestCard.jsx | 140 + .../checkin-report/CheckinReport.css | 24 + .../checkin-report/CheckinReport.jsx | 219 ++ .../HorizontalLinearStepper.jsx | 37 + .../checkin-report/LinkSection.css | 6 + .../checkin-report/LinkSection.jsx | 35 + .../checkin-report/TeamMemberMap.css | 32 + .../checkin-report/TeamMemberMap.jsx | 147 + .../checkin-report/TeamMemberMap.test.jsx | 79 + .../checkin-report/checkin-utils.js | 76 + .../checkin-report/checkin-utils.test.js | 205 ++ .../components/reviews/SelectUserModal.jsx | 80 + .../src/components/reviews/SelfReview.jsx | 145 + .../components/reviews/TeamMemberReview.jsx | 201 ++ .../src/components/reviews/TeamReviews.css | 24 + .../src/components/reviews/TeamReviews.jsx | 1158 +++++++ .../reviews/periods/ReviewPeriodCard.css | 22 + .../reviews/periods/ReviewPeriodCard.jsx | 216 ++ .../reviews/periods/ReviewPeriodStepper.jsx | 28 + .../periods/ReviewPeriodStepper.stories.jsx | 38 + .../periods/ReviewPeriodStepper.test.jsx | 23 + .../reviews/periods/ReviewPeriods.jsx | 504 +++ .../ReviewPeriodStepper.test.jsx.snap | 183 + .../reviews/periods/reviewStatus.json | 6 + .../src/components/routes/Routes.jsx | 208 ++ .../SearchBirthdayAnniversaryResults.jsx | 143 + .../search-results/SearchResults.jsx | 72 + .../SelectSkillsDialog.jsx | 164 + .../SelectSkillsDialog.test.jsx | 93 + .../SelectSkillsDialog.test.jsx.snap | 248 ++ .../sentiment_icon/SentimentIcon.css | 15 + .../sentiment_icon/SentimentIcon.jsx | 223 ++ .../sentiment_icon/SentimentIcon.stories.jsx | 28 + .../sentiment_icon/SentimentIcon.test.jsx | 6 + .../__snapshots__/SentimentIcon.test.jsx.snap | 38 + .../src/components/settings/index.js | 5 + .../src/components/settings/types/boolean.jsx | 40 + .../settings/types/boolean.stories.jsx | 26 + .../src/components/settings/types/color.jsx | 38 + .../settings/types/color.stories.jsx | 27 + .../src/components/settings/types/file.jsx | 54 + .../settings/types/file.stories.jsx | 29 + .../src/components/settings/types/number.jsx | 56 + .../settings/types/number.stories.jsx | 25 + .../src/components/settings/types/string.jsx | 65 + .../settings/types/string.stories.jsx | 25 + .../skeleton_loader/SkeletonLoader.jsx | 214 ++ .../SkeletonLoader.stories.jsx | 41 + .../skeleton_loader/SkeletonLoader.test.jsx | 38 + .../SkeletonLoader.test.jsx.snap | 13 + .../skill-category-card/SkillCategoryCard.jsx | 66 + .../SkillCategoryCard.test.jsx | 14 + .../SkillCategoryCard.test.jsx.snap | 91 + .../SkillCategoryNewDialog.jsx | 86 + .../SkillCategoryNewDialog.test.jsx | 18 + .../SkillCategoryNewDialog.test.jsx.snap | 7 + .../src/components/skills/SkillSection.css | 107 + .../src/components/skills/SkillSection.jsx | 356 ++ .../src/components/skills/SkillSlider.css | 21 + .../src/components/skills/SkillSlider.jsx | 105 + .../snackbar/SnackBarWithContext.jsx | 45 + .../components/split-button/SplitButton.jsx | 110 + .../split-button/SplitButton.stories.jsx | 23 + .../split-button/SplitButton.test.jsx | 7 + .../__snapshots__/SplitButton.test.jsx.snap | 46 + .../src/components/team-member/MemberIcon.jsx | 21 + .../team-member/MemberIcon.test.jsx | 8 + .../src/components/team-member/TeamMember.css | 34 + .../team-member/TeamMemberContainer.jsx | 181 + .../team-member/TeamMemberContainer.test.jsx | 16 + .../team-member/TeamMemberSelect.css | 34 + .../team-member/TeamMemberSelect.jsx | 70 + .../team-member/TeamMemberSelect.test.jsx | 64 + .../__snapshots__/MemberIcon.test.jsx.snap | 15 + .../TeamMemberContainer.test.jsx.snap | 15 + .../TeamMemberSelect.test.jsx.snap | 127 + .../components/team-results/EditTeamModal.css | 37 + .../components/team-results/EditTeamModal.jsx | 261 ++ .../team-results/EditTeamModal.spec.jsx | 159 + .../components/team-results/TeamResults.css | 37 + .../components/team-results/TeamResults.jsx | 124 + .../team-results/TeamResults.test.jsx | 72 + .../team-results/TeamSummaryCard.jsx | 219 ++ .../team-results/TeamSummaryCard.test.jsx | 77 + .../components/team-results/TeamsActions.jsx | 48 + .../team-results/TeamsActions.test.jsx | 39 + .../__snapshots__/TeamResults.test.jsx.snap | 233 ++ .../TeamSummaryCard.test.jsx.snap | 206 ++ .../__snapshots__/TeamsActions.test.jsx.snap | 35 + .../components/template-card/TemplateCard.css | 76 + .../components/template-card/TemplateCard.jsx | 132 + .../template-card/TemplateCard.stories.jsx | 28 + .../template-card/TemplateCard.test.jsx | 15 + .../__snapshots__/TemplateCard.test.jsx.snap | 63 + .../TemplatePreviewModal.css | 15 + .../TemplatePreviewModal.jsx | 223 ++ .../AdHocCreationForm.jsx | 75 + .../ViewFeedbackResponses.css | 61 + .../ViewFeedbackResponses.jsx | 335 ++ .../ViewFeedbackResponses.stories.jsx | 141 + .../ViewFeedbackResponses.test.jsx | 34 + .../ViewFeedbackResponses.test.jsx.snap | 183 + .../FeedbackResponseCard.css | 95 + .../FeedbackResponseCard.jsx | 61 + .../FeedbackResponseCard.stories.jsx | 27 + .../FeedbackResponseCard.test.tsx | 69 + .../FeedbackResponseCard.test.tsx.snap | 193 ++ .../components/volunteer/Organizations.jsx | 331 ++ .../components/volunteer/VolunteerBadges.jsx | 96 + .../components/volunteer/VolunteerEvents.jsx | 549 +++ .../volunteer/VolunteerRelationships.jsx | 431 +++ .../components/volunteer/VolunteerTables.css | 113 + .../components/volunteer/VolunteerTables.jsx | 110 + .../src/context/AppContext.jsx | 308 ++ .../src/context/actions.js | 36 + .../src/context/reducer.js | 256 ++ .../src/context/selectors.js | 733 ++++ .../src/context/selectors.test.js | 1528 ++++++++ .../src/context/thunks.js | 63 + web-ui-external-feedback/src/context/util.js | 57 + .../src/helpers/celebration.js | 34 + .../src/helpers/checks.js | 67 + .../src/helpers/datetime.js | 31 + .../src/helpers/datetime.test.js | 126 + web-ui-external-feedback/src/helpers/index.js | 6 + .../src/helpers/query-parameters.js | 89 + .../src/helpers/sanitizehtml.js | 45 + .../src/helpers/strings.js | 9 + .../src/helpers/strings.test.js | 11 + web-ui-external-feedback/src/helpers/toast.js | 21 + web-ui-external-feedback/src/index.css | 13 + web-ui-external-feedback/src/index.jsx | 20 + web-ui-external-feedback/src/logo.svg | 7 + .../src/pages/AnniversaryReportPage.jsx | 148 + .../src/pages/AnniversaryReportPage.test.jsx | 41 + .../src/pages/AnnualReviewReportPage.css | 27 + .../src/pages/AnnualReviewReportPage.jsx | 80 + .../pages/BirthdayAnniversaryReportPage.css | 44 + .../src/pages/BirthdayReportPage.jsx | 162 + .../src/pages/BirthdayReportPage.test.jsx | 42 + .../src/pages/CertificationReportPage.css | 12 + .../src/pages/CertificationReportPage.jsx | 39 + .../src/pages/CheckinsPage.css | 39 + .../src/pages/CheckinsPage.jsx | 240 ++ .../src/pages/CheckinsPage.test.jsx | 74 + .../src/pages/CheckinsReportPage.css | 27 + .../src/pages/CheckinsReportPage.jsx | 278 ++ .../src/pages/EditPermissionsPage.css | 7 + .../src/pages/EditPermissionsPage.jsx | 1397 ++++++++ .../src/pages/EditPermissionsPage.test.jsx | 11 + .../src/pages/EditPermissionsPageRoles.jsx | 43 + .../src/pages/EditSkillsPage.css | 29 + .../src/pages/EditSkillsPage.jsx | 111 + .../src/pages/EditSkillsPage.test.jsx | 34 + .../src/pages/EmailPage.css | 89 + .../src/pages/EmailPage.jsx | 632 ++++ .../src/pages/ErrorBoundaryPage.css | 93 + .../src/pages/ErrorBoundaryPage.jsx | 136 + .../src/pages/ErrorBoundaryPage.test.jsx | 11 + .../src/pages/FeedbackRequestPage.css | 99 + .../src/pages/FeedbackRequestPage.jsx | 547 +++ .../src/pages/FeedbackRequestPage.test.jsx | 34 + .../src/pages/FeedbackSubmitPage.jsx | 204 ++ .../src/pages/GuildsPage.jsx | 16 + .../src/pages/GuildsPage.test.jsx | 11 + .../src/pages/HomePage.css | 35 + .../src/pages/HomePage.jsx | 116 + .../src/pages/HomePage.test.jsx | 16 + .../src/pages/KudosPage.css | 68 + .../src/pages/KudosPage.jsx | 201 ++ .../src/pages/ManageKudosPage.css | 24 + .../src/pages/ManageKudosPage.jsx | 194 ++ .../src/pages/MemberProfilePage.css | 54 + .../src/pages/MemberProfilePage.jsx | 344 ++ .../src/pages/MemberProfilePage.test.jsx | 31 + .../src/pages/MeritReportPage.css | 29 + .../src/pages/MeritReportPage.jsx | 591 ++++ .../src/pages/PeoplePage.css | 3 + .../src/pages/PeoplePage.jsx | 109 + .../src/pages/PeoplePage.test.jsx | 11 + .../src/pages/PermissionsPage.css | 7 + .../src/pages/PermissionsPage.jsx | 224 ++ .../src/pages/PermissionsPage.test.jsx | 30 + .../src/pages/ProfilePage.css | 32 + .../src/pages/ProfilePage.jsx | 253 ++ .../src/pages/PulsePage.css | 14 + .../src/pages/PulsePage.jsx | 155 + .../src/pages/PulsePage.test.jsx | 11 + .../src/pages/PulseReportPage.css | 32 + .../src/pages/PulseReportPage.jsx | 563 +++ .../src/pages/PulseReportPage.test.jsx | 29 + .../src/pages/ReceivedRequestsPage.css | 146 + .../src/pages/ReceivedRequestsPage.jsx | 407 +++ .../src/pages/ReviewsPage.jsx | 105 + .../src/pages/SelfReviewsPage.jsx | 130 + .../src/pages/SelfReviewsPage.test.jsx | 19 + .../src/pages/SettingsPage.css | 74 + .../src/pages/SettingsPage.jsx | 232 ++ .../src/pages/SettingsPage.test.jsx | 77 + .../src/pages/SkillCategoriesPage.css | 57 + .../src/pages/SkillCategoriesPage.jsx | 302 ++ .../src/pages/SkillCategoriesPage.test.jsx | 29 + .../src/pages/SkillCategoryEditPage.css | 14 + .../src/pages/SkillCategoryEditPage.jsx | 272 ++ .../src/pages/SkillCategoryEditPage.test.jsx | 14 + .../src/pages/SkillReportPage.css | 29 + .../src/pages/SkillReportPage.jsx | 155 + .../src/pages/SkillReportPage.test.jsx | 29 + .../src/pages/TeamSkillReportPage.css | 32 + .../src/pages/TeamSkillReportPage.jsx | 249 ++ .../src/pages/TeamSkillReportPage.test.jsx | 37 + .../src/pages/TeamsPage.jsx | 16 + .../src/pages/ViewFeedbackPage.css | 50 + .../src/pages/ViewFeedbackPage.jsx | 472 +++ .../src/pages/ViewFeedbackPage.test.jsx | 34 + .../src/pages/VolunteerReportPage.jsx | 5 + .../AnniversaryReportPage.test.jsx.snap | 164 + .../BirthdayReportPage.test.jsx.snap | 194 ++ .../__snapshots__/CheckinsPage.test.jsx.snap | 275 ++ .../__snapshots__/DirectoryPage.test.js.snap | 598 ++++ .../EditPermissionsPage.test.jsx.snap | 13 + .../EditSkillsPage.test.jsx.snap | 104 + .../ErrorBoundaryPage.test.jsx.snap | 46 + .../FeedbackRequestPage.test.jsx.snap | 286 ++ .../__snapshots__/GuildsPage.test.jsx.snap | 92 + .../__snapshots__/HomePage.test.jsx.snap | 70 + .../MemberProfilePage.test.jsx.snap | 121 + .../__snapshots__/PeoplePage.test.js.snap | 598 ++++ .../__snapshots__/PeoplePage.test.jsx.snap | 82 + .../PermissionsPage.test.jsx.snap | 72 + .../__snapshots__/PulsePage.test.jsx.snap | 470 +++ .../PulseReportPage.test.jsx.snap | 153 + .../SelfReviewsPage.test.jsx.snap | 49 + .../__snapshots__/SettingsPage.test.jsx.snap | 129 + .../SkillCategoriesPage.test.jsx.snap | 190 + .../SkillCategoryEditPage.test.jsx.snap | 138 + .../SkillReportPage.test.jsx.snap | 118 + .../TeamSkillReportPage.test.jsx.snap | 167 + .../ViewFeedbackPage.test.jsx.snap | 251 ++ web-ui-external-feedback/src/serviceWorker.js | 144 + web-ui-external-feedback/src/setupTests.js | 43 + .../src/styles/variables.css | 118 + web-ui-external-feedback/src/vite-env.d.ts | 1 + web-ui-external-feedback/tsconfig.json | 21 + web-ui-external-feedback/vite.config.ts | 23 + 625 files changed, 62776 insertions(+), 5 deletions(-) create mode 100644 web-ui-external-feedback/.env create mode 100644 web-ui-external-feedback/.gitignore create mode 100644 web-ui-external-feedback/.java-version create mode 100644 web-ui-external-feedback/.nvmrc create mode 100644 web-ui-external-feedback/.prettierignore create mode 100644 web-ui-external-feedback/.prettierrc create mode 100644 web-ui-external-feedback/.storybook/main.js create mode 100644 web-ui-external-feedback/README.md create mode 100644 web-ui-external-feedback/build.gradle create mode 100644 web-ui-external-feedback/eslint.config.js create mode 100644 web-ui-external-feedback/index.html create mode 100644 web-ui-external-feedback/package.json create mode 100644 web-ui-external-feedback/public-external-feedback/default_profile.jpg create mode 100644 web-ui-external-feedback/public-external-feedback/favicon.ico create mode 100644 web-ui-external-feedback/public-external-feedback/fonts/roboto-300-light-italic.woff create mode 100644 web-ui-external-feedback/public-external-feedback/fonts/roboto-300-light.woff create mode 100644 web-ui-external-feedback/public-external-feedback/fonts/roboto-400-italic.woff create mode 100644 web-ui-external-feedback/public-external-feedback/fonts/roboto-400-regular.woff create mode 100644 web-ui-external-feedback/public-external-feedback/fonts/roboto-500-medium-italic.woff create mode 100644 web-ui-external-feedback/public-external-feedback/fonts/roboto-500-medium.woff create mode 100644 web-ui-external-feedback/public-external-feedback/fonts/roboto-700-bold-italic.woff create mode 100644 web-ui-external-feedback/public-external-feedback/fonts/roboto-700-bold.woff create mode 100644 web-ui-external-feedback/public-external-feedback/img/ocicube-color.png create mode 100644 web-ui-external-feedback/public-external-feedback/img/ocicube-color.svg create mode 100644 web-ui-external-feedback/public-external-feedback/img/ocicube-white.png create mode 100644 web-ui-external-feedback/public-external-feedback/img/ocicube-white.svg create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/icons/default/icons.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/langs/README.md create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/license.txt create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/models/dom/model.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/advlist/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/anchor/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/autolink/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/autoresize/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/autosave/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/charmap/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/code/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/codesample/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/directionality/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojiimages.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojiimages.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojis.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojis.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/fullscreen/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/help/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/image/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/importcss/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/insertdatetime/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/link/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/lists/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/media/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/nonbreaking/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/pagebreak/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/preview/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/quickbars/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/save/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/searchreplace/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/table/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/template/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/visualblocks/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/visualchars/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/wordcount/plugin.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/content/dark/content.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/content/default/content.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/content/document/content.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/content/tinymce-5-dark/content.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/content/tinymce-5/content.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/content/writer/content.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/oxide-dark/content.inline.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/oxide-dark/content.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/oxide-dark/skin.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/oxide/content.inline.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/oxide/content.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/oxide/skin.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/oxide/skin.shadowdom.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/tinymce-5-dark/content.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/tinymce-5-dark/skin.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/tinymce-5/content.inline.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/tinymce-5/content.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/tinymce-5/skin.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/themes/silver/theme.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/tinymce.d.ts create mode 100644 web-ui-external-feedback/public-external-feedback/js/tinymce/tinymce.min.js create mode 100644 web-ui-external-feedback/public-external-feedback/logo192.png create mode 100644 web-ui-external-feedback/public-external-feedback/logo512.png create mode 100644 web-ui-external-feedback/public-external-feedback/manifest.json create mode 100644 web-ui-external-feedback/public-external-feedback/pdfs/Development_Discussion_Guide_for_PDLs.pdf create mode 100644 web-ui-external-feedback/public-external-feedback/pdfs/Development_Discussion_Guide_for_Team_Members.pdf create mode 100644 web-ui-external-feedback/public-external-feedback/pdfs/Expectations_Discussion_Guide_for_PDLs.pdf create mode 100644 web-ui-external-feedback/public-external-feedback/pdfs/Expectations_Discussion_Guide_for_Team_Members.pdf create mode 100644 web-ui-external-feedback/public-external-feedback/pdfs/Expectations_Worksheet.pdf create mode 100644 web-ui-external-feedback/public-external-feedback/pdfs/Feedback_Discussion_Guide_for_PDLs.pdf create mode 100644 web-ui-external-feedback/public-external-feedback/pdfs/Feedback_Discussion_Guide_for_Team_Members.pdf create mode 100644 web-ui-external-feedback/public-external-feedback/pdfs/Individual_Development_Plan.pdf create mode 100644 web-ui-external-feedback/public-external-feedback/robots.txt create mode 100644 web-ui-external-feedback/src/App.css create mode 100644 web-ui-external-feedback/src/App.jsx create mode 100644 web-ui-external-feedback/src/api/actionitem.js create mode 100644 web-ui-external-feedback/src/api/agenda.js create mode 100644 web-ui-external-feedback/src/api/api.js create mode 100644 web-ui-external-feedback/src/api/api.test.js create mode 100644 web-ui-external-feedback/src/api/birthdayanniversary.js create mode 100644 web-ui-external-feedback/src/api/certification.js create mode 100644 web-ui-external-feedback/src/api/checkins.js create mode 100644 web-ui-external-feedback/src/api/document.js create mode 100644 web-ui-external-feedback/src/api/feedback.js create mode 100644 web-ui-external-feedback/src/api/feedbackanswer.js create mode 100644 web-ui-external-feedback/src/api/feedbacktemplate.js create mode 100644 web-ui-external-feedback/src/api/generic.js create mode 100644 web-ui-external-feedback/src/api/github.js create mode 100644 web-ui-external-feedback/src/api/guild.js create mode 100644 web-ui-external-feedback/src/api/hours.js create mode 100644 web-ui-external-feedback/src/api/kudos.js create mode 100644 web-ui-external-feedback/src/api/member.js create mode 100644 web-ui-external-feedback/src/api/memberroles.js create mode 100644 web-ui-external-feedback/src/api/memberskill.js create mode 100644 web-ui-external-feedback/src/api/notifications.js create mode 100644 web-ui-external-feedback/src/api/permissions.js create mode 100644 web-ui-external-feedback/src/api/reviewassignments.js create mode 100644 web-ui-external-feedback/src/api/reviewperiods.js create mode 100644 web-ui-external-feedback/src/api/rolepermissions.js create mode 100644 web-ui-external-feedback/src/api/roles.js create mode 100644 web-ui-external-feedback/src/api/settings.js create mode 100644 web-ui-external-feedback/src/api/skill.js create mode 100644 web-ui-external-feedback/src/api/skillcategory.js create mode 100644 web-ui-external-feedback/src/api/team.js create mode 100644 web-ui-external-feedback/src/api/upload.js create mode 100644 web-ui-external-feedback/src/api/volunteer.js create mode 100644 web-ui-external-feedback/src/app.d.js create mode 100644 web-ui-external-feedback/src/components/action_item/ActionItemsPanel.css create mode 100644 web-ui-external-feedback/src/components/action_item/ActionItemsPanel.jsx create mode 100644 web-ui-external-feedback/src/components/action_item/ActionItemsPanel.test.jsx create mode 100644 web-ui-external-feedback/src/components/action_item/__snapshots__/ActionItemsPanel.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/admin/permissions/DesktopTable.jsx create mode 100644 web-ui-external-feedback/src/components/admin/permissions/DesktopTable.stories.jsx create mode 100644 web-ui-external-feedback/src/components/admin/permissions/DesktopTable.test.jsx create mode 100644 web-ui-external-feedback/src/components/admin/permissions/MobileTable.jsx create mode 100644 web-ui-external-feedback/src/components/admin/permissions/MobileTable.stories.jsx create mode 100644 web-ui-external-feedback/src/components/admin/permissions/MobileTable.test.jsx create mode 100644 web-ui-external-feedback/src/components/admin/permissions/Permissions.jsx create mode 100644 web-ui-external-feedback/src/components/admin/permissions/__snapshots__/DesktopTable.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/admin/permissions/__snapshots__/MobileTable.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/admin/permissions/sample-data.js create mode 100644 web-ui-external-feedback/src/components/admin/roles/RoleUserCards.jsx create mode 100644 web-ui-external-feedback/src/components/admin/roles/Roles.css create mode 100644 web-ui-external-feedback/src/components/admin/roles/Roles.jsx create mode 100644 web-ui-external-feedback/src/components/admin/roles/Roles.test.jsx create mode 100644 web-ui-external-feedback/src/components/admin/roles/__snapshots__/Roles.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/admin/users/Users.css create mode 100644 web-ui-external-feedback/src/components/admin/users/Users.jsx create mode 100644 web-ui-external-feedback/src/components/admin/users/Users.test.jsx create mode 100644 web-ui-external-feedback/src/components/admin/users/__snapshots__/Users.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/agenda/Agenda.css create mode 100644 web-ui-external-feedback/src/components/agenda/Agenda.jsx create mode 100644 web-ui-external-feedback/src/components/agenda/Agenda.test.jsx create mode 100644 web-ui-external-feedback/src/components/agenda/__snapshots__/Agenda.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/annual-review-report/AnnualReviewReport.jsx create mode 100644 web-ui-external-feedback/src/components/avatar/Avatar.css create mode 100644 web-ui-external-feedback/src/components/avatar/Avatar.jsx create mode 100644 web-ui-external-feedback/src/components/avatar/Avatar.stories.jsx create mode 100644 web-ui-external-feedback/src/components/avatar/Avatar.test.jsx create mode 100644 web-ui-external-feedback/src/components/avatar/__snapshots__/Avatar.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/celebrations/Anniversaries.css create mode 100644 web-ui-external-feedback/src/components/celebrations/Anniversaries.jsx create mode 100644 web-ui-external-feedback/src/components/celebrations/Anniversaries.test.jsx create mode 100644 web-ui-external-feedback/src/components/celebrations/Birthdays.css create mode 100644 web-ui-external-feedback/src/components/celebrations/Birthdays.jsx create mode 100644 web-ui-external-feedback/src/components/celebrations/Birthdays.test.jsx create mode 100644 web-ui-external-feedback/src/components/celebrations/MyAnniversary.css create mode 100644 web-ui-external-feedback/src/components/celebrations/MyAnniversary.jsx create mode 100644 web-ui-external-feedback/src/components/celebrations/MyAnniversary.test.jsx create mode 100644 web-ui-external-feedback/src/components/celebrations/MyBirthday.css create mode 100644 web-ui-external-feedback/src/components/celebrations/MyBirthday.jsx create mode 100644 web-ui-external-feedback/src/components/celebrations/MyBirthday.test.jsx create mode 100644 web-ui-external-feedback/src/components/celebrations/__snapshots__/Anniversaries.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/celebrations/__snapshots__/Birthdays.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/celebrations/__snapshots__/DoubleCelebration.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/celebrations/__snapshots__/MyAnniversary.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/celebrations/__snapshots__/MyBirthday.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/certifications/CertificationBadges.css create mode 100644 web-ui-external-feedback/src/components/certifications/CertificationBadges.jsx create mode 100644 web-ui-external-feedback/src/components/certifications/Certifications.css create mode 100644 web-ui-external-feedback/src/components/certifications/Certifications.jsx create mode 100644 web-ui-external-feedback/src/components/certifications/EarnedCertificationsTable.css create mode 100644 web-ui-external-feedback/src/components/certifications/EarnedCertificationsTable.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/Checkin.css create mode 100644 web-ui-external-feedback/src/components/checkin/CheckinCycle.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/CheckinCycle.stories.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/CheckinCycle.test.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/CheckinHistory.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/CheckinHistory.stories.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/CheckinHistory.test.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/CheckinProfile.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/CheckinProfile.stories.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/CheckinProfile.test.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinCycle.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinHistory.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinProfile.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/checkin/checkin-cycle.png create mode 100644 web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.css create mode 100644 web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.stories.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.test.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/documents/FileUploader.jsx create mode 100644 web-ui-external-feedback/src/components/checkin/documents/__snapshots__/CheckinDocs.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/contribution_hours/ProgressBar.jsx create mode 100644 web-ui-external-feedback/src/components/contribution_hours/ProgressBar.stories.jsx create mode 100644 web-ui-external-feedback/src/components/contribution_hours/ProgressBar.test.jsx create mode 100644 web-ui-external-feedback/src/components/contribution_hours/__snapshots__/ProgressBar.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/date-picker-field/DatePickerField.css create mode 100644 web-ui-external-feedback/src/components/date-picker-field/DatePickerField.jsx create mode 100644 web-ui-external-feedback/src/components/dialogs/AlertDialog.jsx create mode 100644 web-ui-external-feedback/src/components/dialogs/ConfirmationDialog.jsx create mode 100644 web-ui-external-feedback/src/components/dialogs/OrganizationDialog.jsx create mode 100644 web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.jsx create mode 100644 web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.stories.jsx create mode 100644 web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.test.tsx create mode 100644 web-ui-external-feedback/src/components/discrete_slider/__snapshots__/DiscreteSlider.test.tsx.snap create mode 100644 web-ui-external-feedback/src/components/earned-certifications/EarnedCertificationBadges.css create mode 100644 web-ui-external-feedback/src/components/earned-certifications/EarnedCertificationBadges.jsx create mode 100644 web-ui-external-feedback/src/components/edit_skills/EditSkills.css create mode 100644 web-ui-external-feedback/src/components/edit_skills/EditSkillsCard.jsx create mode 100644 web-ui-external-feedback/src/components/edit_skills/EditSkillsCard.test.jsx create mode 100644 web-ui-external-feedback/src/components/edit_skills/EditSkillsModal.jsx create mode 100644 web-ui-external-feedback/src/components/edit_skills/__snapshots__/EditSkillsCard.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/expand-more/ExpandMore.jsx create mode 100644 web-ui-external-feedback/src/components/expand-more/ExpandMore.stories.jsx create mode 100644 web-ui-external-feedback/src/components/expand-more/ExpandMore.test.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_answer_input/FeedbackAnswerInput.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_date_selector/SelectDate.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_date_selector/SelectDate.stories.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.css create mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.stories.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.test.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_card/__snapshots__/FeedbackExternalRecipientCard.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.css create mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.test.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_selector/__snapshots__/FeedbackExternalRecipientSelector.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.css create mode 100644 web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.stories.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.test.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_recipient_card/__snapshots__/FeedbackRecipientCard.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.css create mode 100644 web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.test.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_recipient_selector/__snapshots__/FeedbackRecipientSelector.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.css create mode 100644 web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.stories.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.test.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_request_card/__snapshots__/FeedbackRequestCard.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.css create mode 100644 web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.test.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/__snapshots__/FeedbackRequestSubcard.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.css create mode 100644 web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.test.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_request_confirmation/__snapshots__/FeedbackRequestConfirmation.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/feedback_submission_tips/FeedbackSubmissionTips.css create mode 100644 web-ui-external-feedback/src/components/feedback_submission_tips/FeedbackSubmissionTips.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_submission_tips/FeedbackSubmissionTips.test.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_submission_tips/__snapshots__/FeedbackSubmissionTips.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.css create mode 100644 web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.test.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_submit_confirmation/__snapshots__/FeedbackSubmitConfirmation.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/feedback_submit_form/FeedbackSubmitForm.css create mode 100644 web-ui-external-feedback/src/components/feedback_submit_form/FeedbackSubmitForm.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_submit_question/FeedbackSubmitQuestion.css create mode 100644 web-ui-external-feedback/src/components/feedback_submit_question/FeedbackSubmitQuestion.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_submit_question/FeedbackSubmitQuestion.test.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_submit_question/__snapshots__/FeedbackSubmitQuestion.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.css create mode 100644 web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.test.jsx create mode 100644 web-ui-external-feedback/src/components/feedback_template_selector/__snapshots__/FeedbackTemplateSelector.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/feelings/Feelings.jsx create mode 100644 web-ui-external-feedback/src/components/feelings/Feelings.test.jsx create mode 100644 web-ui-external-feedback/src/components/feelings/__snapshots__/Feelings.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/guides/GuideLink.css create mode 100644 web-ui-external-feedback/src/components/guides/GuideLink.jsx create mode 100644 web-ui-external-feedback/src/components/guides/GuideLink.test.jsx create mode 100644 web-ui-external-feedback/src/components/guides/GuidesPanel.css create mode 100644 web-ui-external-feedback/src/components/guides/GuidesPanel.jsx create mode 100644 web-ui-external-feedback/src/components/guides/GuidesPanel.test.jsx create mode 100644 web-ui-external-feedback/src/components/guides/PDLGuidesPanel.jsx create mode 100644 web-ui-external-feedback/src/components/guides/PDLGuidesPanel.test.jsx create mode 100644 web-ui-external-feedback/src/components/guides/__snapshots__/GuideLink.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/guides/__snapshots__/GuidesPanel.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/guides/__snapshots__/PDLGuidesPanel.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/guild-results/EditGuildModal.css create mode 100644 web-ui-external-feedback/src/components/guild-results/EditGuildModal.jsx create mode 100644 web-ui-external-feedback/src/components/guild-results/EditGuildModal.spec.jsx create mode 100644 web-ui-external-feedback/src/components/guild-results/GuildResults.css create mode 100644 web-ui-external-feedback/src/components/guild-results/GuildResults.jsx create mode 100644 web-ui-external-feedback/src/components/guild-results/GuildResults.test.jsx create mode 100644 web-ui-external-feedback/src/components/guild-results/GuildSummaryCard.jsx create mode 100644 web-ui-external-feedback/src/components/guild-results/GuildSummaryCard.test.jsx create mode 100644 web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildResults.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildSummaryCard.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildsActions.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/header/Header.css create mode 100644 web-ui-external-feedback/src/components/header/Header.jsx create mode 100644 web-ui-external-feedback/src/components/header/Header.stories.jsx create mode 100644 web-ui-external-feedback/src/components/header/Header.test.jsx create mode 100644 web-ui-external-feedback/src/components/header/__snapshots__/Header.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/kudos/PublicKudos.css create mode 100644 web-ui-external-feedback/src/components/kudos/PublicKudos.jsx create mode 100644 web-ui-external-feedback/src/components/kudos/PublicKudosCard.css create mode 100644 web-ui-external-feedback/src/components/kudos/PublicKudosCard.jsx create mode 100644 web-ui-external-feedback/src/components/kudos_card/KudosCard.css create mode 100644 web-ui-external-feedback/src/components/kudos_card/KudosCard.jsx create mode 100644 web-ui-external-feedback/src/components/kudos_dialog/KudosDialog.css create mode 100644 web-ui-external-feedback/src/components/kudos_dialog/KudosDialog.jsx create mode 100644 web-ui-external-feedback/src/components/member-directory/AdminMemberCard.jsx create mode 100644 web-ui-external-feedback/src/components/member-directory/MemberModal.css create mode 100644 web-ui-external-feedback/src/components/member-directory/MemberModal.jsx create mode 100644 web-ui-external-feedback/src/components/member-directory/MemberModal.test.jsx create mode 100644 web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.css create mode 100644 web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.jsx create mode 100644 web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.test.jsx create mode 100644 web-ui-external-feedback/src/components/member-directory/__snapshots__/MemberModal.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/member-directory/__snapshots__/MemberSummaryCard.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/member_selector/MemberSelector.css create mode 100644 web-ui-external-feedback/src/components/member_selector/MemberSelector.jsx create mode 100644 web-ui-external-feedback/src/components/member_selector/MemberSelector.test.jsx create mode 100644 web-ui-external-feedback/src/components/member_selector/__snapshots__/MemberSelector.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.css create mode 100644 web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.jsx create mode 100644 web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.spec.jsx create mode 100644 web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.test.jsx create mode 100644 web-ui-external-feedback/src/components/member_selector/member_selector_dialog/__snapshots__/MemberSelectorDialog.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/member_skill_radar/MemberSkillRadar.jsx create mode 100644 web-ui-external-feedback/src/components/member_skill_radar/RadarColors.jsx create mode 100644 web-ui-external-feedback/src/components/menu/Menu.css create mode 100644 web-ui-external-feedback/src/components/menu/Menu.jsx create mode 100644 web-ui-external-feedback/src/components/menu/Menu.test.jsx create mode 100644 web-ui-external-feedback/src/components/menu/__snapshots__/Menu.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/notes/Note.css create mode 100644 web-ui-external-feedback/src/components/notes/Note.jsx create mode 100644 web-ui-external-feedback/src/components/notes/Note.test.jsx create mode 100644 web-ui-external-feedback/src/components/notes/__snapshots__/Note.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/opportunity/OpportunityCard.jsx create mode 100644 web-ui-external-feedback/src/components/opportunity/OpportunityCard.stories.jsx create mode 100644 web-ui-external-feedback/src/components/opportunity/OpportunityCard.test.jsx create mode 100644 web-ui-external-feedback/src/components/opportunity/__snapshots__/OpportunityCard.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/personnel/Personnel.css create mode 100644 web-ui-external-feedback/src/components/personnel/Personnel.jsx create mode 100644 web-ui-external-feedback/src/components/personnel/Personnel.test.jsx create mode 100644 web-ui-external-feedback/src/components/personnel/__snapshots__/Personnel.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/private-note/PrivateNote.css create mode 100644 web-ui-external-feedback/src/components/private-note/PrivateNote.jsx create mode 100644 web-ui-external-feedback/src/components/private-note/PrivateNote.test.jsx create mode 100644 web-ui-external-feedback/src/components/private-note/__snapshots__/PrivateNote.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/profile/Profile.css create mode 100644 web-ui-external-feedback/src/components/profile/Profile.jsx create mode 100644 web-ui-external-feedback/src/components/profile/Profile.test.jsx create mode 100644 web-ui-external-feedback/src/components/profile/Search.css create mode 100644 web-ui-external-feedback/src/components/profile/Search.jsx create mode 100644 web-ui-external-feedback/src/components/profile/__snapshots__/Profile.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/pulse/Pulse.css create mode 100644 web-ui-external-feedback/src/components/pulse/Pulse.jsx create mode 100644 web-ui-external-feedback/src/components/pulse/Pulse.test.jsx create mode 100644 web-ui-external-feedback/src/components/pulse/__snapshots__/Pulse.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/received_request_card/ReceivedRequestCard.css create mode 100644 web-ui-external-feedback/src/components/received_request_card/ReceivedRequestCard.jsx create mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/CheckinReport.css create mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/CheckinReport.jsx create mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/HorizontalLinearStepper.jsx create mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/LinkSection.css create mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/LinkSection.jsx create mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/TeamMemberMap.css create mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/TeamMemberMap.jsx create mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/TeamMemberMap.test.jsx create mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/checkin-utils.js create mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/checkin-utils.test.js create mode 100644 web-ui-external-feedback/src/components/reviews/SelectUserModal.jsx create mode 100644 web-ui-external-feedback/src/components/reviews/SelfReview.jsx create mode 100644 web-ui-external-feedback/src/components/reviews/TeamMemberReview.jsx create mode 100644 web-ui-external-feedback/src/components/reviews/TeamReviews.css create mode 100644 web-ui-external-feedback/src/components/reviews/TeamReviews.jsx create mode 100644 web-ui-external-feedback/src/components/reviews/periods/ReviewPeriodCard.css create mode 100644 web-ui-external-feedback/src/components/reviews/periods/ReviewPeriodCard.jsx create mode 100644 web-ui-external-feedback/src/components/reviews/periods/ReviewPeriodStepper.jsx create mode 100644 web-ui-external-feedback/src/components/reviews/periods/ReviewPeriodStepper.stories.jsx create mode 100644 web-ui-external-feedback/src/components/reviews/periods/ReviewPeriodStepper.test.jsx create mode 100644 web-ui-external-feedback/src/components/reviews/periods/ReviewPeriods.jsx create mode 100644 web-ui-external-feedback/src/components/reviews/periods/__snapshots__/ReviewPeriodStepper.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/reviews/periods/reviewStatus.json create mode 100644 web-ui-external-feedback/src/components/routes/Routes.jsx create mode 100644 web-ui-external-feedback/src/components/search-results/SearchBirthdayAnniversaryResults.jsx create mode 100644 web-ui-external-feedback/src/components/search-results/SearchResults.jsx create mode 100644 web-ui-external-feedback/src/components/select-skills-dialog/SelectSkillsDialog.jsx create mode 100644 web-ui-external-feedback/src/components/select-skills-dialog/SelectSkillsDialog.test.jsx create mode 100644 web-ui-external-feedback/src/components/select-skills-dialog/__snapshots__/SelectSkillsDialog.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/sentiment_icon/SentimentIcon.css create mode 100644 web-ui-external-feedback/src/components/sentiment_icon/SentimentIcon.jsx create mode 100644 web-ui-external-feedback/src/components/sentiment_icon/SentimentIcon.stories.jsx create mode 100644 web-ui-external-feedback/src/components/sentiment_icon/SentimentIcon.test.jsx create mode 100644 web-ui-external-feedback/src/components/sentiment_icon/__snapshots__/SentimentIcon.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/settings/index.js create mode 100644 web-ui-external-feedback/src/components/settings/types/boolean.jsx create mode 100644 web-ui-external-feedback/src/components/settings/types/boolean.stories.jsx create mode 100644 web-ui-external-feedback/src/components/settings/types/color.jsx create mode 100644 web-ui-external-feedback/src/components/settings/types/color.stories.jsx create mode 100644 web-ui-external-feedback/src/components/settings/types/file.jsx create mode 100644 web-ui-external-feedback/src/components/settings/types/file.stories.jsx create mode 100644 web-ui-external-feedback/src/components/settings/types/number.jsx create mode 100644 web-ui-external-feedback/src/components/settings/types/number.stories.jsx create mode 100644 web-ui-external-feedback/src/components/settings/types/string.jsx create mode 100644 web-ui-external-feedback/src/components/settings/types/string.stories.jsx create mode 100644 web-ui-external-feedback/src/components/skeleton_loader/SkeletonLoader.jsx create mode 100644 web-ui-external-feedback/src/components/skeleton_loader/SkeletonLoader.stories.jsx create mode 100644 web-ui-external-feedback/src/components/skeleton_loader/SkeletonLoader.test.jsx create mode 100644 web-ui-external-feedback/src/components/skeleton_loader/__snapshots__/SkeletonLoader.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/skill-category-card/SkillCategoryCard.jsx create mode 100644 web-ui-external-feedback/src/components/skill-category-card/SkillCategoryCard.test.jsx create mode 100644 web-ui-external-feedback/src/components/skill-category-card/__snapshots__/SkillCategoryCard.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/skill-category-new-dialog/SkillCategoryNewDialog.jsx create mode 100644 web-ui-external-feedback/src/components/skill-category-new-dialog/SkillCategoryNewDialog.test.jsx create mode 100644 web-ui-external-feedback/src/components/skill-category-new-dialog/__snapshots__/SkillCategoryNewDialog.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/skills/SkillSection.css create mode 100644 web-ui-external-feedback/src/components/skills/SkillSection.jsx create mode 100644 web-ui-external-feedback/src/components/skills/SkillSlider.css create mode 100644 web-ui-external-feedback/src/components/skills/SkillSlider.jsx create mode 100644 web-ui-external-feedback/src/components/snackbar/SnackBarWithContext.jsx create mode 100644 web-ui-external-feedback/src/components/split-button/SplitButton.jsx create mode 100644 web-ui-external-feedback/src/components/split-button/SplitButton.stories.jsx create mode 100644 web-ui-external-feedback/src/components/split-button/SplitButton.test.jsx create mode 100644 web-ui-external-feedback/src/components/split-button/__snapshots__/SplitButton.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/team-member/MemberIcon.jsx create mode 100644 web-ui-external-feedback/src/components/team-member/MemberIcon.test.jsx create mode 100644 web-ui-external-feedback/src/components/team-member/TeamMember.css create mode 100644 web-ui-external-feedback/src/components/team-member/TeamMemberContainer.jsx create mode 100644 web-ui-external-feedback/src/components/team-member/TeamMemberContainer.test.jsx create mode 100644 web-ui-external-feedback/src/components/team-member/TeamMemberSelect.css create mode 100644 web-ui-external-feedback/src/components/team-member/TeamMemberSelect.jsx create mode 100644 web-ui-external-feedback/src/components/team-member/TeamMemberSelect.test.jsx create mode 100644 web-ui-external-feedback/src/components/team-member/__snapshots__/MemberIcon.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/team-member/__snapshots__/TeamMemberContainer.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/team-member/__snapshots__/TeamMemberSelect.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/team-results/EditTeamModal.css create mode 100644 web-ui-external-feedback/src/components/team-results/EditTeamModal.jsx create mode 100644 web-ui-external-feedback/src/components/team-results/EditTeamModal.spec.jsx create mode 100644 web-ui-external-feedback/src/components/team-results/TeamResults.css create mode 100644 web-ui-external-feedback/src/components/team-results/TeamResults.jsx create mode 100644 web-ui-external-feedback/src/components/team-results/TeamResults.test.jsx create mode 100644 web-ui-external-feedback/src/components/team-results/TeamSummaryCard.jsx create mode 100644 web-ui-external-feedback/src/components/team-results/TeamSummaryCard.test.jsx create mode 100644 web-ui-external-feedback/src/components/team-results/TeamsActions.jsx create mode 100644 web-ui-external-feedback/src/components/team-results/TeamsActions.test.jsx create mode 100644 web-ui-external-feedback/src/components/team-results/__snapshots__/TeamResults.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/team-results/__snapshots__/TeamSummaryCard.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/team-results/__snapshots__/TeamsActions.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/template-card/TemplateCard.css create mode 100644 web-ui-external-feedback/src/components/template-card/TemplateCard.jsx create mode 100644 web-ui-external-feedback/src/components/template-card/TemplateCard.stories.jsx create mode 100644 web-ui-external-feedback/src/components/template-card/TemplateCard.test.jsx create mode 100644 web-ui-external-feedback/src/components/template-card/__snapshots__/TemplateCard.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/template-preview-modal/TemplatePreviewModal.css create mode 100644 web-ui-external-feedback/src/components/template-preview-modal/TemplatePreviewModal.jsx create mode 100644 web-ui-external-feedback/src/components/template-preview-modal/ad_hoc_creation_form/AdHocCreationForm.jsx create mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/ViewFeedbackResponses.css create mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/ViewFeedbackResponses.jsx create mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/ViewFeedbackResponses.stories.jsx create mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/ViewFeedbackResponses.test.jsx create mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/__snapshots__/ViewFeedbackResponses.test.jsx.snap create mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/feedback_response_card/FeedbackResponseCard.css create mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/feedback_response_card/FeedbackResponseCard.jsx create mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/feedback_response_card/FeedbackResponseCard.stories.jsx create mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/feedback_response_card/FeedbackResponseCard.test.tsx create mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/feedback_response_card/__snapshots__/FeedbackResponseCard.test.tsx.snap create mode 100644 web-ui-external-feedback/src/components/volunteer/Organizations.jsx create mode 100644 web-ui-external-feedback/src/components/volunteer/VolunteerBadges.jsx create mode 100644 web-ui-external-feedback/src/components/volunteer/VolunteerEvents.jsx create mode 100644 web-ui-external-feedback/src/components/volunteer/VolunteerRelationships.jsx create mode 100644 web-ui-external-feedback/src/components/volunteer/VolunteerTables.css create mode 100644 web-ui-external-feedback/src/components/volunteer/VolunteerTables.jsx create mode 100644 web-ui-external-feedback/src/context/AppContext.jsx create mode 100644 web-ui-external-feedback/src/context/actions.js create mode 100644 web-ui-external-feedback/src/context/reducer.js create mode 100644 web-ui-external-feedback/src/context/selectors.js create mode 100644 web-ui-external-feedback/src/context/selectors.test.js create mode 100644 web-ui-external-feedback/src/context/thunks.js create mode 100644 web-ui-external-feedback/src/context/util.js create mode 100644 web-ui-external-feedback/src/helpers/celebration.js create mode 100644 web-ui-external-feedback/src/helpers/checks.js create mode 100644 web-ui-external-feedback/src/helpers/datetime.js create mode 100644 web-ui-external-feedback/src/helpers/datetime.test.js create mode 100644 web-ui-external-feedback/src/helpers/index.js create mode 100644 web-ui-external-feedback/src/helpers/query-parameters.js create mode 100644 web-ui-external-feedback/src/helpers/sanitizehtml.js create mode 100644 web-ui-external-feedback/src/helpers/strings.js create mode 100644 web-ui-external-feedback/src/helpers/strings.test.js create mode 100644 web-ui-external-feedback/src/helpers/toast.js create mode 100644 web-ui-external-feedback/src/index.css create mode 100644 web-ui-external-feedback/src/index.jsx create mode 100644 web-ui-external-feedback/src/logo.svg create mode 100644 web-ui-external-feedback/src/pages/AnniversaryReportPage.jsx create mode 100644 web-ui-external-feedback/src/pages/AnniversaryReportPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/AnnualReviewReportPage.css create mode 100644 web-ui-external-feedback/src/pages/AnnualReviewReportPage.jsx create mode 100644 web-ui-external-feedback/src/pages/BirthdayAnniversaryReportPage.css create mode 100644 web-ui-external-feedback/src/pages/BirthdayReportPage.jsx create mode 100644 web-ui-external-feedback/src/pages/BirthdayReportPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/CertificationReportPage.css create mode 100644 web-ui-external-feedback/src/pages/CertificationReportPage.jsx create mode 100644 web-ui-external-feedback/src/pages/CheckinsPage.css create mode 100644 web-ui-external-feedback/src/pages/CheckinsPage.jsx create mode 100644 web-ui-external-feedback/src/pages/CheckinsPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/CheckinsReportPage.css create mode 100644 web-ui-external-feedback/src/pages/CheckinsReportPage.jsx create mode 100644 web-ui-external-feedback/src/pages/EditPermissionsPage.css create mode 100644 web-ui-external-feedback/src/pages/EditPermissionsPage.jsx create mode 100644 web-ui-external-feedback/src/pages/EditPermissionsPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/EditPermissionsPageRoles.jsx create mode 100644 web-ui-external-feedback/src/pages/EditSkillsPage.css create mode 100644 web-ui-external-feedback/src/pages/EditSkillsPage.jsx create mode 100644 web-ui-external-feedback/src/pages/EditSkillsPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/EmailPage.css create mode 100644 web-ui-external-feedback/src/pages/EmailPage.jsx create mode 100644 web-ui-external-feedback/src/pages/ErrorBoundaryPage.css create mode 100644 web-ui-external-feedback/src/pages/ErrorBoundaryPage.jsx create mode 100644 web-ui-external-feedback/src/pages/ErrorBoundaryPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/FeedbackRequestPage.css create mode 100644 web-ui-external-feedback/src/pages/FeedbackRequestPage.jsx create mode 100644 web-ui-external-feedback/src/pages/FeedbackRequestPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/FeedbackSubmitPage.jsx create mode 100644 web-ui-external-feedback/src/pages/GuildsPage.jsx create mode 100644 web-ui-external-feedback/src/pages/GuildsPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/HomePage.css create mode 100644 web-ui-external-feedback/src/pages/HomePage.jsx create mode 100644 web-ui-external-feedback/src/pages/HomePage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/KudosPage.css create mode 100644 web-ui-external-feedback/src/pages/KudosPage.jsx create mode 100644 web-ui-external-feedback/src/pages/ManageKudosPage.css create mode 100644 web-ui-external-feedback/src/pages/ManageKudosPage.jsx create mode 100644 web-ui-external-feedback/src/pages/MemberProfilePage.css create mode 100644 web-ui-external-feedback/src/pages/MemberProfilePage.jsx create mode 100644 web-ui-external-feedback/src/pages/MemberProfilePage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/MeritReportPage.css create mode 100644 web-ui-external-feedback/src/pages/MeritReportPage.jsx create mode 100644 web-ui-external-feedback/src/pages/PeoplePage.css create mode 100644 web-ui-external-feedback/src/pages/PeoplePage.jsx create mode 100644 web-ui-external-feedback/src/pages/PeoplePage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/PermissionsPage.css create mode 100644 web-ui-external-feedback/src/pages/PermissionsPage.jsx create mode 100644 web-ui-external-feedback/src/pages/PermissionsPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/ProfilePage.css create mode 100644 web-ui-external-feedback/src/pages/ProfilePage.jsx create mode 100644 web-ui-external-feedback/src/pages/PulsePage.css create mode 100644 web-ui-external-feedback/src/pages/PulsePage.jsx create mode 100644 web-ui-external-feedback/src/pages/PulsePage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/PulseReportPage.css create mode 100644 web-ui-external-feedback/src/pages/PulseReportPage.jsx create mode 100644 web-ui-external-feedback/src/pages/PulseReportPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/ReceivedRequestsPage.css create mode 100644 web-ui-external-feedback/src/pages/ReceivedRequestsPage.jsx create mode 100644 web-ui-external-feedback/src/pages/ReviewsPage.jsx create mode 100644 web-ui-external-feedback/src/pages/SelfReviewsPage.jsx create mode 100644 web-ui-external-feedback/src/pages/SelfReviewsPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/SettingsPage.css create mode 100644 web-ui-external-feedback/src/pages/SettingsPage.jsx create mode 100644 web-ui-external-feedback/src/pages/SettingsPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/SkillCategoriesPage.css create mode 100644 web-ui-external-feedback/src/pages/SkillCategoriesPage.jsx create mode 100644 web-ui-external-feedback/src/pages/SkillCategoriesPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/SkillCategoryEditPage.css create mode 100644 web-ui-external-feedback/src/pages/SkillCategoryEditPage.jsx create mode 100644 web-ui-external-feedback/src/pages/SkillCategoryEditPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/SkillReportPage.css create mode 100644 web-ui-external-feedback/src/pages/SkillReportPage.jsx create mode 100644 web-ui-external-feedback/src/pages/SkillReportPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/TeamSkillReportPage.css create mode 100644 web-ui-external-feedback/src/pages/TeamSkillReportPage.jsx create mode 100644 web-ui-external-feedback/src/pages/TeamSkillReportPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/TeamsPage.jsx create mode 100644 web-ui-external-feedback/src/pages/ViewFeedbackPage.css create mode 100644 web-ui-external-feedback/src/pages/ViewFeedbackPage.jsx create mode 100644 web-ui-external-feedback/src/pages/ViewFeedbackPage.test.jsx create mode 100644 web-ui-external-feedback/src/pages/VolunteerReportPage.jsx create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/AnniversaryReportPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/BirthdayReportPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/CheckinsPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/DirectoryPage.test.js.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/EditPermissionsPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/EditSkillsPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/ErrorBoundaryPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/FeedbackRequestPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/GuildsPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/HomePage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/MemberProfilePage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/PeoplePage.test.js.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/PeoplePage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/PermissionsPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/PulsePage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/PulseReportPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/SelfReviewsPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/SettingsPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/SkillCategoriesPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/SkillCategoryEditPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/SkillReportPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/TeamSkillReportPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/pages/__snapshots__/ViewFeedbackPage.test.jsx.snap create mode 100644 web-ui-external-feedback/src/serviceWorker.js create mode 100644 web-ui-external-feedback/src/setupTests.js create mode 100644 web-ui-external-feedback/src/styles/variables.css create mode 100644 web-ui-external-feedback/src/vite-env.d.ts create mode 100644 web-ui-external-feedback/tsconfig.json create mode 100644 web-ui-external-feedback/vite.config.ts diff --git a/server/build.gradle b/server/build.gradle index 5879128f30..fa7bb8e936 100755 --- a/server/build.gradle +++ b/server/build.gradle @@ -78,6 +78,7 @@ dependencies { annotationProcessor("io.micronaut.security:micronaut-security-annotations") yarnBuildElements(project(":web-ui")) + yarnBuildElements(project(":web-ui-external-feedback")) implementation("io.micronaut:micronaut-jackson-databind") implementation("io.micronaut:micronaut-http-client") @@ -175,6 +176,11 @@ if(System.getenv("SKIP_WEB_UI") == null || System.getenv("SKIP_WEB_UI") == "fals from configurations.named('yarnBuildElements') } } + processResources { + into('public-external-feedback') { + from configurations.named('yarnBuildElements') + } + } } application { diff --git a/server/src/main/java/com/objectcomputing/checkins/security/HomeController.java b/server/src/main/java/com/objectcomputing/checkins/security/HomeController.java index 529fcc82b5..48509ace53 100644 --- a/server/src/main/java/com/objectcomputing/checkins/security/HomeController.java +++ b/server/src/main/java/com/objectcomputing/checkins/security/HomeController.java @@ -42,8 +42,8 @@ public Map forbidden(@Nullable Principal principal) { * Forwards any unmapped paths (except those containing a period) to the client {@code index.html}. * @return forward to client {@code index.html}. */ - // 2024-10-29 - Note the path excludes "/feedbackExternalRecipient", which is handled by HomeExternalRecipientController - @Get("/{path:^(?!feedbackExternalRecipient)([^\\.]+)$}") + // 2024-10-29 - Note the path excludes "/externalFeedback", which is handled by HomeExternalRecipientController + @Get("/{path:^(?!externalFeedback)([^\\.]+)$}") public Optional forward(String path) { LOG.info("HomeController, forward, path: " + path); return environment.getResource("public/index.html").map(StreamedFile::new); diff --git a/server/src/main/java/com/objectcomputing/checkins/security/HomeExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/security/HomeExternalRecipientController.java index 0b2b2a4e77..75fe87b37b 100644 --- a/server/src/main/java/com/objectcomputing/checkins/security/HomeExternalRecipientController.java +++ b/server/src/main/java/com/objectcomputing/checkins/security/HomeExternalRecipientController.java @@ -30,7 +30,7 @@ public HomeExternalRecipientController(Environment environment) { this.environment = environment; } - @Get("/feedbackExternalRecipient/{path:.+}") + @Get("/externalFeedback/{path:.+}") public Optional forward(String path) { LOG.info("HomeExternalRecipientController, forward, path: " + path); return environment.getResource("public-external-feedback/index_external_recipient.html").map(StreamedFile::new); diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java index 9ddfd37505..4fb6788272 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java @@ -159,7 +159,7 @@ public void sendNewRequestEmail(FeedbackRequest storedRequest) { reviewerExternalRecipient = feedbackExternalRecipientServices.getById(recipientOrExternalRecipientId); reviewerFirstName = reviewerExternalRecipient.getFirstName(); reviewerEmail = reviewerExternalRecipient.getEmail(); - urlFeedbackSubmit = "/feedbackExternalRecipient/submitForExternalRecipient?request="; + urlFeedbackSubmit = "/externalFeedback/submitForExternalRecipient?request="; } else { recipientOrExternalRecipientId = storedRequest.getRecipientId(); reviewerMemberProfile = memberProfileServices.getById(recipientOrExternalRecipientId); diff --git a/settings.gradle b/settings.gradle index 116e75ae76..4af38a824d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,4 +11,5 @@ pluginManagement { } rootProject.name="check-ins" include "web-ui" -include "server" \ No newline at end of file +include "web-ui-external-feedback" +include "server" diff --git a/web-ui-external-feedback/.env b/web-ui-external-feedback/.env new file mode 100644 index 0000000000..ec8a1f535f --- /dev/null +++ b/web-ui-external-feedback/.env @@ -0,0 +1 @@ +VITE_APP_API_URL=http://localhost:8080 \ No newline at end of file diff --git a/web-ui-external-feedback/.gitignore b/web-ui-external-feedback/.gitignore new file mode 100644 index 0000000000..8a09b92a28 --- /dev/null +++ b/web-ui-external-feedback/.gitignore @@ -0,0 +1,27 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build +/dist + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +yarn.lock +package-lock.json diff --git a/web-ui-external-feedback/.java-version b/web-ui-external-feedback/.java-version new file mode 100644 index 0000000000..5f39e91446 --- /dev/null +++ b/web-ui-external-feedback/.java-version @@ -0,0 +1 @@ +21.0 diff --git a/web-ui-external-feedback/.nvmrc b/web-ui-external-feedback/.nvmrc new file mode 100644 index 0000000000..2220b56d84 --- /dev/null +++ b/web-ui-external-feedback/.nvmrc @@ -0,0 +1 @@ +stable/* diff --git a/web-ui-external-feedback/.prettierignore b/web-ui-external-feedback/.prettierignore new file mode 100644 index 0000000000..f6e4a3015f --- /dev/null +++ b/web-ui-external-feedback/.prettierignore @@ -0,0 +1 @@ +_variables.css \ No newline at end of file diff --git a/web-ui-external-feedback/.prettierrc b/web-ui-external-feedback/.prettierrc new file mode 100644 index 0000000000..b26242a241 --- /dev/null +++ b/web-ui-external-feedback/.prettierrc @@ -0,0 +1,6 @@ +{ + "arrowParens": "avoid", + "singleQuote": true, + "trailingComma": "none", + "endOfLine": "auto" +} diff --git a/web-ui-external-feedback/.storybook/main.js b/web-ui-external-feedback/.storybook/main.js new file mode 100644 index 0000000000..921b80b391 --- /dev/null +++ b/web-ui-external-feedback/.storybook/main.js @@ -0,0 +1,22 @@ +module.exports = { + "stories": ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"], + "staticDirs": ["../public-external-feedback"], //👈 Configures the static asset folder in Storybook + "core": { + "disableTelemetry": true, // 👈 Disables telemetry + }, + + "addons": [ + "@storybook/addon-links", + "@storybook/addon-essentials", + "@storybook/preset-create-react-app" + ], + + "framework": { + "name": "@storybook/react-webpack5", + "options": {} + }, + + "docs": { + "autodocs": true + } +} diff --git a/web-ui-external-feedback/README.md b/web-ui-external-feedback/README.md new file mode 100644 index 0000000000..9c40dcdc3d --- /dev/null +++ b/web-ui-external-feedback/README.md @@ -0,0 +1,68 @@ +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `yarn start` + +Runs the app in the development mode.
+Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.
+You will also see any lint errors in the console. + +### `yarn test` + +Launches the test runner in the interactive watch mode.
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `yarn build` + +Builds the app for production to the `build` folder.
+It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `yarn eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting + +### Analyzing the Bundle Size + +This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size + +### Making a Progressive Web App + +This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app + +### Advanced Configuration + +This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration + +### Deployment + +This section has moved here: https://facebook.github.io/create-react-app/docs/deployment + +### `yarn build` fails to minify + +This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify diff --git a/web-ui-external-feedback/build.gradle b/web-ui-external-feedback/build.gradle new file mode 100644 index 0000000000..c8f23f8096 --- /dev/null +++ b/web-ui-external-feedback/build.gradle @@ -0,0 +1,83 @@ +plugins { + id "java" + id "com.github.node-gradle.node" version "7.0.2" +} + +java { + sourceCompatibility = JavaVersion.toVersion("21") + targetCompatibility = JavaVersion.toVersion("21") +} + +node { + version = '20.11.1' // https://nodejs.org/en/ + yarnVersion = '1.22.21' // https://yarnpkg.com/en/ + download = true +} + +yarn_run_coverage { + group 'verification' + outputs.dir 'coverage' +} + +def yarn = tasks.named("yarn") + +def distDir = layout.projectDirectory.dir("dist") + +def yarnBuildTask = tasks.register("yarnBuild", YarnTask) { + group 'build' + inputs.files(fileTree('node_modules')) + inputs.files(fileTree('public-external-feedback')) + inputs.files(fileTree('src')) + inputs.file('index.html') + inputs.file('package.json') + inputs.file('tsconfig.json') + inputs.file('vite.config.ts') + inputs.file('yarn.lock') + + outputs.dir(distDir) + + dependsOn yarn + args = ['run', 'build'] +} + +configurations { + yarnBuildElements { + canBeResolved = false + canBeConsumed = true + attributes { + attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage, "yarnBuild-elements")) + } + } +} + +artifacts { + yarnBuildElements(distDir) { + builtBy(yarnBuildTask) + } +} + +sourceSets { + java { + main { + resources { + // This makes the processResources task automatically depend on the buildWebapp one + srcDir yarnBuildTask + } + } + } +} + +sonarqube { + properties { + property "sonar.sourceEncoding", "UTF-8" + property "sonar.sources", "src/" + property "sonar.exclusions", "**/*.stories.js,**/*.test.js,**/*.spec.js,**/*.stories.jsx,**/*.test.jsx,**/*.spec.jsx" + property "sonar.coverage.exclusions", "**/*.stories.js,**/*.test.js,**/*.spec.js,**/*.stories.jsx,**/*.test.jsx,**/*.spec.jsx" + property "sonar.javascript.lcov.reportPaths", layout.projectDirectory.file("coverage/coverage-final.json").getAsFile() + } +} + +check { + dependsOn yarn_run_coverage +} + diff --git a/web-ui-external-feedback/eslint.config.js b/web-ui-external-feedback/eslint.config.js new file mode 100644 index 0000000000..799fc1efdf --- /dev/null +++ b/web-ui-external-feedback/eslint.config.js @@ -0,0 +1,42 @@ +import globals from 'globals'; +import reactHooksPlugin from 'eslint-plugin-react-hooks'; +import reactPlugin from 'eslint-plugin-react'; +import vitestPlugin from 'eslint-plugin-vitest'; +import tseslint from 'typescript-eslint'; + +/** + * @type {import('eslint').Linter.FlatConfig[]} + */ +export default [ + { + files: ['src/**/*.js', 'src/**/*.jsx', 'src/**/*.ts', 'src/**/*.tsx'], + languageOptions: { + parser: tseslint.parser, + parserOptions: { + ecmaFeatures: { + jsx: true + } + }, + globals: { + ...globals.browser, + ...globals.node, + ...vitestPlugin.environments.env.globals, + HttpResponse: false, + snapshot: false, + waitForSnapshot: false + } + }, + plugins: { + react: reactPlugin, + 'react-hooks': reactHooksPlugin, + '@typescript-eslint': tseslint.plugin, + vitest: vitestPlugin + }, + rules: { + // Override default rules here. + 'react-hooks/exhaustive-deps': 'warn', + ...vitestPlugin.configs.recommended.rules, + 'vitest/expect-expect': 'off' + } + } +]; diff --git a/web-ui-external-feedback/index.html b/web-ui-external-feedback/index.html new file mode 100644 index 0000000000..666fe580b6 --- /dev/null +++ b/web-ui-external-feedback/index.html @@ -0,0 +1,46 @@ + + + + + + + + + + + + + Check-Ins - Team Engagement Platform + + + +
+ + + + diff --git a/web-ui-external-feedback/package.json b/web-ui-external-feedback/package.json new file mode 100644 index 0000000000..e3c60f5346 --- /dev/null +++ b/web-ui-external-feedback/package.json @@ -0,0 +1,106 @@ +{ + "name": "web-ui-external-feedback", + "version": "0.8.7", + "private": true, + "type": "module", + "dependencies": { + "@braintree/sanitize-url": "^7.1.0", + "@date-io/date-fns": "^1.3.13", + "@emotion/jest": "^11.5.0", + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.0", + "@fortawesome/fontawesome-svg-core": "^1.3.0", + "@fortawesome/free-regular-svg-icons": "^6.0.0", + "@fortawesome/free-solid-svg-icons": "^6.0.0", + "@fortawesome/react-fontawesome": "^0.1.17", + "@mui/icons-material": "^5.15.14", + "@mui/lab": "^5.0.0-alpha.169", + "@mui/material": "^5.15.14", + "@mui/styled-engine-sc": "^6.0.0-alpha.18", + "@mui/styles": "^5.15.14", + "@mui/x-date-pickers": "^7.3.1", + "@tinymce/tinymce-react": "^5.0.0", + "axios": "^1.7.4", + "canvas-confetti": "^1.6.0", + "date-fns": "^2.24.0", + "dayjs": "^1.11.11", + "dompurify": "^3.1.0", + "fuse.js": "^6.4.6", + "html-react-parser": "^5.1.12", + "isomorphic-fetch": "^3.0.0", + "js-file-download": "^0.4.12", + "lodash": "^4.17.21", + "markdown-builder": "^0.9.0", + "mjml": "^5.0.0-alpha.4", + "mjml-browser": "^5.0.0-alpha.4", + "qs": "^6.13.0", + "query-string": "^7.0.1", + "raf": "^3.4.1", + "react": "^18.2.0", + "react-beautiful-dnd": "^13.1.0", + "react-dom": "^18.2.0", + "react-error-boundary": "^3.1.3", + "react-jss": "^10.4.0", + "react-modal": "^3.14.3", + "react-router-dom": "^5.3.0", + "react-swipeable-views": "^0.14.0", + "recharts": "^2.12.4", + "reselect": "^4.0.0", + "styled-components": "^6.1.8" + }, + "scripts": { + "build-ladle": "ladle build", + "build": "vite build", + "coverage": "vitest run --coverage --watch=false", + "format": "prettier --write 'src/**/*.{css,html,js,jsx,ts,tsx}'", + "ladle": "ladle serve", + "lint": "eslint --fix --quiet", + "serve": "vite preview", + "start": "vite", + "test": "vitest", + "update-test": "vitest -u" + }, + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@ladle/react": "^4.1.2", + "@testing-library/jest-dom": "^6.4.5", + "@testing-library/react": "^14.2.2", + "@testing-library/react-hooks": "^8.0.1", + "@testing-library/user-event": "^14.5.2", + "@types/react-router-dom": "^5.3.0", + "@vitejs/plugin-react-swc": "^3.6.0", + "@vitest/coverage-v8": "^1.4.0", + "eslint": "^9.1.1", + "eslint-plugin-react": "^7.34.1", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-vitest": "^0.5.4", + "globals": "^15.0.0", + "happy-dom": "^15.10.2", + "jest-fetch-mock": "^3.0.3", + "jsdom": "^24.0.0", + "msw": "^2.6.4", + "prettier": "3.2.5", + "prop-types": "^15.8.1", + "react-test-renderer": "^18.2.0", + "typescript": "^5.4.5", + "typescript-eslint": "^7.7.1", + "vite": "^5.2.14", + "vite-tsconfig-paths": "^4.3.2", + "vitest": "^1.6.0", + "vitest-fetch-mock": "^0.2.2" + } +} diff --git a/web-ui-external-feedback/public-external-feedback/default_profile.jpg b/web-ui-external-feedback/public-external-feedback/default_profile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1490a8e56e64163173a9c3f2633ca97f15172997 GIT binary patch literal 5992 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 O_QCP~|JKF#2mcpA`vZvp literal 0 HcmV?d00001 diff --git a/web-ui-external-feedback/public-external-feedback/favicon.ico b/web-ui-external-feedback/public-external-feedback/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c612c76c693bf1eb43ff76064227f2295159a88a GIT binary patch literal 1150 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 NR0RNNh`?q5{|9c~2uc6| literal 0 HcmV?d00001 diff --git a/web-ui-external-feedback/public-external-feedback/fonts/roboto-400-italic.woff b/web-ui-external-feedback/public-external-feedback/fonts/roboto-400-italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..dcfeb0083663b3deb1dae10ac8817ff3cc745c6f GIT binary patch literal 14716 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 literal 0 HcmV?d00001 diff --git a/web-ui-external-feedback/public-external-feedback/fonts/roboto-500-medium-italic.woff b/web-ui-external-feedback/public-external-feedback/fonts/roboto-500-medium-italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..072ca9b236b39a18544e2b2e063de7f6ccf0fda8 GIT binary patch literal 14620 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 literal 0 HcmV?d00001 diff --git a/web-ui-external-feedback/public-external-feedback/fonts/roboto-500-medium.woff b/web-ui-external-feedback/public-external-feedback/fonts/roboto-500-medium.woff new file mode 100644 index 0000000000000000000000000000000000000000..d3c82e18468c2cceb36a5a9c199e5ae2cd2ca379 GIT binary patch literal 13248 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 F{{T_EoMQk0 literal 0 HcmV?d00001 diff --git a/web-ui-external-feedback/public-external-feedback/fonts/roboto-700-bold-italic.woff b/web-ui-external-feedback/public-external-feedback/fonts/roboto-700-bold-italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..7a0ae05e17a6e8f1b76133875dded5ff6aae52cb GIT binary patch literal 14708 zcmYj&18`+c)a{Lpi8ZmEiEaDFwsT|K#>BRbiET_Y6Wg5FPF}wMuUGGNomG9-s@a(}IqJ#th4Di*sT>vQm^}x0-{y)lp?Ei0)V&W120GQ^NCiDe4C}zkTNhL*< zFD)GafO-J{kQ8QL_BJF{)Ir;>*wZ)d_(NOH+^s0Kod^ z%f|Ez$1vb8`<7-#U+-*eU!3DVJY7`2TYiaOn(Y@S{Q@}>8gh;$$mMG++fM)h90&kF zxCKH`dfM8XeA#jAfB8}Sg&qY=fhUlW$Coc$|ILH=KR_UZKiV0A%)YdyFJAg(CxS)B z-05KN?DFN;e{;qB&+gL*VCn&e)ZYNsuY?2L_nHg8SRXcx_wWZys8Mv*tl}*3Q=uM$ z4c{Ba(FN_O!>Pux?z-~2=6Wf*zdU2I5r6^)Pv!xZoCxu=NDnJ)iz(^kdy7WzxxejN z3+Vqo{AxPCSIU4DwN0H{Iy1xl?sgZE1kyCB(mDH#s>P}lzJKez!_{9(tineaQVP`G z6+p?7b|kFE2d(aJ4~)IOXze;27k?xS#PTTKgqmcHkzGopXD9i=CWsY)b{1HJ2lNh$ z+@sn23O}g+z*#(o-X^IGRUBqJYPThFpJxly3Q4rFj%Dn=4BUruMhowQ_clzg?BS1+ zj^Jwi*di7*zCz;uT>~glP4`=@dy(%wMJZ9^F;k^9Q$ao$%99*c6Dd*E$5d5TQTNf4 zA>}ZYb^rqQ9c(LTLKjVSZOlL_-9NJ=kc6MH06p=P^((@DQHiX%j{|MldtvYKz~_^JPdGckhV~^{ODj3enS(ck0w%>7 zEhDQM;-^G^E+>3w9z))&CXX3eVf}`(vUi2C5`m0}csb%iy9JVW=_+&Pt*KL4ztfFI zpNu9{l@SubzE1cyGeKaH17ci~H@Lz84Hpvj4w`NlodagA@+HrDK$b&vM=J?U?{Tfu zGTA|s#&1xoD_~u7#?UwRARAdIVD?YoSv}0dfWR`!2h)-aYm>C3iz4z78f}&JT}v$` zO^9wFdPGjO zrTK+n>y2qT7{W)W^Lqkx)Ah?;eaa8Lanx<3O$) z2c$dM#Vwapcw`z-vR5bMvwQ2K294sCApX;LAIBSqpVTY-{edW%dZokT?UGcZ$?Pww z{)lI9zEsb@b#|HT4Pd!}ltb}T)B}(4XJ4zn3PGa=%Nw}h@MZJx$5vxj&pY#$7Y-KO z3hprRjOZ{$+Q8i>5SsnAK*@PZ`viBUiMFBm5O`xHB%Yk7qaooz5f2s?!2(Q-y8Kc!O6c2Dv8T!kjZv zVh-qfHErmuSs7KNWRkMk;7Y{l8N#9lnXhpf3CYO&El0M0s5izWVeC;%K~nDikmjQ_ zX_ZODO*AXrPp1$!m(Aq{=2L;)lAHDn(f=Itqg$~zTZ=balnQM|TgzkTkWHxpT4brN zFe1Hjx8$tsmp9qkb8wR|C`6A^T(?iMqv;-TFuHpLjEd&|JgC6%7_kxAlp4}$rn^@A z?W58kg;~A(Bcs@KOgik37?3jcCke2R=ZB1sjm9safXa|XrfRjuq8CMt#(>vBjmBTE zlGnS+Mxj{JR4LO~;Nn=b1kIxK5HwALwA13mFa3u5o9eVd}}j%JD&%beB>~g zh%l)wsBD*EJghD!4s)W`b?(MINEhPSOJ4&zhCee z2CZ;7T~E;oL*HP;@OA_Rr*TbCNfwCO4P(9)dc&kEBjtO5nHZWYo2?G^{qF1IiC#z# z3{)l*VKp$7GBGwZ1Q=6$^!42f1_(D0j;TUkZ@j;62v>jlui$*JFc&w>7#k}Y8fK#; znlu=1^yLFW&gV9g8rs|Z7&ZB8L}~{u$^0sZFE4a9CgYY`HNa# zD=OCd^xpb$^q5Wvif#J`-tUnmOtLG2z-hH@M5FXE5^My!N?c>a3O?Xwgr&!!hVRC&Sdb$)@8eg?Xxly_!(ZxB|MPeJH-K#_0!!`yt9Sj%6xs&p$ zP+Y(n#IstD{&g)zEyi8QJ>(bA>~Bv>#Cx^36n6mcH^%F6;JGA$_s#k4I;V%>P83Z0Q0WsIZ0 zHhKUU02}}d0RQ|1pm>1Ac)X^NFPeNjJQd|?bsLEB{3rlm6Y*fG+|H zeHYq|%}f?a?~LGfZ|jkO=I~2j`i++R^~!jzorP~bH)Qm)P!vs#9BVQ`1^lNG z0!nMx8i=ElABY62#K2+GR!9q$ZKbBH%05p>XqSfhF&7rUj%Q%$)IXu*(sYwa+kR^L zFv(vgTH4R4G z!$h?VlJc8;q6uExp>!vf$1v?O&HmTXZ zrmIJso5(OuuEw}b%u`0UDzEc>KL?@eaKuDg1uoM*)G4r$2`5Hi0AGR#lNDtTiXCWx zi80xHj7QMaV~0)$y=2Pl88ty*vH>~eBL5_YF$^2mxX222WXxJ+`RNwa^}>j7JMMn& zKI~nIMhf)ex!W0OoWI5qK121$|L)K-4@fJxWtN$zy++qfInG1^8vR>BFixVn$GJ8` z5kZ;e?W#wjBj63k^m}*T6^e>CodsxnyN}5o%R{HKh`UxVP}ZoM$Ss~5(?5S(v~H== zVVpd^F`K1m$Il8-ckIQEraVZ291p+Uqg#WbA2jqs^?2mlyhDp#sN zBqmN2_^`R%Eyk6fnLMV07}|`ZgKbFah|6~JZ0DBFO7`4aGUrkP|L)^F5-AFl4>LN) zH>8^u$wXk9H+1IY`wTU3MIf4PVPMF0^k!$vY;ZvRSRVO1+S$1E5*XS|P;_e`uPrio zqLCQ*$&CJCG5>MpEmbulVAJns-+xmj?4@!=yr9K$3e!$JSjNNTybLTSd#7l3SkXMs ze(9{sxh(M8UWI;G5(k2bv{Mp%lfGvtDn*r<|5sIQ$Oe$+?>|PBn!O9dmn>-VToZ zO{J}SqWgjlV#rJI5z|dzmpt-fwVIY!`mxv&hFEG`j6J8iL!7?u) zn=z?GA=+f}M6$~ijBjbNjT^?J_tjT8Iy#u0I+nYAts25fP=d2u&&jG1d=^K3poN^L zqOt(F>6GP3>bldToxBC#N-8=Rt((_3=Xn0EJbGhJmSbRxz-&^ zyq6qdm^?a}7`2%{CY1pGnd^)umEqp4cVOclxI{hXRHyZ=f{e7;LWX1RCY=uwiM(bW z9LCx8d2v3qiu)!&K)exJIV}Z;3hX~L(asHx9}w83m6li(Y}g8fkjpEJ>ybJV{)>y- zJ$Gr`2u#JE_?3gW$3s1q>_65;p=0dlc&ci%Y=V5wG_K6r_h=N_1)X}(Q^ z=m}gk8$fb5RLWL^fp;sL&Aw67ugr{tQ`zpJpMYNu-+5-fO-^r{NXjBSN2X#y@ZSUZ zWQ(N~yy2HRdrec@I0H&;LgBy8#?wNGFF^$rn@@Glct=|EG|KGtM0R<8pex9_5);IMLw;JIWicy zEqOqlt@2I~ABhz`p`iU)YTQL`=b<}(<7Fw88WOt}dP~1x-zhmhE60N5NDG5bT!f=C zuW|GaY!ab76JRy}$E+Y@ljUZHyv4Qsm|eLPReTlNf-kwqXIN3ky4d}_Yq1&$@^*~-I7+4K3e<7YUCsAvMS^8O`#mM z!?3hCj^TT0|AwlZ#_LzPb_v=VOX`- z?lM{X4VF{-Yfc{cjh8)Ae$Yd}9~Z0WEa^zbwYZdY#QKzbsjyUxRCjR6ZiyL797FH` zfUF@hIQWEVKr<;uVFKtyj&jf~lHlHG>0T{{GNJ0AuF_|)WM?-kwLWIEYDP(5_0#+n z`2OS*_Aiqe{x`-Ma;~;Z*n8KapeeL!*h*_ZI2@sj^$oowzo`A%c4N{+xZgEs$YVEIQQVl$xx)*E}u&*AEy4E!FTewv`ECASf?OHRHZ(sa+TF?=>L3;!+yRFDrZo_Q)d|Bd_6 zPuV=E9HJ@CxY6|H5dPTub+$mXuLn4K+&V>XbUYrmNFN^Q>r39>yn{BD(D0Lu$CoZ) z+Bb}2po3*np?+j#^qKlgo>bCu@#uy4YtG)M?l+4QM60-$-3ejfAER#2Bf`wuN`MgK>pr>mZ zIGcj#pOYnt>9V>6R$3h0-n#`fCTz}T+S7i&de9WlYZ+7G*-19*kLR=lX&U7-oGdAn zw0Y=q$Zwb&7id><_^;$dYmsWIzglq8$K^*CO54h1r14=^@ON;OiEOrUQt!1l?|Ijr zcDm2s_%+`7k95+$YrHn_A~(_wu+*{mQ}j28cCpB&89dIWIbl9G34KeA-`%?qm&Y<% zkrJD4S_>7mx16c{uK(eYS*0_YwB33@lg~uQW{SM-KR5x}O+I+HY3!}mywB2yfRpo0 zYK1iqFk>n37YwgXP&G2BH_0OsSuK6a-7i+tufDZBOh!8jXS8tt@%;$eF{pnQ8|2#; zB>FviUoVb-Ik%UpkfsGKUCJM2wSkwya0mN|fBSR**6&}*bsf`3TH(DDv*>l+erM>}j1Dj7XqVVv6H`%f2)p&Ye7}AZIhrW)`9Z zkr~Tn!IT=Ff$Y|K06x0Fx>dryqw>2mD({ce<(}d9Y1)s37FV&x3cOw-D_6`$fH3{n zb&HAON?%RTBC%!z<^b1F)b6B2BEo=OQhTr1cv(){b#O=MJt?q$P2k`9Qk+%vrMxR^ zaW0I>$82Yk?nXzRSsj?}xgu+d#ANAX|0FT!GCq!|^IX zi8|zygy|?$f|7NM~yZmrgzZ1%I?>A^uCPE>m`pcEV zH8STez9jD+Nq-oBqTF1QB}r~KZ*=S-$9FHp(rFxxgtdFM=j1SF&uv83RoekkwO{B< z$&!^ioodUx*pv;=Gu+c|&*idxW(Vx~V;8^qUrgz5+3Y6m5Y&rKfs%HcS<5)^STn5< zM}09Y4d?0snXZ<^vs*Kdcrod@%;iQke<;p2=7VuV0Rh}|R9ksC>zmHg+2D6SV zPc?EzcmBT6HOnDA#_(!ugX4eelyE1VdCj`Eh!t6jB4IFarhFIy^eB71B+Y?7IP`^hEb&j!(AdA_>2Tw_I{p>PNM>m&EJu-Do$Uy zoLYuP_-jLe{Ex3eGiir0!`j5etKT?9(OlfS0<6#eD699Wn^1Q`AdQne4J!95L&)F^ zlkyeJbw$PhO^e?tj3=?I-^Li*QMGV4;+$Jiiy*~x6qY7P`Xh%GA?23W3(;Y(W4d4q z6TML_f|Xki^jVa9;aL?^ihg$Y@l8(NzJzhrCTjTZA)-}vBB7cR;sAfxm4*Hrm=9)~ z9RK0F6ZoG02Ph>+tM5h*0vW3lFRcA!@npzSv?aQg5 z^*VhTh&DbNIYK0jUnU?$eKlJDwq{VUJrHK&^1Uj$l^~`0IxHm&mGE-Nr*SOWpEg4! zGREso^N&+*?yz)}8%p(1P*N>_fRYy$F&g{l4YjXA?jNq65y>klY`Y~#P0eCyz<@uQ z2-t5`1cTb@D0Sz4Wy17k>waPJ(0qeNeoWG(x&^Lu;IUo=xT@Y^XFxbyZ7 zEv?}azk_4?D1+%`UmW}l(Mm}$4jV|%(FFaqeUGhrarr$fo+siz7|uvK^kvb>ShK_m zt*zxZV5E{|B8Os<&y8W~Y6FU~^Ekkp_ai;JUqFZ8eBnWj>Xj;D?_(K6R?3l9lst!a z9_Un=vo1M{I3W3G%{9iQ?-Fr~%6(2qobh$W*V(^gleCRKcTS9@DAYSa{E2_0F!iO% z9LysmxWD`1y{lg>$IE7NTttQ#wsPb11*@@lt%V5S*qMK9B(-;b%QZ}joF^F(?tM@B|`8Y{>ru3gtwJ0tku z-H?;VB?K&DXVd2MMsB6Fg>~}Ic(xzZ)DlJz0%}le9e$O1C1bCTyHM#@ZPIr;(fwKb zn}@7m!0u%IK0tdux)5M1p0Kg{+J9z%t)`8@h(Ke;nHzg42zT=IHs52)_mF|1NmFe{ zCSO}a5otUGNN-d-oi3~Q_ z{ym3Y$SuvpA`gjw%R_%PsJ|+>Taro7yDvqk9T_CyA|Hd3(LPXaEX5**&QmLh(fd*m zV%!?HHmbzqXIb7D;~!V`qhD*i7r z9Su3JzAT)$4Mzn(GMlc#)0U?OVT4kTxkouzb%+au_>jv!>hR1RKV#N}Dbn!orU5^e zud3?as6K5g(+*^VXJ2WSp?o2RS~tyk8udm!LZAD3pe2?k0rGZPRor35v%Dc8FyhHq}WNAHR%J{ zkBdVr%(XZ-{XkhYk(5YkhSQ#6`2}u_9$U!GdFJ$pAp)h5P5?g3G_{H_z*5 zU%|=GyxZ?gtf0@|6n?rDWM;c8#!}b9!J$BO!I$nfZ4E_J*~C0v@jiJy^P ze;kKb!SUmjz#-f#E^Z^7*w?%C6}H&l`Zk%+bi;}`)_p`CDs;2mi@q{8s;vUMJt95v zifhu77y7aYl`X+{&RlYVZjFaNXbTp>&3qi zhfnR-nyLI~o8h7-IE0f5ad9;ouCn7ek~#b#$U*krN{wW7b>!TjkhVE4MisaLQTAa6 z0WzD6D^ERHg|tXrifz1Q3-J^l@`2bmr}@3O#O_%Y@1^EDsP>^PBw36` zPHEo-W=AMxJGA|9oB8LnrHslIhSs_{$LkN@AHKXLDoEksPDJR$_9JbAxJfV-D{t4N zL_Xb91wfMed_ZG7`A9Q8PsGfMHKhcxyl`7^fP#ZXXz*x(7ObS;FC7M32y zr~<}tU^I$YPB?d4)f0xDOYxtMIP!H`9}rbu6>Uw`ju68PsTeW0i$D1N$};cSb&SD^ z<5>5=#-Y9CzQ-|jh(`-L=y)i>LQ_^dulKTKrjEJ*v&Jn!>(+=-1Y_RSXZ7y1VWIOy z=ZMX=9)G})y_Nx4k8AFearT4EG6ZKYkUT-~3Fk8sP7+Y1n`knEVO}A(s_GHS6t^ql z({9izNH;Mom@JW57WpProu!R3xMU1et>M`Vje_gZUaQTqXGZxzk9`%T9THmlr!$F3 zOK7+FrSGuyDD$N9{eo;tO1?#4mV@bFP>F&y zaxy}cX_W%UOY@b7_EfV^2l$%y+9|^knTR9~W4j*j)S?-@z@8!bhO99K`X>qPq1aQz z0%g={Lf3`ZBW*>McPl<;mz|}YLiz%h?-d{}OZgfIw@?}#` zi9*7%i~7(js@S-w_ptym3`&HF@;pvt@0J?=z8 zH$;3!x5ZN@x)w3#WIM)NBQ*i7?i&In3B*yAbt_wB}J z2bFJDP4W=v8{Tf;}VWB0jK6V5E~gVfBRcopL28@NQ9SUKPLm^ZSS+ z(xWO$J6{?~{F3@OMMa$CsF&yI{VqkTs_-2gJ6@B+^6}#RS4-^HYG2)C49SG-$BlL7 zn*YSF)$*vl=+b%lC1g z2|t|#@a5yjsEYA`G3qs{_sDAL$4YQy&05Vv5)llO)7^U}K}@OQ(W%GL;g&?MQoxS> zgE{vq1X&7rvy<(Q;70y;^+yk{v4!)_3%iSaU69kOd#&&+YxAXU9YAW0Xl0y*ZKZ57 z6?ty<{S9GTJWp#O%oeA)n-`^;3J6@|ILFoNd3K+0L&0nDn-ga$j#ntVlSusIq#AGM z+S%G%7XK?PwtNoczz<^Rma9v6zhM|BF1DWU>Ng0s#_GnoETi7hXaKq7c-U%C(Sq3- zt??-5)Sv(H;NDz>Zb)H>BGOqN_Pn*!!C#fRJawV-W$fK|!>3kDc#^wv^bcUxqT|$3 zoc}?0A>Q*w7nA0qRMk_(VNgT5TSZHqTE<))yWXSSZd(-I??GelC~)Xieag{5Ky0;P zY2zum7to`aiY;`!(g@~DbXaS_sX%|1aSK31=ndN*{`e@n?dkrN$FCETqi$PrHyzf$ zwJy?OMRQTwc6Iq%xCR*EWjM?8V2M8)t8^0Ws$|DnvbG$H)UNb!XegrC7(0sci~qe$ z#S0Hek&L{nKbv`rNvpMj{uxrUjRn)Rur1mLP#$aypQgEFhH!+ zSP61ihQEkEw29j(W9Y72m{;^WM*8Y5C|*fTgf!riQ5JS<-0rDl!iOmXC=QKQLEd5zmx<#?2*63|5|2Q2gR zZY_=_bDpHkX(aB1V?N`n&p*>ROwlSeJ}^@Zj=01RPNzp_dms4UKB+FDz}^WDtHDkM ztph!kC(Hwy3`^wjI6;*GFhI>xVw`!}*tD3KOAF@t6CR?v5B~!{wmklIu@mU>xA-vq zdL}8pv0q_J@-2&#)SQf5i?FHn5eg0RC-lUzXRi3DKZU%QIum$rE>QS=oFn++n*Kozf>q9xh)LLuC?ny>_Qii^%>0fRZr;*5 zPO+saCEIw*t^=J>M{?pjPN(25IXNhJPy`H+;5;5GuS}9+N_OltF(G!5a(9PAI8{FE znz*2u(ujwTGcsqvaX~)rwCuzKtqtLX z3#dv%8it!rI{j9~i#bj+p+Z282cj`P*nCF~moNwW0V)^_QJyFngN)>8<>c zO80)pk>!Hz{6GT+4LTdeQqMzD-M31<085w-fRTlL5d38`A1ik74u^CiB2i(1^dMZ7 z$3%lNk8xBV^sAUfgERUEuW->TUKKI}xyE0JdgpI1uQZi z9~JqFojxz)=qywwYl~29TWq_tc74sB3mKqS_M&o7+of|_g1Zs7*{e4UnV!k{Tf450 z%GxasM(lcqw8KId?4e9GB`z~pLJ-G)ip96zFLZzvV}A@u=+anS%6LDqYTej5D!!;W{mli16n;G6_Bac$<_Z3i6e#TO zRrEF|i%cGp!!P!kMCWt%#!=M%8wbRl(uP`f;`lhn@(mAw7RnJ)pwrr>PaB$+r+RH$ zv|B7p`v%Uxyygt!$BffLe_jft&Xl`+Cg~@N|Feo;}DD81aIDFfQpdNF|jDALN zPr-%>BRpuV04!Y$zj^<&G0Ug@8eps1l2Tp$yJOP~e_ZFLDQZv2)k8ltRKh52*G#Dd zv&qE!Ku_FO{u@3LO+-plH)EF!o*cFn2lS8~Bsz{7xLLs{(d(wrzaK3Z@!h?@keHDQ zNqFLOpk6i3Fkb!GmzTMB_%BMJZgiiqYii98oaV1H5(fV;Q}K||%H*dDg%bcoEPK*Z zIgO6n?T<9|L=;4a(sZaEcwX<9ncLyBCJ`GEMkF5ey(#7+ZV8S^JL&m}F5{=t`iN#o zIxgfR)#4WWT&pG1L4I(E97Db%D;6n3T`BRi^&ui!y?8Ky=l@lzJ&K7$zu-kr zgw_0rW_*Xv+X7NA@>b}!ZWcIU?k#B+<|8SRlofNL^R103h69?>0HYi)7|X+ms#b&G zqw^Q<>UPUwH3Xr=>a9`12JUI8&+lLJK};~V3dw5BA1y1Ql)2qmC|8Dp?LrwUN8X2L zylxe8TBGExe(yYtR$8BPi6a}MVKe6`AO{--X#Y*Put?W+#oXQ?k%8G5Bm+Z!=k^Oo z{DsG<&#>R`;Ze{}Q}-E3s8#BG0{^tvzY#~u7a2Py-E{eA9$Oalu67}B3P)}$OB7cG z>2^EJ1GwKi3bf9($0>B_%KvpOkM|Upe#nToe2&jMzpwL~e{gwQm(D(G2M5Jf{UD;} zRgdR~`&};R(q85bEZdBp$l4F!b2C;1J)p0VCq<%^GSFp4G~IVa?v=TKfCql_`vofB z6H=-S`{#v!!9CO4C&tm7&qA&SZ5~+U0=0bkVW!TTVTC@pOGqfp=n{_NeB|sF$x}+% ztTH>U@>F7ILh?r{($lAW*LOa5fzOhaU|Im-5@R!86L0NrdD3*`011}5rkx^ zk8(p0audCMIB9=MS#5EP8kBY$bU1!oznXw^78fras~wl82jDzxO{u?QK2-?DjNEJe z>A$pkM>*_|wRSc?QwU0$Kc9dN5p>wm8_%h$!5Id=`364L98NZshCo6Ob z9{u`AD$jH%)`zfN;!E4@dgSi*Miy`ME%8rUVk8$tDI9;1h#f4%xBlTLZJ$5~Z|N)U zU!|s2)TdDU#{3a&@uxfh>vsT}hYqP1sQK^iZ9 zZjQ$SNx4cw)&8VXwMw-+mLQkUPu1t>S`?jj!A6ypw6r4qmC;wKmL{olKsk0r80)nMRQYzr9~+-MK7t z!UY*p$>D4VHgF9AX}Gy3ow|3vZYufZ?yq&CwqwlPH5W(EvRSX`}Znx6jyng`!@1rb)l- zw*5F`V?y1B5OsucmP>k3>Nq z3s?9LR5MMhEa4G6UeUY9NLUYe5Wma1pA$@zEVv33OFmRksY=u)-&D_pQz>_q8nw4Y z!O+f7;hLB1d%*s@5G2=I0aiYklWyO&GXrSHodsYDgz^`W3=MLE)4>x*DWU7>HDQum zyJ(R}EDmG_^3K(nOCoFTM2EsWru~T~hdFN)0*{KnmB0Gm&T6=%`N&LoOz|u?WwCJr z&l9@P%x+SeptIOxG@GL2EZo)?hJ9V)hlDRyL~s125uZpcMf<|?)oSwRI%Bw5q;s^C zQ7o~Ckf9vXN@I)A62a)+wBiQ3ww#&WMHmC%HzP=Tvl1G0e)0;B{=Q{NV4l4)VRY{{ z^*5VELysm;#*;?Vt4=;}q*gk8;hr$T)56U075vtvy`^~5Ar~-e|Uz8C;+RoG4wjJ?t+s#j6s87A<@T#+A2XpC?e_PMX>r zy=;tlct)6$deeG+Ei?b@s}(Re_20SUm>azA$9-Be+cqMa~-a9+hC2_ z`{9jVF^(5glHxA+cPuAc1nyq4Bpn~0CPW6uqp?2fXt><_2)EPyKfiuR`#;=*IyTP+ z!+PFIIUQD)xS$<=kAi%;Vv(NPYEYITW1)ThORNVS#tY3D4tBWTWf=AOi#(PXjpV`e}7B^Shim_?e*pBn@ zO7SNpFE#5*_aPbK(7g#&Wj&!;>Dgl4VKdj#msZ1dA6lQL|M<7nbWi8Ry-=NtfR~tu zD-n|KqZ3^AK22V7%_I1g_63p-ch@9kdHb)YP)r-vT``plR3rv`51sSa#0Eamf>4t7 z1T8b$^}ak7YmzTp^*P}o_uA8gpL=E$3D@8LvG{TdsPgYXQ}*V*U|ocG-HDL+tKzti z`FF<<;S&`Q&hhWv&$s?z;_{05$;!CDzjK@uNqukigYi2#THV~J2X4H2SwyfT1`6^0 z;dB+1N|%?fyN2(?kD!URD)!zm!oOkjuW$eI?(2#L$O!C{9J>lGA#O85vnw#i0$VXq zZqLBdycS>D7%(?B)V6-$#vLhNZkGB<-8}X(cvw;GnL!NWqow$`U2Z#dxjx#9b~|g# zw?4IJ>>2n7+U5;6`l_3}jtRO>`b#f=l+8=xFzua`=I&_Lu@uL>ZI6T7ztz5^%0rI& ztMAvr@9DqPrCs~%A&$1G$RXbhx7vnHe9G-tBXEPFFD?d@1%o2|AebT+G`@0&$HT!y zNH9c|{qW-7v0X4s9{;r4)Ks0i#Vvvh@wQ9hlD~_OEf$}J#8Krf4TTZ^HCqi}VRWOm z2A@METTN`uTwW$Nvya`g#h#9MhaiqDJ~j^Ye0|%W@K^dsya@AxJp9Ug{VJUS0Ps?W z=nPQ!?g99)|7F7hhOWLb{@4FmQ;2+#e_wzrf^`N!0O0j?wpG z^xu(hQmBvZ4R!`Hot0Xdy@$2$6_^W|)*0IF*JQh)REnwgsN(0YIp_liYIpUXNP_oN z@dd3{>Lk=PT|4s4%|0)^T$SbeS6EQrB-IT6vg&;xbb;djb>wO@B&)<7#x|A;o{K_$ zA4J6rMx(_M1tA*|@*fSmVC-2kd(PDw~rPTQB0B$gxB6+%mWJ0c#(dN5|}DYAZ2 z77&MO#+o|7*C)TcMt&Ed8X-{!6c`gIst{6>`t7UCV?JA9^{Tqwd+;V~8TZI>J~w7Z zzjGLsQ}Y_8bVcTsQ}gtG_6DcT;$olJv_*ANSE_wOZ%9PGQuajL5XX%9M&cutX7Ja& zTViv+%o?1dGF;PK1qb3lO~6_wF&xPErsm4^m-6W^Kjd;u7=-Jv#ys8@&=(S@qECjl zZO;q)4ElZ*+!c~#3{N=5z$K5uEXOYnI>kuUf?*l+8ksP|Q~zzxEKGTY=7@tXCYy|| z_8fR-ycnd-1M#WEjaV%Il;cK{*A`s5i=4M`VHq!nEMKciDfq*4ENMD?Ttb}^U(0t| zT!9B&D?={bdnRc-a9T+HkY2!v^>XGhFRACXdUE47&fWgU%~vIu2N-`p#QdfZDxhy! z;ln3wt!65G_5YPpf!5AdEO5f4-~FXaSy;0?f2W$I{aRaj%^oT_jB;vjPhA(X<8x2- z9)s~w>!Iq+{bb}4@il6%*IH)M#ng`u(o|Y!*i06w=$hBaqyeRFPNc>-*|oQgot{_z1psasdIEv(~NF|^d`D1xl9oAB41&rcPc${Ocpxli9* zvN~ipVlRxC>NHkQFQ)F|UJ{93+TSbvy#1?t|MZ>+-uJ>tpbD1bBci0j80;mEHph43 zQKD3ZMGwC2tZ9xc4=vv;KQFtJeqCBoXh};0Q`pEM#&sJL2&gp1->E&5S*&qll zDkSDUvJzTKH%<(Ba;HltPRu*+$0T&Dv1vc6eoujeO){Ggt&uNB%A2teMyo#3eZj)Q+5c;LPlSd_J%v$oyvv zWfSldfb~@?2=zY<06_jPssl|6(N{MENM?UHyZ*hLKV6dx2a@MNJtLlz3 zSnZ=>(*a3nS|7!-!PU+yF<7B{p8BI?UmG8pK<`krum2nG%nhGDp(1|a0CDO80E1qL Ip|7d^AL*HhJ^%m! literal 0 HcmV?d00001 diff --git a/web-ui-external-feedback/public-external-feedback/fonts/roboto-700-bold.woff b/web-ui-external-feedback/public-external-feedback/fonts/roboto-700-bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..3143de2975add1e96477f65e1060d439b330c590 GIT binary patch literal 13348 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 literal 0 HcmV?d00001 diff --git a/web-ui-external-feedback/public-external-feedback/img/ocicube-color.png b/web-ui-external-feedback/public-external-feedback/img/ocicube-color.png new file mode 100644 index 0000000000000000000000000000000000000000..e6eaeac4be0b3da8ded433bc5ee10598c3b3de8b GIT binary patch literal 13062 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 + + + + diff --git a/web-ui-external-feedback/public-external-feedback/img/ocicube-white.png b/web-ui-external-feedback/public-external-feedback/img/ocicube-white.png new file mode 100644 index 0000000000000000000000000000000000000000..b0837235da7a2c279db848a538e85467f40bed11 GIT binary patch literal 12953 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 + + + + diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/icons/default/icons.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/icons/default/icons.min.js new file mode 100644 index 0000000000..1acc76fc22 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/icons/default/icons.min.js @@ -0,0 +1 @@ +tinymce.IconManager.add("default",{icons:{"accessibility-check":'',"action-next":'',"action-prev":'',addtag:'',"align-center":'',"align-justify":'',"align-left":'',"align-none":'',"align-right":'',"arrow-left":'',"arrow-right":'',bold:'',bookmark:'',"border-style":'',"border-width":'',brightness:'',browse:'',cancel:'',"cell-background-color":'',"cell-border-color":'',"change-case":'',"character-count":'',"checklist-rtl":'',checklist:'',checkmark:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',close:'',"code-sample":'',"color-levels":'',"color-picker":'',"color-swatch-remove-color":'',"color-swatch":'',"comment-add":'',comment:'',contrast:'',copy:'',crop:'',"cut-column":'',"cut-row":'',cut:'',"document-properties":'',drag:'',"duplicate-column":'',"duplicate-row":'',duplicate:'',"edit-block":'',"edit-image":'',"embed-page":'',embed:'',emoji:'',export:'',fill:'',"flip-horizontally":'',"flip-vertically":'',footnote:'',"format-painter":'',format:'',fullscreen:'',gallery:'',gamma:'',help:'',"highlight-bg-color":'',home:'',"horizontal-rule":'',"image-options":'',image:'',indent:'',info:'',"insert-character":'',"insert-time":'',invert:'',italic:'',language:'',"line-height":'',line:'',link:'',"list-bull-circle":'',"list-bull-default":'',"list-bull-square":'',"list-num-default-rtl":'',"list-num-default":'',"list-num-lower-alpha-rtl":'',"list-num-lower-alpha":'',"list-num-lower-greek-rtl":'',"list-num-lower-greek":'',"list-num-lower-roman-rtl":'',"list-num-lower-roman":'',"list-num-upper-alpha-rtl":'',"list-num-upper-alpha":'',"list-num-upper-roman-rtl":'',"list-num-upper-roman":'',lock:'',ltr:'',"more-drawer":'',"new-document":'',"new-tab":'',"non-breaking":'',notice:'',"ordered-list-rtl":'',"ordered-list":'',orientation:'',outdent:'',"page-break":'',paragraph:'',"paste-column-after":'',"paste-column-before":'',"paste-row-after":'',"paste-row-before":'',"paste-text":'',paste:'',"permanent-pen":'',plus:'',preferences:'',preview:'',print:'',quote:'',redo:'',reload:'',"remove-formatting":'',remove:'',"resize-handle":'',resize:'',"restore-draft":'',"rotate-left":'',"rotate-right":'',rtl:'',save:'',search:'',"select-all":'',selected:'',settings:'',sharpen:'',sourcecode:'',"spell-check":'',"strike-through":'',subscript:'',superscript:'',"table-caption":'',"table-cell-classes":'',"table-cell-properties":'',"table-cell-select-all":'',"table-cell-select-inner":'',"table-classes":'',"table-delete-column":'',"table-delete-row":'',"table-delete-table":'',"table-insert-column-after":'',"table-insert-column-before":'',"table-insert-row-above":'',"table-insert-row-after":'',"table-left-header":'',"table-merge-cells":'',"table-row-numbering-rtl":'',"table-row-numbering":'',"table-row-properties":'',"table-split-cells":'',"table-top-header":'',table:'',template:'',"temporary-placeholder":'',"text-color":'',toc:'',translate:'',underline:'',undo:'',unlink:'',unlock:'',"unordered-list":'',unselected:'',upload:'',user:'',"vertical-align":'',visualblocks:'',visualchars:'',warning:'',"zoom-in":'',"zoom-out":''}}); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/langs/README.md b/web-ui-external-feedback/public-external-feedback/js/tinymce/langs/README.md new file mode 100644 index 0000000000..a52bf03f9a --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/langs/README.md @@ -0,0 +1,3 @@ +This is where language files should be placed. + +Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/ diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/license.txt b/web-ui-external-feedback/public-external-feedback/js/tinymce/license.txt new file mode 100644 index 0000000000..3a49f66fd2 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/license.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Ephox Corporation DBA Tiny Technologies, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/models/dom/model.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/models/dom/model.min.js new file mode 100644 index 0000000000..e8fef1e609 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/models/dom/model.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.ModelManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(o=n=e,(r=String).prototype.isPrototypeOf(o)||(null===(s=n.constructor)||void 0===s?void 0:s.name)===r.name)?"string":t;var o,n,r,s})(t)===e,o=e=>t=>typeof t===e,n=e=>t=>e===t,r=t("string"),s=t("object"),l=t("array"),a=n(null),c=o("boolean"),i=n(void 0),m=e=>!(e=>null==e)(e),d=o("function"),u=o("number"),f=()=>{},g=e=>()=>e,h=e=>e,p=(e,t)=>e===t;function w(e,...t){return(...o)=>{const n=t.concat(o);return e.apply(null,n)}}const b=e=>t=>!e(t),v=e=>e(),y=g(!1),x=g(!0);class C{constructor(e,t){this.tag=e,this.value=t}static some(e){return new C(!0,e)}static none(){return C.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?C.some(e(this.value)):C.none()}bind(e){return this.tag?e(this.value):C.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:C.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return m(e)?C.some(e):C.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}C.singletonNone=new C(!1);const S=Array.prototype.slice,T=Array.prototype.indexOf,R=Array.prototype.push,D=(e,t)=>{return o=e,n=t,T.call(o,n)>-1;var o,n},O=(e,t)=>{for(let o=0,n=e.length;o{const o=[];for(let n=0;n{const o=e.length,n=new Array(o);for(let r=0;r{for(let o=0,n=e.length;o{const o=[],n=[];for(let r=0,s=e.length;r{const o=[];for(let n=0,r=e.length;n(((e,t)=>{for(let o=e.length-1;o>=0;o--)t(e[o],o)})(e,((e,n)=>{o=t(o,e,n)})),o),W=(e,t,o)=>(N(e,((e,n)=>{o=t(o,e,n)})),o),L=(e,t)=>((e,t,o)=>{for(let n=0,r=e.length;n{for(let o=0,n=e.length;o{const t=[];for(let o=0,n=e.length;oM(E(e,t)),I=(e,t)=>{for(let o=0,n=e.length;o{const o={};for(let n=0,r=e.length;nt>=0&&tF(e,0),q=e=>F(e,e.length-1),V=(e,t)=>{for(let o=0;o{const o=$(e);for(let n=0,r=o.length;nY(e,((e,o)=>({k:o,v:t(e,o)}))),Y=(e,t)=>{const o={};return G(e,((e,n)=>{const r=t(e,n);o[r.k]=r.v})),o},J=(e,t)=>{const o=[];return G(e,((e,n)=>{o.push(t(e,n))})),o},Q=e=>J(e,h),X=(e,t)=>U.call(e,t);"undefined"!=typeof window?window:Function("return this;")();const Z=e=>e.dom.nodeName.toLowerCase(),ee=e=>e.dom.nodeType,te=e=>t=>ee(t)===e,oe=e=>8===ee(e)||"#comment"===Z(e),ne=te(1),re=te(3),se=te(9),le=te(11),ae=e=>t=>ne(t)&&Z(t)===e,ce=(e,t,o)=>{if(!(r(o)||c(o)||u(o)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",o,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,o+"")},ie=(e,t,o)=>{ce(e.dom,t,o)},me=(e,t)=>{const o=e.dom;G(t,((e,t)=>{ce(o,t,e)}))},de=(e,t)=>{const o=e.dom.getAttribute(t);return null===o?void 0:o},ue=(e,t)=>C.from(de(e,t)),fe=(e,t)=>{e.dom.removeAttribute(t)},ge=e=>W(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}),he=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},pe={fromHtml:(e,t)=>{const o=(t||document).createElement("div");if(o.innerHTML=e,!o.hasChildNodes()||o.childNodes.length>1){const t="HTML does not have a single root node";throw console.error(t,e),new Error(t)}return he(o.childNodes[0])},fromTag:(e,t)=>{const o=(t||document).createElement(e);return he(o)},fromText:(e,t)=>{const o=(t||document).createTextNode(e);return he(o)},fromDom:he,fromPoint:(e,t,o)=>C.from(e.dom.elementFromPoint(t,o)).map(he)},we=(e,t)=>{const o=e.dom;if(1!==o.nodeType)return!1;{const e=o;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},be=e=>1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount,ve=(e,t)=>{const o=void 0===t?document:t.dom;return be(o)?C.none():C.from(o.querySelector(e)).map(pe.fromDom)},ye=(e,t)=>e.dom===t.dom,xe=(e,t)=>{const o=e.dom,n=t.dom;return o!==n&&o.contains(n)},Ce=we,Se=e=>pe.fromDom(e.dom.ownerDocument),Te=e=>se(e)?e:Se(e),Re=e=>C.from(e.dom.parentNode).map(pe.fromDom),De=(e,t)=>{const o=d(t)?t:y;let n=e.dom;const r=[];for(;null!==n.parentNode&&void 0!==n.parentNode;){const e=n.parentNode,t=pe.fromDom(e);if(r.push(t),!0===o(t))break;n=e}return r},Oe=e=>C.from(e.dom.previousSibling).map(pe.fromDom),ke=e=>C.from(e.dom.nextSibling).map(pe.fromDom),Ee=e=>E(e.dom.childNodes,pe.fromDom),Ne=(e,t)=>{const o=e.dom.childNodes;return C.from(o[t]).map(pe.fromDom)},Be=(e,t)=>{Re(e).each((o=>{o.dom.insertBefore(t.dom,e.dom)}))},ze=(e,t)=>{ke(e).fold((()=>{Re(e).each((e=>{We(e,t)}))}),(e=>{Be(e,t)}))},Ae=(e,t)=>{const o=(e=>Ne(e,0))(e);o.fold((()=>{We(e,t)}),(o=>{e.dom.insertBefore(t.dom,o.dom)}))},We=(e,t)=>{e.dom.appendChild(t.dom)},Le=(e,t)=>{Be(e,t),We(t,e)},_e=(e,t)=>{N(t,((o,n)=>{const r=0===n?e:t[n-1];ze(r,o)}))},Me=(e,t)=>{N(t,(t=>{We(e,t)}))},je=e=>{e.dom.textContent="",N(Ee(e),(e=>{Ie(e)}))},Ie=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},Pe=e=>{const t=Ee(e);t.length>0&&_e(e,t),Ie(e)},Fe=(e,t)=>pe.fromDom(e.dom.cloneNode(t)),He=e=>Fe(e,!1),qe=e=>Fe(e,!0),Ve=(e,t)=>{const o=pe.fromTag(t),n=ge(e);return me(o,n),o},$e=["tfoot","thead","tbody","colgroup"],Ue=(e,t,o)=>({element:e,rowspan:t,colspan:o}),Ge=(e,t,o)=>({element:e,cells:t,section:o}),Ke=(e,t,o)=>({element:e,isNew:t,isLocked:o}),Ye=(e,t,o,n)=>({element:e,cells:t,section:o,isNew:n}),Je=d(Element.prototype.attachShadow)&&d(Node.prototype.getRootNode),Qe=g(Je),Xe=Je?e=>pe.fromDom(e.dom.getRootNode()):Te,Ze=e=>pe.fromDom(e.dom.host),et=e=>{const t=re(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const o=t.ownerDocument;return(e=>{const t=Xe(e);return le(o=t)&&m(o.dom.host)?C.some(t):C.none();var o})(pe.fromDom(t)).fold((()=>o.body.contains(t)),(n=et,r=Ze,e=>n(r(e))));var n,r},tt=e=>{const t=e.dom.body;if(null==t)throw new Error("Body is not available yet");return pe.fromDom(t)},ot=(e,t)=>{let o=[];return N(Ee(e),(e=>{t(e)&&(o=o.concat([e])),o=o.concat(ot(e,t))})),o},nt=(e,t,o)=>((e,o,n)=>z(De(e,n),(e=>we(e,t))))(e,0,o),rt=(e,t)=>((e,o)=>z(Ee(e),(e=>we(e,t))))(e),st=(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return be(o)?[]:E(o.querySelectorAll(e),pe.fromDom)})(t,e);var lt=(e,t,o,n,r)=>e(o,n)?C.some(o):d(r)&&r(o)?C.none():t(o,n,r);const at=(e,t,o)=>{let n=e.dom;const r=d(o)?o:y;for(;n.parentNode;){n=n.parentNode;const e=pe.fromDom(n);if(t(e))return C.some(e);if(r(e))break}return C.none()},ct=(e,t,o)=>at(e,(e=>we(e,t)),o),it=(e,t)=>((e,o)=>L(e.dom.childNodes,(e=>{return o=pe.fromDom(e),we(o,t);var o})).map(pe.fromDom))(e),mt=(e,t)=>ve(t,e),dt=(e,t,o)=>lt(((e,t)=>we(e,t)),ct,e,t,o),ut=(e,t,o=p)=>e.exists((e=>o(e,t))),ft=e=>{const t=[],o=e=>{t.push(e)};for(let t=0;te?C.some(t):C.none(),ht=(e,t,o)=>""===t||e.length>=t.length&&e.substr(o,o+t.length)===t,pt=(e,t,o=0,n)=>{const r=e.indexOf(t,o);return-1!==r&&(!!i(n)||r+t.length<=n)},wt=(e,t)=>ht(e,t,0),bt=(e,t)=>ht(e,t,e.length-t.length),vt=(e=>t=>t.replace(e,""))(/^\s+|\s+$/g),yt=e=>e.length>0,xt=e=>void 0!==e.style&&d(e.style.getPropertyValue),Ct=(e,t,o)=>{if(!r(o))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",o,":: Element ",e),new Error("CSS value must be a string: "+o);xt(e)&&e.style.setProperty(t,o)},St=(e,t,o)=>{const n=e.dom;Ct(n,t,o)},Tt=(e,t)=>{const o=e.dom;G(t,((e,t)=>{Ct(o,t,e)}))},Rt=(e,t)=>{const o=e.dom,n=window.getComputedStyle(o).getPropertyValue(t);return""!==n||et(e)?n:Dt(o,t)},Dt=(e,t)=>xt(e)?e.style.getPropertyValue(t):"",Ot=(e,t)=>{const o=e.dom,n=Dt(o,t);return C.from(n).filter((e=>e.length>0))},kt=(e,t)=>{((e,t)=>{xt(e)&&e.style.removeProperty(t)})(e.dom,t),ut(ue(e,"style").map(vt),"")&&fe(e,"style")},Et=(e,t,o=0)=>ue(e,t).map((e=>parseInt(e,10))).getOr(o),Nt=(e,t)=>Et(e,t,1),Bt=e=>ae("col")(e)?Et(e,"span",1)>1:Nt(e,"colspan")>1,zt=e=>Nt(e,"rowspan")>1,At=(e,t)=>parseInt(Rt(e,t),10),Wt=g(10),Lt=g(10),_t=(e,t)=>Mt(e,t,x),Mt=(e,t,o)=>j(Ee(e),(e=>we(e,t)?o(e)?[e]:[]:Mt(e,t,o))),jt=(e,t)=>((e,t,o=y)=>o(t)?C.none():D(e,Z(t))?C.some(t):ct(t,e.join(","),(e=>we(e,"table")||o(e))))(["td","th"],e,t),It=e=>_t(e,"th,td"),Pt=e=>we(e,"colgroup")?rt(e,"col"):j(qt(e),(e=>rt(e,"col"))),Ft=(e,t)=>dt(e,"table",t),Ht=e=>_t(e,"tr"),qt=e=>Ft(e).fold(g([]),(e=>rt(e,"colgroup"))),Vt=(e,t)=>E(e,(e=>{if("colgroup"===Z(e)){const t=E(Pt(e),(e=>{const t=Et(e,"span",1);return Ue(e,1,t)}));return Ge(e,t,"colgroup")}{const o=E(It(e),(e=>{const t=Et(e,"rowspan",1),o=Et(e,"colspan",1);return Ue(e,t,o)}));return Ge(e,o,t(e))}})),$t=e=>Re(e).map((e=>{const t=Z(e);return(e=>D($e,e))(t)?t:"tbody"})).getOr("tbody"),Ut=e=>{const t=Ht(e),o=[...qt(e),...t];return Vt(o,$t)},Gt=e=>{let t,o=!1;return(...n)=>(o||(o=!0,t=e.apply(null,n)),t)},Kt=()=>Yt(0,0),Yt=(e,t)=>({major:e,minor:t}),Jt={nu:Yt,detect:(e,t)=>{const o=String(t).toLowerCase();return 0===e.length?Kt():((e,t)=>{const o=((e,t)=>{for(let o=0;oNumber(t.replace(o,"$"+e));return Yt(n(1),n(2))})(e,o)},unknown:Kt},Qt=(e,t)=>{const o=String(t).toLowerCase();return L(e,(e=>e.search(o)))},Xt=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Zt=e=>t=>pt(t,e),eo=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>pt(e,"edge/")&&pt(e,"chrome")&&pt(e,"safari")&&pt(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,Xt],search:e=>pt(e,"chrome")&&!pt(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>pt(e,"msie")||pt(e,"trident")},{name:"Opera",versionRegexes:[Xt,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:Zt("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:Zt("firefox")},{name:"Safari",versionRegexes:[Xt,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(pt(e,"safari")||pt(e,"mobile/"))&&pt(e,"applewebkit")}],to=[{name:"Windows",search:Zt("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>pt(e,"iphone")||pt(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:Zt("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:Zt("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:Zt("linux"),versionRegexes:[]},{name:"Solaris",search:Zt("sunos"),versionRegexes:[]},{name:"FreeBSD",search:Zt("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:Zt("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],oo={browsers:g(eo),oses:g(to)},no="Edge",ro="Chromium",so="Opera",lo="Firefox",ao="Safari",co=e=>{const t=e.current,o=e.version,n=e=>()=>t===e;return{current:t,version:o,isEdge:n(no),isChromium:n(ro),isIE:n("IE"),isOpera:n(so),isFirefox:n(lo),isSafari:n(ao)}},io=()=>co({current:void 0,version:Jt.unknown()}),mo=co,uo=(g(no),g(ro),g("IE"),g(so),g(lo),g(ao),"Windows"),fo="Android",go="Linux",ho="macOS",po="Solaris",wo="FreeBSD",bo="ChromeOS",vo=e=>{const t=e.current,o=e.version,n=e=>()=>t===e;return{current:t,version:o,isWindows:n(uo),isiOS:n("iOS"),isAndroid:n(fo),isMacOS:n(ho),isLinux:n(go),isSolaris:n(po),isFreeBSD:n(wo),isChromeOS:n(bo)}},yo=()=>vo({current:void 0,version:Jt.unknown()}),xo=vo,Co=(g(uo),g("iOS"),g(fo),g(go),g(ho),g(po),g(wo),g(bo),e=>window.matchMedia(e).matches);let So=Gt((()=>((e,t,o)=>{const n=oo.browsers(),r=oo.oses(),s=t.bind((e=>((e,t)=>V(t.brands,(t=>{const o=t.brand.toLowerCase();return L(e,(e=>{var t;return o===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:Jt.nu(parseInt(t.version,10),0)})))})))(n,e))).orThunk((()=>((e,t)=>Qt(e,t).map((e=>{const o=Jt.detect(e.versionRegexes,t);return{current:e.name,version:o}})))(n,e))).fold(io,mo),l=((e,t)=>Qt(e,t).map((e=>{const o=Jt.detect(e.versionRegexes,t);return{current:e.name,version:o}})))(r,e).fold(yo,xo),a=((e,t,o,n)=>{const r=e.isiOS()&&!0===/ipad/i.test(o),s=e.isiOS()&&!r,l=e.isiOS()||e.isAndroid(),a=l||n("(pointer:coarse)"),c=r||!s&&l&&n("(min-device-width:768px)"),i=s||l&&!c,m=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(o),d=!i&&!c&&!m;return{isiPad:g(r),isiPhone:g(s),isTablet:g(c),isPhone:g(i),isTouch:g(a),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:g(m),isDesktop:g(d)}})(l,s,e,o);return{browser:s,os:l,deviceType:a}})(navigator.userAgent,C.from(navigator.userAgentData),Co)));const To=()=>So(),Ro=(e,t)=>{const o=o=>{const n=t(o);if(n<=0||null===n){const t=Rt(o,e);return parseFloat(t)||0}return n},n=(e,t)=>W(t,((t,o)=>{const n=Rt(e,o),r=void 0===n?0:parseInt(n,10);return isNaN(r)?t:t+r}),0);return{set:(t,o)=>{if(!u(o)&&!o.match(/^[0-9]+$/))throw new Error(e+".set accepts only positive integer values. Value was "+o);const n=t.dom;xt(n)&&(n.style[e]=o+"px")},get:o,getOuter:o,aggregate:n,max:(e,t,o)=>{const r=n(e,o);return t>r?t-r:0}}},Do=(e,t,o)=>((e,t)=>(e=>{const t=parseFloat(e);return isNaN(t)?C.none():C.some(t)})(e).getOr(t))(Rt(e,t),o),Oo=Ro("width",(e=>e.dom.offsetWidth)),ko=e=>Oo.get(e),Eo=e=>Oo.getOuter(e),No=e=>((e,t)=>{const o=e.dom,n=o.getBoundingClientRect().width||o.offsetWidth;return"border-box"===t?n:((e,t,o,n)=>t-Do(e,"padding-left",0)-Do(e,"padding-right",0)-Do(e,"border-left-width",0)-Do(e,"border-right-width",0))(e,n)})(e,"content-box"),Bo=(e,t,o)=>{const n=e.cells,r=n.slice(0,t),s=n.slice(t),l=r.concat(o).concat(s);return Wo(e,l)},zo=(e,t,o)=>Bo(e,t,[o]),Ao=(e,t,o)=>{e.cells[t]=o},Wo=(e,t)=>Ye(e.element,t,e.section,e.isNew),Lo=(e,t)=>e.cells[t],_o=(e,t)=>Lo(e,t).element,Mo=e=>e.cells.length,jo=e=>{const t=B(e,(e=>"colgroup"===e.section));return{rows:t.fail,cols:t.pass}},Io=(e,t,o)=>{const n=E(e.cells,o);return Ye(t(e.element),n,e.section,!0)},Po="data-snooker-locked-cols",Fo=e=>ue(e,Po).bind((e=>C.from(e.match(/\d+/g)))).map((e=>P(e,x))),Ho=e=>{const t=W(jo(e).rows,((e,t)=>(N(t.cells,((t,o)=>{t.isLocked&&(e[o]=!0)})),e)),{}),o=J(t,((e,t)=>parseInt(t,10)));return((e,t)=>{const o=S.call(e,0);return o.sort(void 0),o})(o)},qo=(e,t)=>e+","+t,Vo=(e,t)=>{const o=j(e.all,(e=>e.cells));return z(o,t)},$o=e=>{const t={},o=[],n=H(e).map((e=>e.element)).bind(Ft).bind(Fo).getOr({});let r=0,s=0,l=0;const{pass:a,fail:c}=B(e,(e=>"colgroup"===e.section));N(c,(e=>{const a=[];N(e.cells,(e=>{let o=0;for(;void 0!==t[qo(l,o)];)o++;const r=((e,t)=>X(e,t)&&void 0!==e[t]&&null!==e[t])(n,o.toString()),c=((e,t,o,n,r,s)=>({element:e,rowspan:t,colspan:o,row:n,column:r,isLocked:s}))(e.element,e.rowspan,e.colspan,l,o,r);for(let n=0;n{const t=(e=>{const t={};let o=0;return N(e.cells,(e=>{const n=e.colspan;k(n,(r=>{const s=o+r;t[s]=((e,t,o)=>({element:e,colspan:t,column:o}))(e.element,n,s)})),o+=n})),t})(e),o=((e,t)=>({element:e,columns:t}))(e.element,Q(t));return{colgroups:[o],columns:t}})).getOrThunk((()=>({colgroups:[],columns:{}}))),d=((e,t)=>({rows:e,columns:t}))(r,s);return{grid:d,access:t,all:o,columns:i,colgroups:m}},Uo=e=>{const t=Ut(e);return $o(t)},Go=$o,Ko=(e,t,o)=>C.from(e.access[qo(t,o)]),Yo=(e,t,o)=>{const n=Vo(e,(e=>o(t,e.element)));return n.length>0?C.some(n[0]):C.none()},Jo=Vo,Qo=e=>j(e.all,(e=>e.cells)),Xo=e=>Q(e.columns),Zo=e=>$(e.columns).length>0,en=(e,t)=>C.from(e.columns[t]),tn=(e,t=x)=>{const o=e.grid,n=k(o.columns,h),r=k(o.rows,h);return E(n,(o=>on((()=>j(r,(t=>Ko(e,t,o).filter((e=>e.column===o)).toArray()))),(e=>1===e.colspan&&t(e.element)),(()=>Ko(e,0,o)))))},on=(e,t,o)=>{const n=e();return L(n,t).orThunk((()=>C.from(n[0]).orThunk(o))).map((e=>e.element))},nn=e=>{const t=e.grid,o=k(t.rows,h),n=k(t.columns,h);return E(o,(t=>on((()=>j(n,(o=>Ko(e,t,o).filter((e=>e.row===t)).fold(g([]),(e=>[e]))))),(e=>1===e.rowspan),(()=>Ko(e,t,0)))))},rn=(e,t)=>o=>"rtl"===sn(o)?t:e,sn=e=>"rtl"===Rt(e,"direction")?"rtl":"ltr",ln=Ro("height",(e=>{const t=e.dom;return et(e)?t.getBoundingClientRect().height:t.offsetHeight})),an=e=>ln.get(e),cn=e=>ln.getOuter(e),mn=(e,t)=>({left:e,top:t,translate:(o,n)=>mn(e+o,t+n)}),dn=mn,un=(e,t)=>void 0!==e?e:void 0!==t?t:0,fn=e=>{const t=e.dom.ownerDocument,o=t.body,n=t.defaultView,r=t.documentElement;if(o===e.dom)return dn(o.offsetLeft,o.offsetTop);const s=un(null==n?void 0:n.pageYOffset,r.scrollTop),l=un(null==n?void 0:n.pageXOffset,r.scrollLeft),a=un(r.clientTop,o.clientTop),c=un(r.clientLeft,o.clientLeft);return gn(e).translate(l-c,s-a)},gn=e=>{const t=e.dom,o=t.ownerDocument.body;return o===t?dn(o.offsetLeft,o.offsetTop):et(e)?(e=>{const t=e.getBoundingClientRect();return dn(t.left,t.top)})(t):dn(0,0)},hn=(e,t)=>({row:e,y:t}),pn=(e,t)=>({col:e,x:t}),wn=e=>fn(e).left+Eo(e),bn=e=>fn(e).left,vn=(e,t)=>pn(e,bn(t)),yn=(e,t)=>pn(e,wn(t)),xn=e=>fn(e).top,Cn=(e,t)=>hn(e,xn(t)),Sn=(e,t)=>hn(e,xn(t)+cn(t)),Tn=(e,t,o)=>{if(0===o.length)return[];const n=E(o.slice(1),((t,o)=>t.map((t=>e(o,t))))),r=o[o.length-1].map((e=>t(o.length-1,e)));return n.concat([r])},Rn={delta:h,positions:e=>Tn(Cn,Sn,e),edge:xn},Dn=rn({delta:h,edge:bn,positions:e=>Tn(vn,yn,e)},{delta:e=>-e,edge:wn,positions:e=>Tn(yn,vn,e)}),On={delta:(e,t)=>Dn(t).delta(e,t),positions:(e,t)=>Dn(t).positions(e,t),edge:e=>Dn(e).edge(e)},kn={unsupportedLength:["em","ex","cap","ch","ic","rem","lh","rlh","vw","vh","vi","vb","vmin","vmax","cm","mm","Q","in","pc","pt","px"],fixed:["px","pt"],relative:["%"],empty:[""]},En=(()=>{const e="[0-9]+",t="[eE][+-]?[0-9]+",o=e=>`(?:${e})?`,n=["Infinity","[0-9]+\\."+o(e)+o(t),"\\.[0-9]+"+o(t),e+o(t)].join("|");return new RegExp(`^([+-]?(?:${n}))(.*)$`)})(),Nn=/(\d+(\.\d+)?)%/,Bn=/(\d+(\.\d+)?)px|em/,zn=ae("col"),An=(e,t,o)=>{const n=(r=e,C.from(r.dom.parentElement).map(pe.fromDom)).getOrThunk((()=>tt(Se(e))));var r;return t(e)/o(n)*100},Wn=(e,t)=>{St(e,"width",t+"px")},Ln=(e,t)=>{St(e,"width",t+"%")},_n=(e,t)=>{St(e,"height",t+"px")},Mn=e=>{const t=(e=>{return Do(t=e,"height",t.dom.offsetHeight)+"px";var t})(e);return t?((e,t,o,n)=>{const r=parseFloat(e);return bt(e,"%")&&"table"!==Z(t)?((e,t,o,n)=>{const r=Ft(e).map((e=>{const n=o(e);return Math.floor(t/100*n)})).getOr(t);return n(e,r),r})(t,r,o,n):r})(t,e,an,_n):an(e)},jn=(e,t)=>Ot(e,t).orThunk((()=>ue(e,t).map((e=>e+"px")))),In=e=>jn(e,"width"),Pn=e=>An(e,ko,No),Fn=e=>{return zn(e)?ko(e):Do(t=e,"width",t.dom.offsetWidth);var t},Hn=e=>((e,t,o)=>o(e)/Nt(e,"rowspan"))(e,0,Mn),qn=(e,t,o)=>{St(e,"width",t+o)},Vn=e=>An(e,ko,No)+"%",$n=g(Nn),Un=ae("col"),Gn=e=>In(e).getOrThunk((()=>Fn(e)+"px")),Kn=e=>{return(t=e,jn(t,"height")).getOrThunk((()=>Hn(e)+"px"));var t},Yn=(e,t,o,n,r,s)=>e.filter(n).fold((()=>s(((e,t)=>{if(t<0||t>=e.length-1)return C.none();const o=e[t].fold((()=>{const o=(e=>{const t=S.call(e,0);return t.reverse(),t})(e.slice(0,t));return V(o,((e,t)=>e.map((e=>({value:e,delta:t+1})))))}),(e=>C.some({value:e,delta:0}))),n=e[t+1].fold((()=>{const o=e.slice(t+1);return V(o,((e,t)=>e.map((e=>({value:e,delta:t+1})))))}),(e=>C.some({value:e,delta:1})));return o.bind((e=>n.map((t=>{const o=t.delta+e.delta;return Math.abs(t.value-e.value)/o}))))})(o,t))),(e=>r(e))),Jn=(e,t,o,n)=>{const r=tn(e),s=Zo(e)?(e=>E(Xo(e),(e=>C.from(e.element))))(e):r,l=[C.some(On.edge(t))].concat(E(On.positions(r,t),(e=>e.map((e=>e.x))))),a=b(Bt);return E(s,((e,t)=>Yn(e,t,l,a,(e=>{if((e=>{const t=To().browser,o=t.isChromium()||t.isFirefox();return!Un(e)||o})(e))return o(e);{const e=null!=(s=r[t])?h(s):C.none();return Yn(e,t,l,a,(e=>n(C.some(ko(e)))),n)}var s}),n)))},Qn=e=>e.map((e=>e+"px")).getOr(""),Xn=(e,t,o)=>Jn(e,t,Fn,(e=>e.getOrThunk(o.minCellWidth))),Zn=(e,t,o,n,r)=>{const s=nn(e),l=[C.some(o.edge(t))].concat(E(o.positions(s,t),(e=>e.map((e=>e.y)))));return E(s,((e,t)=>Yn(e,t,l,b(zt),n,r)))},er=(e,t)=>()=>et(e)?t(e):parseFloat(Ot(e,"width").getOr("0")),tr=e=>{const t=er(e,(e=>parseFloat(Vn(e)))),o=er(e,ko);return{width:t,pixelWidth:o,getWidths:(t,o)=>((e,t,o)=>Jn(e,t,Pn,(e=>e.fold((()=>o.minCellWidth()),(e=>e/o.pixelWidth()*100)))))(t,e,o),getCellDelta:e=>e/o()*100,singleColumnWidth:(e,t)=>[100-e],minCellWidth:()=>Wt()/o()*100,setElementWidth:Ln,adjustTableWidth:o=>{const n=t();Ln(e,n+o/100*n)},isRelative:!0,label:"percent"}},or=e=>{const t=er(e,ko);return{width:t,pixelWidth:t,getWidths:(t,o)=>Xn(t,e,o),getCellDelta:h,singleColumnWidth:(e,t)=>[Math.max(Wt(),e+t)-e],minCellWidth:Wt,setElementWidth:Wn,adjustTableWidth:o=>{const n=t()+o;Wn(e,n)},isRelative:!1,label:"pixel"}},nr=e=>In(e).fold((()=>(e=>{const t=er(e,ko),o=g(0);return{width:t,pixelWidth:t,getWidths:(t,o)=>Xn(t,e,o),getCellDelta:o,singleColumnWidth:g([0]),minCellWidth:o,setElementWidth:f,adjustTableWidth:f,isRelative:!0,label:"none"}})(e)),(t=>((e,t)=>null!==$n().exec(t)?tr(e):or(e))(e,t))),rr=or,sr=tr,lr=(e,t,o)=>{const n=e[o].element,r=pe.fromTag("td");We(r,pe.fromTag("br")),(t?We:Ae)(n,r)},ar=((e,t)=>{const o=t=>e(t)?C.from(t.dom.nodeValue):C.none();return{get:t=>{if(!e(t))throw new Error("Can only get text value of a text node");return o(t).getOr("")},getOption:o,set:(t,o)=>{if(!e(t))throw new Error("Can only set raw text value of a text node");t.dom.nodeValue=o}}})(re),cr=e=>ar.get(e),ir=e=>ar.getOption(e),mr=(e,t)=>ar.set(e,t),dr=e=>"img"===Z(e)?1:ir(e).fold((()=>Ee(e).length),(e=>e.length)),ur=["img","br"],fr=e=>ir(e).filter((e=>0!==e.trim().length||e.indexOf("\xa0")>-1)).isSome()||D(ur,Z(e)),gr=e=>((e,t)=>{const o=e=>{for(let n=0;npr(e,fr),pr=(e,t)=>{const o=e=>{const n=Ee(e);for(let e=n.length-1;e>=0;e--){const r=n[e];if(t(r))return C.some(r);const s=o(r);if(s.isSome())return s}return C.none()};return o(e)},wr={scope:["row","col"]},br=e=>()=>{const t=pe.fromTag("td",e.dom);return We(t,pe.fromTag("br",e.dom)),t},vr=e=>()=>pe.fromTag("col",e.dom),yr=e=>()=>pe.fromTag("colgroup",e.dom),xr=e=>()=>pe.fromTag("tr",e.dom),Cr=(e,t,o)=>{const n=((e,t)=>{const o=Ve(e,t),n=Ee(qe(e));return Me(o,n),o})(e,t);return G(o,((e,t)=>{null===e?fe(n,t):ie(n,t,e)})),n},Sr=e=>e,Tr=(e,t,o)=>{const n=(e,t)=>{((e,t)=>{const o=e.dom,n=t.dom;xt(o)&&xt(n)&&(n.style.cssText=o.style.cssText)})(e.element,t),kt(t,"height"),1!==e.colspan&&kt(t,"width")};return{col:o=>{const r=pe.fromTag(Z(o.element),t.dom);return n(o,r),e(o.element,r),r},colgroup:yr(t),row:xr(t),cell:r=>{const s=pe.fromTag(Z(r.element),t.dom),l=o.getOr(["strong","em","b","i","span","font","h1","h2","h3","h4","h5","h6","p","div"]),a=l.length>0?((e,t,o)=>gr(e).map((n=>{const r=o.join(","),s=nt(n,r,(t=>ye(t,e)));return A(s,((e,t)=>{const o=He(t);return fe(o,"contenteditable"),We(e,o),o}),t)})).getOr(t))(r.element,s,l):s;return We(a,pe.fromTag("br")),n(r,s),((e,t)=>{G(wr,((o,n)=>ue(e,n).filter((e=>D(o,e))).each((e=>ie(t,n,e)))))})(r.element,s),e(r.element,s),s},replace:Cr,colGap:vr(t),gap:br(t)}},Rr=e=>({col:vr(e),colgroup:yr(e),row:xr(e),cell:br(e),replace:Sr,colGap:vr(e),gap:br(e)}),Dr=e=>pe.fromDom(e.getBody()),Or=e=>t=>ye(t,Dr(e)),kr=e=>{fe(e,"data-mce-style");const t=e=>fe(e,"data-mce-style");N(It(e),t),N(Pt(e),t),N(Ht(e),t)},Er=e=>pe.fromDom(e.selection.getStart()),Nr=e=>e.getBoundingClientRect().width,Br=e=>e.getBoundingClientRect().height,zr=(e,t)=>{const o=t.column,n=t.column+t.colspan-1,r=t.row,s=t.row+t.rowspan-1;return o<=e.finishCol&&n>=e.startCol&&r<=e.finishRow&&s>=e.startRow},Ar=(e,t)=>t.column>=e.startCol&&t.column+t.colspan-1<=e.finishCol&&t.row>=e.startRow&&t.row+t.rowspan-1<=e.finishRow,Wr=(e,t,o)=>{const n=Yo(e,t,ye),r=Yo(e,o,ye);return n.bind((e=>r.map((t=>{return o=e,n=t,{startRow:Math.min(o.row,n.row),startCol:Math.min(o.column,n.column),finishRow:Math.max(o.row+o.rowspan-1,n.row+n.rowspan-1),finishCol:Math.max(o.column+o.colspan-1,n.column+n.colspan-1)};var o,n}))))},Lr=(e,t,o)=>Wr(e,t,o).map((t=>{const o=Jo(e,w(zr,t));return E(o,(e=>e.element))})),_r=(e,t)=>Yo(e,t,((e,t)=>xe(t,e))).map((e=>e.element)),Mr=(e,t,o)=>{const n=Ir(e);return Lr(n,t,o)},jr=(e,t,o,n,r)=>{const s=Ir(e),l=ye(e,o)?C.some(t):_r(s,t),a=ye(e,r)?C.some(n):_r(s,n);return l.bind((e=>a.bind((t=>Lr(s,e,t)))))},Ir=Uo;var Pr=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],Fr=()=>({up:g({selector:ct,closest:dt,predicate:at,all:De}),down:g({selector:st,predicate:ot}),styles:g({get:Rt,getRaw:Ot,set:St,remove:kt}),attrs:g({get:de,set:ie,remove:fe,copyTo:(e,t)=>{const o=ge(e);me(t,o)}}),insert:g({before:Be,after:ze,afterAll:_e,append:We,appendAll:Me,prepend:Ae,wrap:Le}),remove:g({unwrap:Pe,remove:Ie}),create:g({nu:pe.fromTag,clone:e=>pe.fromDom(e.dom.cloneNode(!1)),text:pe.fromText}),query:g({comparePosition:(e,t)=>e.dom.compareDocumentPosition(t.dom),prevSibling:Oe,nextSibling:ke}),property:g({children:Ee,name:Z,parent:Re,document:e=>Te(e).dom,isText:re,isComment:oe,isElement:ne,isSpecial:e=>{const t=Z(e);return D(["script","noscript","iframe","noframes","noembed","title","style","textarea","xmp"],t)},getLanguage:e=>ne(e)?ue(e,"lang"):C.none(),getText:cr,setText:mr,isBoundary:e=>!!ne(e)&&("body"===Z(e)||D(Pr,Z(e))),isEmptyTag:e=>!!ne(e)&&D(["br","img","hr","input"],Z(e)),isNonEditable:e=>ne(e)&&"false"===de(e,"contenteditable")}),eq:ye,is:Ce});const Hr=(e,t,o,n)=>{const r=t(e,o);return A(n,((o,n)=>{const r=t(e,n);return qr(e,o,r)}),r)},qr=(e,t,o)=>t.bind((t=>o.filter(w(e.eq,t)))),Vr=Fr(),$r=(e,t)=>((e,t,o)=>o.length>0?((e,t,o,n)=>n(e,t,o[0],o.slice(1)))(e,t,o,Hr):C.none())(Vr,((t,o)=>e(o)),t),Ur=e=>ct(e,"table"),Gr=(e,t,o)=>{const n=e=>t=>void 0!==o&&o(t)||ye(t,e);return ye(e,t)?C.some({boxes:C.some([e]),start:e,finish:t}):Ur(e).bind((r=>Ur(t).bind((s=>{if(ye(r,s))return C.some({boxes:Mr(r,e,t),start:e,finish:t});if(xe(r,s)){const o=nt(t,"td,th",n(r)),l=o.length>0?o[o.length-1]:t;return C.some({boxes:jr(r,e,r,t,s),start:e,finish:l})}if(xe(s,r)){const o=nt(e,"td,th",n(s)),l=o.length>0?o[o.length-1]:e;return C.some({boxes:jr(s,e,r,t,s),start:e,finish:l})}return((e,t,o)=>((e,t,o,n=y)=>{const r=[t].concat(e.up().all(t)),s=[o].concat(e.up().all(o)),l=e=>_(e,n).fold((()=>e),(t=>e.slice(0,t+1))),a=l(r),c=l(s),i=L(a,(t=>O(c,((e,t)=>w(e.eq,t))(e,t))));return{firstpath:a,secondpath:c,shared:i}})(Vr,e,t,void 0))(e,t).shared.bind((l=>dt(l,"table",o).bind((o=>{const l=nt(t,"td,th",n(o)),a=l.length>0?l[l.length-1]:t,c=nt(e,"td,th",n(o)),i=c.length>0?c[c.length-1]:e;return C.some({boxes:jr(o,e,r,t,s),start:i,finish:a})}))))}))))},Kr=(e,t)=>{const o=st(e,t);return o.length>0?C.some(o):C.none()},Yr=(e,t,o)=>mt(e,t).bind((t=>mt(e,o).bind((e=>$r(Ur,[t,e]).map((o=>({first:t,last:e,table:o}))))))),Jr=(e,t,o,n,r)=>((e,t)=>L(e,(e=>we(e,t))))(e,r).bind((e=>((e,t,o)=>Ft(e).bind((n=>((e,t,o,n)=>Yo(e,t,ye).bind((t=>{const r=o>0?t.row+t.rowspan-1:t.row,s=n>0?t.column+t.colspan-1:t.column;return Ko(e,r+o,s+n).map((e=>e.element))})))(Ir(n),e,t,o))))(e,t,o).bind((e=>((e,t)=>ct(e,"table").bind((o=>mt(o,t).bind((t=>Gr(t,e).bind((e=>e.boxes.map((t=>({boxes:t,start:e.start,finish:e.finish}))))))))))(e,n))))),Qr=(e,t)=>Kr(e,t),Xr=(e,t,o)=>Yr(e,t,o).bind((t=>{const o=t=>ye(e,t),n="thead,tfoot,tbody,table",r=ct(t.first,n,o),s=ct(t.last,n,o);return r.bind((e=>s.bind((o=>ye(e,o)?((e,t,o)=>((e,t,o)=>Wr(e,t,o).bind((t=>((e,t)=>{let o=!0;const n=w(Ar,t);for(let r=t.startRow;r<=t.finishRow;r++)for(let s=t.startCol;s<=t.finishCol;s++)o=o&&Ko(e,r,s).exists(n);return o?C.some(t):C.none()})(e,t))))(Ir(e),t,o))(t.table,t.first,t.last):C.none()))))})),Zr=h,es=e=>{const t=(e,t)=>ue(e,t).exists((e=>parseInt(e,10)>1));return e.length>0&&I(e,(e=>t(e,"rowspan")||t(e,"colspan")))?C.some(e):C.none()},ts=(e,t,o)=>t.length<=1?C.none():Xr(e,o.firstSelectedSelector,o.lastSelectedSelector).map((e=>({bounds:e,cells:t}))),os={selected:"data-mce-selected",selectedSelector:"td[data-mce-selected],th[data-mce-selected]",firstSelected:"data-mce-first-selected",firstSelectedSelector:"td[data-mce-first-selected],th[data-mce-first-selected]",lastSelected:"data-mce-last-selected",lastSelectedSelector:"td[data-mce-last-selected],th[data-mce-last-selected]"},ns=(e,t,o)=>({element:o,mergable:ts(t,e,os),unmergable:es(e),selection:Zr(e)}),rs=e=>(t,o)=>{const n=Z(t),r="col"===n||"colgroup"===n?Ft(s=t).bind((e=>Qr(e,os.firstSelectedSelector))).fold(g(s),(e=>e[0])):t;var s;return dt(r,e,o)},ss=rs("th,td,caption"),ls=rs("th,td"),as=e=>{return t=e.model.table.getSelectedCells(),E(t,pe.fromDom);var t},cs=(e,t)=>{e.on("BeforeGetContent",(t=>{const o=o=>{t.preventDefault(),(e=>Ft(e[0]).map((e=>{const t=((e,t)=>{const o=e=>we(e.element,t),n=qe(e),r=Ut(n),s=nr(e),l=Go(r),a=((e,t)=>{const o=e.grid.columns;let n=e.grid.rows,r=o,s=0,l=0;const a=[],c=[];return G(e.access,(e=>{if(a.push(e),t(e)){c.push(e);const t=e.row,o=t+e.rowspan-1,a=e.column,i=a+e.colspan-1;ts&&(s=o),al&&(l=i)}})),((e,t,o,n,r,s)=>({minRow:e,minCol:t,maxRow:o,maxCol:n,allCells:r,selectedCells:s}))(n,r,s,l,a,c)})(l,o),c="th:not("+t+"),td:not("+t+")",i=Mt(n,"th,td",(e=>we(e,c)));N(i,Ie),((e,t,o,n)=>{const r=z(e,(e=>"colgroup"!==e.section)),s=t.grid.columns,l=t.grid.rows;for(let e=0;eo.maxRow||ao.maxCol||(Ko(t,e,a).filter(n).isNone()?lr(r,l,e):l=!0)}})(r,l,a,o);const m=((e,t,o,n)=>{if(0===n.minCol&&t.grid.columns===n.maxCol+1)return 0;const r=Xn(t,e,o),s=W(r,((e,t)=>e+t),0),l=W(r.slice(n.minCol,n.maxCol+1),((e,t)=>e+t),0),a=l/s*o.pixelWidth()-o.pixelWidth();return o.getCellDelta(a)})(e,Uo(e),s,a);return((e,t,o,n)=>{G(o.columns,(e=>{(e.columnt.maxCol)&&Ie(e.element)}));const r=z(_t(e,"tr"),(e=>0===e.dom.childElementCount));N(r,Ie),t.minCol!==t.maxCol&&t.minRow!==t.maxRow||N(_t(e,"th,td"),(e=>{fe(e,"rowspan"),fe(e,"colspan")})),fe(e,Po),fe(e,"data-snooker-col-series"),nr(e).adjustTableWidth(n)})(n,a,l,m),n})(e,"[data-mce-selected]");return kr(t),[t]})))(o).each((o=>{t.content="text"===t.format?(e=>E(e,(e=>e.dom.innerText)).join(""))(o):((e,t)=>E(t,(t=>e.selection.serializer.serialize(t.dom,{}))).join(""))(e,o)}))};if(!0===t.selection){const t=(e=>z(as(e),(e=>we(e,os.selectedSelector))))(e);t.length>=1&&o(t)}})),e.on("BeforeSetContent",(o=>{if(!0===o.selection&&!0===o.paste){const n=as(e);H(n).each((n=>{Ft(n).each((r=>{const s=z(((e,t)=>{const o=document.createElement("div");return o.innerHTML=e,Ee(pe.fromDom(o))})(o.content),(e=>"meta"!==Z(e))),l=ae("table");if(1===s.length&&l(s[0])){o.preventDefault();const l=pe.fromDom(e.getDoc()),a=Rr(l),c=((e,t,o)=>({element:e,clipboard:t,generators:o}))(n,s[0],a);t.pasteCells(r,c).each((()=>{e.focus()}))}}))}))}}))},is=(e,t)=>({element:e,offset:t}),ms=(e,t,o)=>e.property().isText(t)&&0===e.property().getText(t).trim().length||e.property().isComment(t)?o(t).bind((t=>ms(e,t,o).orThunk((()=>C.some(t))))):C.none(),ds=(e,t)=>e.property().isText(t)?e.property().getText(t).length:e.property().children(t).length,us=(e,t)=>{const o=ms(e,t,e.query().prevSibling).getOr(t);if(e.property().isText(o))return is(o,ds(e,o));const n=e.property().children(o);return n.length>0?us(e,n[n.length-1]):is(o,ds(e,o))},fs=us,gs=Fr(),hs=(e,t)=>{if(!Bt(e)){const o=(e=>In(e).bind((e=>{return t=e,o=["fixed","relative","empty"],C.from(En.exec(t)).bind((e=>{const t=Number(e[1]),n=e[2];return((e,t)=>O(t,(t=>O(kn[t],(t=>e===t)))))(n,o)?C.some({value:t,unit:n}):C.none()}));var t,o})))(e);o.each((o=>{const n=o.value/2;qn(e,n,o.unit),qn(t,n,o.unit)}))}},ps=e=>E(e,g(0)),ws=(e,t,o,n,r)=>r(e.slice(0,t)).concat(n).concat(r(e.slice(o))),bs=e=>(t,o,n,r)=>{if(e(n)){const e=Math.max(r,t[o]-Math.abs(n)),s=Math.abs(e-t[o]);return n>=0?s:-s}return n},vs=bs((e=>e<0)),ys=bs(x),xs=()=>{const e=(e,t,o,n)=>{const r=(100+o)/100,s=Math.max(n,(e[t]+o)/r);return E(e,((e,o)=>(o===t?s:e/r)-e))},t=(t,o,n,r,s,l)=>l?e(t,o,r,s):((e,t,o,n,r)=>{const s=vs(e,t,n,r);return ws(e,t,o+1,[s,0],ps)})(t,o,n,r,s);return{resizeTable:(e,t)=>e(t),clampTableDelta:vs,calcLeftEdgeDeltas:t,calcMiddleDeltas:(e,o,n,r,s,l,a)=>t(e,n,r,s,l,a),calcRightEdgeDeltas:(t,o,n,r,s,l)=>{if(l)return e(t,n,r,s);{const e=vs(t,n,r,s);return ps(t.slice(0,n)).concat([e])}},calcRedestributedWidths:(e,t,o,n)=>{if(n){const n=(t+o)/t,r=E(e,(e=>e/n));return{delta:100*n-100,newSizes:r}}return{delta:o,newSizes:e}}}},Cs=()=>{const e=(e,t,o,n,r)=>{const s=ys(e,n>=0?o:t,n,r);return ws(e,t,o+1,[s,-s],ps)};return{resizeTable:(e,t,o)=>{o&&e(t)},clampTableDelta:(e,t,o,n,r)=>{if(r){if(o>=0)return o;{const t=W(e,((e,t)=>e+t-n),0);return Math.max(-t,o)}}return vs(e,t,o,n)},calcLeftEdgeDeltas:e,calcMiddleDeltas:(t,o,n,r,s,l)=>e(t,n,r,s,l),calcRightEdgeDeltas:(e,t,o,n,r,s)=>{if(s)return ps(e);{const t=n/e.length;return E(e,g(t))}},calcRedestributedWidths:(e,t,o,n)=>({delta:0,newSizes:e})}},Ss=e=>Uo(e).grid,Ts=ae("th"),Rs=e=>I(e,(e=>Ts(e.element))),Ds=(e,t)=>e&&t?"sectionCells":e?"section":"cells",Os=e=>{const t="thead"===e.section,o=ut(ks(e.cells),"th");return"tfoot"===e.section?{type:"footer"}:t||o?{type:"header",subType:Ds(t,o)}:{type:"body"}},ks=e=>{const t=z(e,(e=>Ts(e.element)));return 0===t.length?C.some("td"):t.length===e.length?C.some("th"):C.none()},Es=(e,t,o)=>Ke(o(e.element,t),!0,e.isLocked),Ns=(e,t)=>e.section!==t?Ye(e.element,e.cells,t,e.isNew):e,Bs=()=>({transformRow:Ns,transformCell:(e,t,o)=>{const n=o(e.element,t),r="td"!==Z(n)?((e,t)=>{const o=Ve(e,"td");ze(e,o);const n=Ee(e);return Me(o,n),Ie(e),o})(n):n;return Ke(r,e.isNew,e.isLocked)}}),zs=()=>({transformRow:Ns,transformCell:Es}),As=()=>({transformRow:(e,t)=>Ns(e,"thead"===t?"tbody":t),transformCell:Es}),Ws=Bs,Ls=zs,_s=As,Ms=()=>({transformRow:h,transformCell:Es}),js=e=>dt(e,"[contenteditable]"),Is=(e,t=!1)=>et(e)?e.dom.isContentEditable:js(e).fold(g(t),(e=>"true"===Ps(e))),Ps=e=>e.dom.contentEditable,Fs=(e,t,o,n)=>{o===n?fe(e,t):ie(e,t,o)},Hs=(e,t,o)=>{q(rt(e,t)).fold((()=>Ae(e,o)),(e=>ze(e,o)))},qs=(e,t)=>{const o=[],n=[],r=e=>E(e,(e=>{e.isNew&&o.push(e.element);const t=e.element;return je(t),N(e.cells,(e=>{e.isNew&&n.push(e.element),Fs(e.element,"colspan",e.colspan,1),Fs(e.element,"rowspan",e.rowspan,1),We(t,e.element)})),t})),s=e=>j(e,(e=>E(e.cells,(e=>(Fs(e.element,"span",e.colspan,1),e.element))))),l=(t,o)=>{const n=((e,t)=>{const o=it(e,t).getOrThunk((()=>{const o=pe.fromTag(t,Se(e).dom);return"thead"===t?Hs(e,"caption,colgroup",o):"colgroup"===t?Hs(e,"caption",o):We(e,o),o}));return je(o),o})(e,o),l=("colgroup"===o?s:r)(t);Me(n,l)},a=(t,o)=>{t.length>0?l(t,o):(t=>{it(e,t).each(Ie)})(o)},c=[],i=[],m=[],d=[];return N(t,(e=>{switch(e.section){case"thead":c.push(e);break;case"tbody":i.push(e);break;case"tfoot":m.push(e);break;case"colgroup":d.push(e)}})),a(d,"colgroup"),a(c,"thead"),a(i,"tbody"),a(m,"tfoot"),{newRows:o,newCells:n}},Vs=(e,t)=>{if(0===e.length)return 0;const o=e[0];return _(e,(e=>!t(o.element,e.element))).getOr(e.length)},$s=(e,t)=>{const o=E(e,(e=>E(e.cells,y)));return E(e,((n,r)=>{const s=j(n.cells,((n,s)=>{if(!1===o[r][s]){const m=((e,t,o,n)=>{const r=((e,t)=>e[t])(e,t),s="colgroup"===r.section,l=Vs(r.cells.slice(o),n),a=s?1:Vs(((e,t)=>E(e,(e=>Lo(e,t))))(e.slice(t),o),n);return{colspan:l,rowspan:a}})(e,r,s,t);return((e,t,n,r)=>{for(let s=e;s({element:e,cells:t,section:o,isNew:n}))(n.element,s,n.section,n.isNew)}))},Us=(e,t,o)=>{const n=[];N(e.colgroups,(r=>{const s=[];for(let n=0;nKe(e.element,o,!1))).getOrThunk((()=>Ke(t.colGap(),!0,!1)));s.push(r)}n.push(Ye(r.element,s,"colgroup",o))}));for(let r=0;rKe(e.element,o,e.isLocked))).getOrThunk((()=>Ke(t.gap(),!0,!1)));s.push(l)}const l=e.all[r],a=Ye(l.element,s,l.section,o);n.push(a)}return n},Gs=e=>$s(e,ye),Ks=(e,t)=>V(e.all,(e=>L(e.cells,(e=>ye(t,e.element))))),Ys=(e,t,o)=>{const n=E(t.selection,(t=>jt(t).bind((t=>Ks(e,t))).filter(o))),r=ft(n);return gt(r.length>0,r)},Js=(e,t,o,n,r)=>(s,l,a,c)=>{const i=Uo(s),m=C.from(null==c?void 0:c.section).getOrThunk(Ms);return t(i,l).map((t=>{const o=((e,t)=>Us(e,t,!1))(i,a),n=e(o,t,ye,r(a),m),s=Ho(n.grid);return{info:t,grid:Gs(n.grid),cursor:n.cursor,lockedColumns:s}})).bind((e=>{const t=qs(s,e.grid),r=C.from(null==c?void 0:c.sizing).getOrThunk((()=>nr(s))),l=C.from(null==c?void 0:c.resize).getOrThunk(Cs);return o(s,e.grid,e.info,{sizing:r,resize:l,section:m}),n(s),fe(s,Po),e.lockedColumns.length>0&&ie(s,Po,e.lockedColumns.join(",")),C.some({cursor:e.cursor,newRows:t.newRows,newCells:t.newCells})}))},Qs=(e,t)=>Ys(e,t,x).map((e=>({cells:e,generators:t.generators,clipboard:t.clipboard}))),Xs=(e,t)=>Ys(e,t,x),Zs=(e,t)=>Ys(e,t,(e=>!e.isLocked)),el=(e,t)=>I(t,(t=>((e,t)=>Ks(e,t).exists((e=>!e.isLocked)))(e,t))),tl=(e,t,o,n)=>{const r=jo(e).rows;let s=!0;for(let e=0;e{const t=t=>t(e),o=g(e),n=()=>r,r={tag:!0,inner:e,fold:(t,o)=>o(e),isValue:x,isError:y,map:t=>rl.value(t(e)),mapError:n,bind:t,exists:t,forall:t,getOr:o,or:n,getOrThunk:o,orThunk:n,getOrDie:o,each:t=>{t(e)},toOptional:()=>C.some(e)};return r},nl=e=>{const t=()=>o,o={tag:!1,inner:e,fold:(t,o)=>t(e),isValue:y,isError:x,map:t,mapError:t=>rl.error(t(e)),bind:t,exists:y,forall:x,getOr:h,or:h,getOrThunk:v,orThunk:v,getOrDie:(n=String(e),()=>{throw new Error(n)}),each:f,toOptional:C.none};var n;return o},rl={value:ol,error:nl,fromOption:(e,t)=>e.fold((()=>nl(t)),ol)},sl=(e,t)=>({rowDelta:0,colDelta:Mo(e[0])-Mo(t[0])}),ll=(e,t)=>({rowDelta:e.length-t.length,colDelta:0}),al=(e,t,o,n)=>{const r="colgroup"===t.section?o.col:o.cell;return k(e,(e=>Ke(r(),!0,n(e))))},cl=(e,t,o,n)=>{const r=e[e.length-1];return e.concat(k(t,(()=>{const e="colgroup"===r.section?o.colgroup:o.row,t=Io(r,e,h),s=al(t.cells.length,t,o,(e=>X(n,e.toString())));return Wo(t,s)})))},il=(e,t,o,n)=>E(e,(e=>{const r=al(t,e,o,y);return Bo(e,n,r)})),ml=(e,t,o)=>{const n=t.colDelta<0?il:h,r=t.rowDelta<0?cl:h,s=Ho(e),l=Mo(e[0]),a=O(s,(e=>e===l-1)),c=n(e,Math.abs(t.colDelta),o,a?l-1:l),i=Ho(c);return r(c,Math.abs(t.rowDelta),o,P(i,x))},dl=(e,t,o,n)=>{const r=w(n,Lo(e[t],o).element),s=e[t];return e.length>1&&Mo(s)>1&&(o>0&&r(_o(s,o-1))||o0&&r(_o(e[t-1],o))||tz(o,(o=>o>=e.column&&o<=Mo(t[0])+e.column)),fl=(e,t,o,n,r)=>{((e,t,o,n)=>{t>0&&t{const r=e.cells[t-1];let s=0;const l=n();for(;e.cells.length>t+s&&o(r.element,e.cells[t+s].element);)Ao(e,t+s,Ke(l,!0,e.cells[t+s].isLocked)),s++}))})(t,e,r,n.cell);const s=ll(o,t),l=ml(o,s,n),a=ll(t,l),c=ml(t,a,n);return E(c,((t,o)=>Bo(t,e,l[o].cells)))},gl=(e,t,o,n,r)=>{((e,t,o,n)=>{const r=jo(e).rows;if(t>0&&tW(e,((e,o)=>O(e,(e=>t(e.element,o.element)))?e:e.concat([o])),[]))(r[t-1].cells,o);N(e,(e=>{let s=C.none();for(let l=t;l{Ao(a,t,Ke(e,!0,c.isLocked))})))}}))}})(t,e,r,n.cell);const s=Ho(t),l=sl(t,o),a={...l,colDelta:l.colDelta-s.length},c=ml(t,a,n),{cols:i,rows:m}=jo(c),d=Ho(c),u=sl(o,t),f={...u,colDelta:u.colDelta+d.length},g=(p=n,w=d,E(o,(e=>W(w,((t,o)=>{const n=al(1,e,p,x)[0];return zo(t,o,n)}),e)))),h=ml(g,f,n);var p,w;return[...i,...m.slice(0,e),...h,...m.slice(e,m.length)]},hl=(e,t,o,n,r)=>{const{rows:s,cols:l}=jo(e),a=s.slice(0,t),c=s.slice(t);return[...l,...a,((e,t,o,n)=>Io(e,(e=>n(e,o)),t))(s[o],((e,o)=>t>0&&tE(e,(e=>{const s=t>0&&t{if("colgroup"!==o&&n)return Lo(e,t);{const t=Lo(e,r);return Ke(l(t.element,s),!0,!1)}})(e,t,e.section,s,o,n,r);return zo(e,t,l)})),wl=(e,t,o,n)=>((e,t,o,n)=>void 0!==_o(e[t],o)&&t>0&&n(_o(e[t-1],o),_o(e[t],o)))(e,t,o,n)||((e,t,o)=>t>0&&o(_o(e,t-1),_o(e,t)))(e[t],o,n),bl=(e,t,o,n)=>{const r=e=>(e=>"row"===e?zt(t):Bt(t))(e)?`${e}group`:e;return e?Ts(t)?r(o):null:n&&Ts(t)?r("row"===o?"col":"row"):null},vl=(e,t,o)=>Ke(o(e.element,t),!0,e.isLocked),yl=(e,t,o,n,r,s,l)=>E(e,((e,a)=>((e,c)=>{const i=e.cells,m=E(i,((e,c)=>{if((e=>O(t,(t=>o(e.element,t.element))))(e)){const t=l(e,a,c)?r(e,o,n):e;return s(t,a,c).each((e=>{var o,n;o=t.element,n={scope:C.from(e)},G(n,((e,t)=>{e.fold((()=>{fe(o,t)}),(e=>{ce(o.dom,t,e)}))}))})),t}return e}));return Ye(e.element,m,e.section,e.isNew)})(e))),xl=(e,t,o)=>j(e,((n,r)=>wl(e,r,t,o)?[]:[Lo(n,t)])),Cl=(e,t,o,n,r)=>{const s=jo(e).rows,l=j(t,(e=>xl(s,e,n))),a=E(s,(e=>Rs(e.cells))),c=((e,t)=>I(t,h)&&Rs(e)?x:(e,o,n)=>!("th"===Z(e.element)&&t[o]))(l,a),i=((e,t)=>(o,n)=>C.some(bl(e,o.element,"row",t[n])))(o,a);return yl(e,l,n,r,vl,i,c)},Sl=(e,t,o,n)=>{const r=jo(e).rows,s=E(t,(e=>Lo(r[e.row],e.column)));return yl(e,s,o,n,vl,C.none,x)},Tl=e=>{if(!l(e))throw new Error("cases must be an array");if(0===e.length)throw new Error("there must be at least one case");const t=[],o={};return N(e,((n,r)=>{const s=$(n);if(1!==s.length)throw new Error("one and only one name per case");const a=s[0],c=n[a];if(void 0!==o[a])throw new Error("duplicate key detected:"+a);if("cata"===a)throw new Error("cannot have a case named cata (sorry)");if(!l(c))throw new Error("case arguments must be an array");t.push(a),o[a]=(...o)=>{const n=o.length;if(n!==c.length)throw new Error("Wrong number of arguments to case "+a+". Expected "+c.length+" ("+c+"), got "+n);return{fold:(...t)=>{if(t.length!==e.length)throw new Error("Wrong number of arguments to fold. Expected "+e.length+", got "+t.length);return t[r].apply(null,o)},match:e=>{const n=$(e);if(t.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+t.join(",")+"\nActual: "+n.join(","));if(!I(t,(e=>D(n,e))))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+t.join(", "));return e[a].apply(null,o)},log:e=>{console.log(e,{constructors:t,constructor:a,params:o})}}}})),o},Rl={...Tl([{none:[]},{only:["index"]},{left:["index","next"]},{middle:["prev","index","next"]},{right:["prev","index"]}])},Dl=(e,t,o)=>{let n=0;for(let r=e;r{const o=Qo(e);return E(o,(e=>{const o=Dl(e.row,e.row+e.rowspan,t);return{element:e.element,height:o,rowspan:e.rowspan}}))},kl=(e,t,o)=>{const n=((e,t)=>Zo(e)?((e,t)=>{const o=Xo(e);return E(o,((e,o)=>({element:e.element,width:t[o],colspan:e.colspan})))})(e,t):((e,t)=>{const o=Qo(e);return E(o,(e=>{const o=Dl(e.column,e.column+e.colspan,t);return{element:e.element,width:o,colspan:e.colspan}}))})(e,t))(e,t);N(n,(e=>{o.setElementWidth(e.element,e.width)}))},El=(e,t,o,n,r)=>{const s=Uo(e),l=r.getCellDelta(t),a=r.getWidths(s,r),c=o===s.grid.columns-1,i=n.clampTableDelta(a,o,l,r.minCellWidth(),c),m=((e,t,o,n,r)=>{const s=e.slice(0),l=((e,t)=>0===e.length?Rl.none():1===e.length?Rl.only(0):0===t?Rl.left(0,1):t===e.length-1?Rl.right(t-1,t):t>0&&tn.singleColumnWidth(s[e],o)),((e,t)=>r.calcLeftEdgeDeltas(s,e,t,o,n.minCellWidth(),n.isRelative)),((e,t,l)=>r.calcMiddleDeltas(s,e,t,l,o,n.minCellWidth(),n.isRelative)),((e,t)=>r.calcRightEdgeDeltas(s,e,t,o,n.minCellWidth(),n.isRelative)))})(a,o,i,r,n),d=E(m,((e,t)=>e+a[t]));kl(s,d,r),n.resizeTable(r.adjustTableWidth,i,c)},Nl=e=>W(e,((e,t)=>O(e,(e=>e.column===t.column))?e:e.concat([t])),[]).sort(((e,t)=>e.column-t.column)),Bl=ae("col"),zl=ae("colgroup"),Al=e=>"tr"===Z(e)||zl(e),Wl=e=>({element:e,colspan:Et(e,"colspan",1),rowspan:Et(e,"rowspan",1)}),Ll=e=>ue(e,"scope").map((e=>e.substr(0,3))),_l=(e,t=Wl)=>{const o=o=>{if(Al(o))return zl((r={element:o}).element)?e.colgroup(r):e.row(r);{const r=o,s=(t=>Bl(t.element)?e.col(t):e.cell(t))(t(r));return n=C.some({item:r,replacement:s}),s}var r};let n=C.none();return{getOrInit:(e,t)=>n.fold((()=>o(e)),(n=>t(e,n.item)?n.replacement:o(e)))}},Ml=e=>t=>{const o=[],n=n=>{const r="td"===e?{scope:null}:{},s=t.replace(n,e,r);return o.push({item:n,sub:s}),s};return{replaceOrInit:(e,t)=>{if(Al(e)||Bl(e))return e;{const r=e;return((e,t)=>L(o,(o=>t(o.item,e))))(r,t).fold((()=>n(r)),(o=>t(e,o.item)?o.sub:n(r)))}}}},jl=e=>({unmerge:t=>{const o=Ll(t);return o.each((e=>ie(t,"scope",e))),()=>{const n=e.cell({element:t,colspan:1,rowspan:1});return kt(n,"width"),kt(t,"width"),o.each((e=>ie(n,"scope",e))),n}},merge:e=>(kt(e[0],"width"),(()=>{const t=ft(E(e,Ll));if(0===t.length)return C.none();{const e=t[0],o=["row","col"];return O(t,(t=>t!==e&&D(o,t)))?C.none():C.from(e)}})().fold((()=>fe(e[0],"scope")),(t=>ie(e[0],"scope",t+"group"))),g(e[0]))}),Il=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","table","thead","tfoot","tbody","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],Pl=Fr(),Fl=e=>((e,t)=>{const o=e.property().name(t);return D(Il,o)})(Pl,e),Hl=e=>((e,t)=>{const o=e.property().name(t);return D(["ol","ul"],o)})(Pl,e),ql=e=>{const t=ae("br"),o=e=>hr(e).bind((o=>{const n=ke(o).map((e=>!!Fl(e)||!!((e,t)=>D(["br","img","hr","input"],e.property().name(t)))(Pl,e)&&"img"!==Z(e))).getOr(!1);return Re(o).map((r=>{return!0===n||("li"===Z(s=r)||at(s,Hl).isSome())||t(o)||Fl(r)&&!ye(e,r)?[]:[pe.fromTag("br")];var s}))})).getOr([]),n=(()=>{const n=j(e,(e=>{const n=Ee(e);return(e=>I(e,(e=>t(e)||re(e)&&0===cr(e).trim().length)))(n)?[]:n.concat(o(e))}));return 0===n.length?[pe.fromTag("br")]:n})();je(e[0]),Me(e[0],n)},Vl=e=>Is(e,!0),$l=e=>{0===It(e).length&&Ie(e)},Ul=(e,t)=>({grid:e,cursor:t}),Gl=(e,t,o)=>{const n=((e,t,o)=>{var n,r;const s=jo(e).rows;return C.from(null===(r=null===(n=s[t])||void 0===n?void 0:n.cells[o])||void 0===r?void 0:r.element).filter(Vl).orThunk((()=>(e=>V(e,(e=>V(e.cells,(e=>{const t=e.element;return gt(Vl(t),t)})))))(s)))})(e,t,o);return Ul(e,n)},Kl=e=>W(e,((e,t)=>O(e,(e=>e.row===t.row))?e:e.concat([t])),[]).sort(((e,t)=>e.row-t.row)),Yl=(e,t)=>(o,n,r,s,l)=>{const a=Kl(n),c=E(a,(e=>e.row)),i=((e,t,o,n,r,s,l)=>{const{cols:a,rows:c}=jo(e),i=c[t[0]],m=j(t,(e=>((e,t,o)=>{const n=e[t];return j(n.cells,((n,r)=>wl(e,t,r,o)?[]:[n]))})(c,e,r))),d=E(i.cells,((e,t)=>Rs(xl(c,t,r)))),u=[...c];N(t,(e=>{u[e]=l.transformRow(c[e],o)}));const f=[...a,...u],g=((e,t)=>I(t,h)&&Rs(e.cells)?x:(e,o,n)=>!("th"===Z(e.element)&&t[n]))(i,d),p=((e,t)=>(o,n,r)=>C.some(bl(e,o.element,"col",t[r])))(n,d);return yl(f,m,r,s,l.transformCell,p,g)})(o,c,e,t,r,s.replaceOrInit,l);return Gl(i,n[0].row,n[0].column)},Jl=Yl("thead",!0),Ql=Yl("tbody",!1),Xl=Yl("tfoot",!1),Zl=(e,t,o)=>{const n=((e,t)=>Vt(e,(()=>t)))(e,o.section),r=Go(n);return Us(r,t,!0)},ea=(e,t,o,n)=>((e,t,o,n)=>{const r=Go(t),s=n.getWidths(r,n);kl(r,s,n)})(0,t,0,n.sizing),ta=(e,t,o,n)=>((e,t,o,n,r)=>{const s=Go(t),l=n.getWidths(s,n),a=n.pixelWidth(),{newSizes:c,delta:i}=r.calcRedestributedWidths(l,a,o.pixelDelta,n.isRelative);kl(s,c,n),n.adjustTableWidth(i)})(0,t,o,n.sizing,n.resize),oa=(e,t)=>O(t,(e=>0===e.column&&e.isLocked)),na=(e,t)=>O(t,(t=>t.column+t.colspan>=e.grid.columns&&t.isLocked)),ra=(e,t)=>{const o=tn(e),n=Nl(t);return W(n,((e,t)=>e+o[t.column].map(Eo).getOr(0)),0)},sa=e=>(t,o)=>Xs(t,o).filter((o=>!(e?oa:na)(t,o))).map((e=>({details:e,pixelDelta:ra(t,e)}))),la=e=>(t,o)=>Qs(t,o).filter((o=>!(e?oa:na)(t,o.cells))),aa=Ml("th"),ca=Ml("td"),ia=Js(((e,t,o,n)=>{const r=t[0].row,s=Kl(t),l=A(s,((e,t)=>({grid:hl(e.grid,r,t.row+e.delta,o,n.getOrInit),delta:e.delta+1})),{grid:e,delta:0}).grid;return Gl(l,r,t[0].column)}),Xs,f,f,_l),ma=Js(((e,t,o,n)=>{const r=Kl(t),s=r[r.length-1],l=s.row+s.rowspan,a=A(r,((e,t)=>hl(e,l,t.row,o,n.getOrInit)),e);return Gl(a,l,t[0].column)}),Xs,f,f,_l),da=Js(((e,t,o,n)=>{const r=t.details,s=Nl(r),l=s[0].column,a=A(s,((e,t)=>({grid:pl(e.grid,l,t.column+e.delta,o,n.getOrInit),delta:e.delta+1})),{grid:e,delta:0}).grid;return Gl(a,r[0].row,l)}),sa(!0),ta,f,_l),ua=Js(((e,t,o,n)=>{const r=t.details,s=r[r.length-1],l=s.column+s.colspan,a=Nl(r),c=A(a,((e,t)=>pl(e,l,t.column,o,n.getOrInit)),e);return Gl(c,r[0].row,l)}),sa(!1),ta,f,_l),fa=Js(((e,t,o,n)=>{const r=Nl(t.details),s=((e,t)=>j(e,(e=>{const o=e.cells,n=A(t,((e,t)=>t>=0&&t0?[Ye(e.element,n,e.section,e.isNew)]:[]})))(e,E(r,(e=>e.column))),l=s.length>0?s[0].cells.length-1:0;return Gl(s,r[0].row,Math.min(r[0].column,l))}),((e,t)=>Zs(e,t).map((t=>({details:t,pixelDelta:-ra(e,t)})))),ta,$l,_l),ga=Js(((e,t,o,n)=>{const r=Kl(t),s=((e,t,o)=>{const{rows:n,cols:r}=jo(e);return[...r,...n.slice(0,t),...n.slice(o+1)]})(e,r[0].row,r[r.length-1].row),l=s.length>0?s.length-1:0;return Gl(s,Math.min(t[0].row,l),t[0].column)}),Xs,f,$l,_l),ha=Js(((e,t,o,n)=>{const r=Nl(t),s=E(r,(e=>e.column)),l=Cl(e,s,!0,o,n.replaceOrInit);return Gl(l,t[0].row,t[0].column)}),Zs,f,f,aa),pa=Js(((e,t,o,n)=>{const r=Nl(t),s=E(r,(e=>e.column)),l=Cl(e,s,!1,o,n.replaceOrInit);return Gl(l,t[0].row,t[0].column)}),Zs,f,f,ca),wa=Js(Jl,Zs,f,f,aa),ba=Js(Ql,Zs,f,f,ca),va=Js(Xl,Zs,f,f,ca),ya=Js(((e,t,o,n)=>{const r=Sl(e,t,o,n.replaceOrInit);return Gl(r,t[0].row,t[0].column)}),Zs,f,f,aa),xa=Js(((e,t,o,n)=>{const r=Sl(e,t,o,n.replaceOrInit);return Gl(r,t[0].row,t[0].column)}),Zs,f,f,ca),Ca=Js(((e,t,o,n)=>{const r=t.cells;ql(r);const s=((e,t,o,n)=>{const r=jo(e).rows;if(0===r.length)return e;for(let e=t.startRow;e<=t.finishRow;e++)for(let o=t.startCol;o<=t.finishCol;o++){const t=r[e],s=Lo(t,o).isLocked;Ao(t,o,Ke(n(),!1,s))}return e})(e,t.bounds,0,n.merge(r));return Ul(s,C.from(r[0]))}),((e,t)=>((e,t)=>t.mergable)(0,t).filter((t=>el(e,t.cells)))),ea,f,jl),Sa=Js(((e,t,o,n)=>{const r=A(t,((e,t)=>tl(e,t,o,n.unmerge(t))),e);return Ul(r,C.from(t[0]))}),((e,t)=>((e,t)=>t.unmergable)(0,t).filter((t=>el(e,t)))),ea,f,jl),Ta=Js(((e,t,o,n)=>{const r=((e,t)=>{const o=Uo(e);return Us(o,t,!0)})(t.clipboard,t.generators);var s,l;return((e,t,o,n,r)=>{const s=Ho(t),l=((e,t,o)=>{const n=Mo(t[0]),r=jo(t).cols.length+e.row,s=k(n-e.column,(t=>t+e.column));return{row:r,column:L(s,(e=>I(o,(t=>t!==e)))).getOr(n-1)}})(e,t,s),a=jo(o).rows,c=ul(l,a,s),i=((e,t,o)=>{if(e.row>=t.length||e.column>Mo(t[0]))return rl.error("invalid start address out of table bounds, row: "+e.row+", column: "+e.column);const n=t.slice(e.row),r=n[0].cells.slice(e.column),s=Mo(o[0]),l=o.length;return rl.value({rowDelta:n.length-l,colDelta:r.length-s})})(l,t,a);return i.map((e=>{const o={...e,colDelta:e.colDelta-c.length},s=ml(t,o,n),i=Ho(s),m=ul(l,a,i);return((e,t,o,n,r,s)=>{const l=e.row,a=e.column,c=l+o.length,i=a+Mo(o[0])+s.length,m=P(s,x);for(let e=l;eUl(e,C.some(t.element))),(e=>Gl(e,t.row,t.column)))}),((e,t)=>jt(t.element).bind((o=>Ks(e,o).map((e=>({...e,generators:t.generators,clipboard:t.clipboard})))))),ea,f,_l),Ra=Js(((e,t,o,n)=>{const r=jo(e).rows,s=t.cells[0].column,l=r[t.cells[0].row],a=Zl(t.clipboard,t.generators,l),c=fl(s,e,a,t.generators,o);return Gl(c,t.cells[0].row,t.cells[0].column)}),la(!0),f,f,_l),Da=Js(((e,t,o,n)=>{const r=jo(e).rows,s=t.cells[t.cells.length-1].column+t.cells[t.cells.length-1].colspan,l=r[t.cells[0].row],a=Zl(t.clipboard,t.generators,l),c=fl(s,e,a,t.generators,o);return Gl(c,t.cells[0].row,t.cells[0].column)}),la(!1),f,f,_l),Oa=Js(((e,t,o,n)=>{const r=jo(e).rows,s=t.cells[0].row,l=r[s],a=Zl(t.clipboard,t.generators,l),c=gl(s,e,a,t.generators,o);return Gl(c,t.cells[0].row,t.cells[0].column)}),Qs,f,f,_l),ka=Js(((e,t,o,n)=>{const r=jo(e).rows,s=t.cells[t.cells.length-1].row+t.cells[t.cells.length-1].rowspan,l=r[t.cells[0].row],a=Zl(t.clipboard,t.generators,l),c=gl(s,e,a,t.generators,o);return Gl(c,t.cells[0].row,t.cells[0].column)}),Qs,f,f,_l),Ea=(e,t)=>{const o=Uo(e);return Xs(o,t).bind((e=>{const t=e[e.length-1],n=e[0].column,r=t.column+t.colspan,s=M(E(o.all,(e=>z(e.cells,(e=>e.column>=n&&e.column{const o=Uo(e);return Xs(o,t).bind(ks).getOr("")},Ba=(e,t)=>{const o=Uo(e);return Xs(o,t).bind((e=>{const t=e[e.length-1],n=e[0].row,r=t.row+t.rowspan;return(e=>{const t=E(e,(e=>Os(e).type)),o=D(t,"header"),n=D(t,"footer");if(o||n){const e=D(t,"body");return!o||e||n?o||e||!n?C.none():C.some("footer"):C.some("header")}return C.some("body")})(o.all.slice(n,r))})).getOr("")},za=(e,t)=>e.dispatch("NewRow",{node:t}),Aa=(e,t)=>e.dispatch("NewCell",{node:t}),Wa=(e,t,o)=>{e.dispatch("TableModified",{...o,table:t})},La={structure:!1,style:!0},_a={structure:!0,style:!1},Ma={structure:!0,style:!0},ja=e=>t=>t.options.get(e),Ia="100%",Pa=e=>{var t;const o=e.dom,n=null!==(t=o.getParent(e.selection.getStart(),o.isBlock))&&void 0!==t?t:e.getBody();return No(pe.fromDom(n))+"px"},Fa=e=>C.from(e.options.get("table_clone_elements")),Ha=ja("table_header_type"),qa=ja("table_column_resizing"),Va=e=>"preservetable"===qa(e),$a=e=>"resizetable"===qa(e),Ua=ja("table_sizing_mode"),Ga=e=>"relative"===Ua(e),Ka=e=>"fixed"===Ua(e),Ya=e=>"responsive"===Ua(e),Ja=ja("table_resize_bars"),Qa=ja("table_style_by_css"),Xa=e=>{const t=e.options,o=t.get("table_default_attributes");return t.isSet("table_default_attributes")?o:((e,t)=>Ya(e)||Qa(e)?t:Ka(e)?{...t,width:Pa(e)}:{...t,width:Ia})(e,o)},Za=ja("table_use_colgroups"),ec=(e,t)=>Ga(e)?sr(t):Ka(e)?rr(t):nr(t),tc=(e,t,o)=>{const n=e=>"table"===Z(Dr(e)),r=Fa(e),s=$a(e)?f:hs,l=t=>{switch(Ha(e)){case"section":return Ws();case"sectionCells":return Ls();case"cells":return _s();default:return((e,t)=>{var o;switch((o=Uo(e),V(o.all,(e=>{const t=Os(e);return"header"===t.type?C.from(t.subType):C.none()}))).getOr(t)){case"section":return Bs();case"sectionCells":return zs();case"cells":return As()}})(t,"section")}},a=(n,s,a,c)=>(i,m,d=!1)=>{kr(i);const u=pe.fromDom(e.getDoc()),f=Tr(a,u,r),g={sizing:ec(e,i),resize:$a(e)?xs():Cs(),section:l(i)};return s(i)?n(i,m,f,g).bind((n=>{t.refresh(i.dom),N(n.newRows,(t=>{za(e,t.dom)})),N(n.newCells,(t=>{Aa(e,t.dom)}));const r=((t,n)=>n.cursor.fold((()=>{const n=It(t);return H(n).filter(et).map((n=>{o.clearSelectedCells(t.dom);const r=e.dom.createRng();return r.selectNode(n.dom),e.selection.setRng(r),ie(n,"data-mce-selected","1"),r}))}),(n=>{const r=fs(gs,n),s=e.dom.createRng();return s.setStart(r.element.dom,r.offset),s.setEnd(r.element.dom,r.offset),e.selection.setRng(s),o.clearSelectedCells(t.dom),C.some(s)})))(i,n);return et(i)&&(kr(i),d||Wa(e,i.dom,c)),r.map((e=>({rng:e,effect:c})))})):C.none()},c=a(ga,(t=>!n(e)||Ss(t).rows>1),f,_a),i=a(fa,(t=>!n(e)||Ss(t).columns>1),f,_a);return{deleteRow:c,deleteColumn:i,insertRowsBefore:a(ia,x,f,_a),insertRowsAfter:a(ma,x,f,_a),insertColumnsBefore:a(da,x,s,_a),insertColumnsAfter:a(ua,x,s,_a),mergeCells:a(Ca,x,f,_a),unmergeCells:a(Sa,x,f,_a),pasteColsBefore:a(Ra,x,f,_a),pasteColsAfter:a(Da,x,f,_a),pasteRowsBefore:a(Oa,x,f,_a),pasteRowsAfter:a(ka,x,f,_a),pasteCells:a(Ta,x,f,Ma),makeCellsHeader:a(ya,x,f,_a),unmakeCellsHeader:a(xa,x,f,_a),makeColumnsHeader:a(ha,x,f,_a),unmakeColumnsHeader:a(pa,x,f,_a),makeRowsHeader:a(wa,x,f,_a),makeRowsBody:a(ba,x,f,_a),makeRowsFooter:a(va,x,f,_a),getTableRowType:Ba,getTableCellType:Na,getTableColType:Ea}},oc=(e,t,o)=>{const n=Et(e,t,1);1===o||n<=1?fe(e,t):ie(e,t,Math.min(o,n))},nc=(e,t)=>o=>{const n=o.column+o.colspan-1,r=o.column;return n>=e&&r{const n=o.substring(0,o.length-e.length),r=parseFloat(n);return n===r.toString()?t(r):rc.invalid(o)},lc={...rc,from:e=>bt(e,"%")?sc("%",rc.percent,e):bt(e,"px")?sc("px",rc.pixels,e):rc.invalid(e)},ac=(e,t,o)=>{const n=lc.from(o),r=I(e,(e=>"0px"===e))?((e,t)=>{const o=e.fold((()=>g("")),(e=>g(e/t+"px")),(()=>g(100/t+"%")));return k(t,o)})(n,e.length):((e,t,o)=>e.fold((()=>t),(e=>((e,t,o)=>{const n=o/t;return E(e,(e=>lc.from(e).fold((()=>e),(e=>e*n+"px"),(e=>e/100*o+"px"))))})(t,o,e)),(e=>((e,t)=>E(e,(e=>lc.from(e).fold((()=>e),(e=>e/t*100+"%"),(e=>e+"%")))))(t,o))))(n,e,t);return mc(r)},cc=(e,t)=>0===e.length?t:A(e,((e,t)=>lc.from(t).fold(g(0),h,h)+e),0),ic=(e,t)=>lc.from(e).fold(g(e),(e=>e+t+"px"),(e=>e+t+"%")),mc=e=>{if(0===e.length)return e;const t=A(e,((e,t)=>{const o=lc.from(t).fold((()=>({value:t,remainder:0})),(e=>((e,t)=>{const o=Math.floor(e);return{value:o+"px",remainder:e-o}})(e)),(e=>({value:e+"%",remainder:0})));return{output:[o.value].concat(e.output),remainder:e.remainder+o.remainder}}),{output:[],remainder:0}),o=t.output;return o.slice(0,o.length-1).concat([ic(o[o.length-1],Math.round(t.remainder))])},dc=lc.from,uc=e=>dc(e).fold(g("px"),g("px"),g("%")),fc=(e,t,o)=>{const n=Uo(e),r=n.all,s=Qo(n),l=Xo(n);t.each((t=>{const o=uc(t),r=ko(e),a=((e,t)=>Jn(e,t,Gn,Qn))(n,e),c=ac(a,r,t);Zo(n)?((e,t,o)=>{N(t,((t,n)=>{const r=cc([e[n]],Wt());St(t.element,"width",r+o)}))})(c,l,o):((e,t,o)=>{N(t,(t=>{const n=e.slice(t.column,t.colspan+t.column),r=cc(n,Wt());St(t.element,"width",r+o)}))})(c,s,o),St(e,"width",t)})),o.each((t=>{const o=uc(t),l=an(e),a=((e,t,o)=>Zn(e,t,o,Kn,Qn))(n,e,Rn);((e,t,o,n)=>{N(o,(t=>{const o=e.slice(t.row,t.rowspan+t.row),r=cc(o,Lt());St(t.element,"height",r+n)})),N(t,((t,o)=>{St(t.element,"height",e[o])}))})(ac(a,l,t),r,s,o),St(e,"height",t)}))},gc=e=>In(e).exists((e=>Nn.test(e))),hc=e=>In(e).exists((e=>Bn.test(e))),pc=e=>In(e).isNone(),wc=e=>{fe(e,"width")},bc=e=>{const t=Vn(e);fc(e,C.some(t),C.none()),wc(e)},vc=e=>{const t=(e=>ko(e)+"px")(e);fc(e,C.some(t),C.none()),wc(e)},yc=e=>{kt(e,"width");const t=Pt(e),o=t.length>0?t:It(e);N(o,(e=>{kt(e,"width"),wc(e)})),wc(e)},xc={styles:{"border-collapse":"collapse",width:"100%"},attributes:{border:"1"},colGroups:!1},Cc=(e,t,o,n)=>k(e,(e=>((e,t,o,n)=>{const r=pe.fromTag("tr");for(let s=0;s{e.selection.select(t.dom,!0),e.selection.collapse(!0)},Tc=(e,t,o,n,s)=>{const l=(e=>{const t=e.options,o=t.get("table_default_styles");return t.isSet("table_default_styles")?o:((e,t)=>Ya(e)||!Qa(e)?t:Ka(e)?{...t,width:Pa(e)}:{...t,width:Ia})(e,o)})(e),a={styles:l,attributes:Xa(e),colGroups:Za(e)};return e.undoManager.ignore((()=>{const r=((e,t,o,n,r,s=xc)=>{const l=pe.fromTag("table"),a="cells"!==r;Tt(l,s.styles),me(l,s.attributes),s.colGroups&&We(l,(e=>{const t=pe.fromTag("colgroup");return k(e,(()=>We(t,pe.fromTag("col")))),t})(t));const c=Math.min(e,o);if(a&&o>0){const e=pe.fromTag("thead");We(l,e);const s=Cc(o,t,"sectionCells"===r?c:0,n);Me(e,s)}const i=pe.fromTag("tbody");We(l,i);const m=Cc(a?e-c:e,t,a?0:o,n);return Me(i,m),l})(o,t,s,n,Ha(e),a);ie(r,"data-mce-id","__mce");const l=(e=>{const t=pe.fromTag("div"),o=pe.fromDom(e.dom.cloneNode(!0));return We(t,o),(e=>e.dom.innerHTML)(t)})(r);e.insertContent(l),e.addVisual()})),mt(Dr(e),'table[data-mce-id="__mce"]').map((t=>(Ka(e)?vc(t):Ya(e)?yc(t):(Ga(e)||(e=>r(e)&&-1!==e.indexOf("%"))(l.width))&&bc(t),kr(t),fe(t,"data-mce-id"),((e,t)=>{N(st(t,"tr"),(t=>{za(e,t.dom),N(st(t,"th,td"),(t=>{Aa(e,t.dom)}))}))})(e,t),((e,t)=>{mt(t,"td,th").each(w(Sc,e))})(e,t),t.dom))).getOrNull()};var Rc=tinymce.util.Tools.resolve("tinymce.FakeClipboard");const Dc="x-tinymce/dom-table-",Oc=Dc+"rows",kc=Dc+"columns",Ec=e=>{const t=Rc.FakeClipboardItem(e);Rc.write([t])},Nc=e=>{var t;const o=null!==(t=Rc.read())&&void 0!==t?t:[];return V(o,(t=>C.from(t.getType(e))))},Bc=e=>{Nc(e).isSome()&&Rc.clear()},zc=e=>{e.fold(Wc,(e=>Ec({[Oc]:e})))},Ac=()=>Nc(Oc),Wc=()=>Bc(Oc),Lc=e=>{e.fold(Mc,(e=>Ec({[kc]:e})))},_c=()=>Nc(kc),Mc=()=>Bc(kc),jc=e=>ss(Er(e),Or(e)),Ic=(e,t)=>{const o=Or(e),n=e=>Ft(e,o),l=t=>(e=>ls(Er(e),Or(e)))(e).bind((e=>n(e).map((o=>t(o,e))))),a=t=>{e.focus()},c=(t,o=!1)=>l(((n,r)=>{const s=ns(as(e),n,r);t(n,s,o).each(a)})),i=()=>l(((t,o)=>((e,t,o)=>{const n=Uo(e);return Xs(n,t).bind((e=>{const t=Us(n,o,!1),r=jo(t).rows.slice(e[0].row,e[e.length-1].row+e[e.length-1].rowspan),s=j(r,(e=>{const t=z(e.cells,(e=>!e.isLocked));return t.length>0?[{...e,cells:t}]:[]})),l=Gs(s);return gt(l.length>0,l)})).map((e=>E(e,(e=>{const t=He(e.element);return N(e.cells,(e=>{const o=qe(e.element);Fs(o,"colspan",e.colspan,1),Fs(o,"rowspan",e.rowspan,1),We(t,o)})),t}))))})(t,ns(as(e),t,o),Tr(f,pe.fromDom(e.getDoc()),C.none())))),m=()=>l(((t,o)=>((e,t)=>{const o=Uo(e);return Zs(o,t).map((e=>{const t=e[e.length-1],n=e[0].column,r=t.column+t.colspan,s=((e,t,o)=>{if(Zo(e)){const n=z(Xo(e),nc(t,o)),r=E(n,(e=>{const n=qe(e.element);return oc(n,"span",o-t),n})),s=pe.fromTag("colgroup");return Me(s,r),[s]}return[]})(o,n,r),l=((e,t,o)=>E(e.all,(e=>{const n=z(e.cells,nc(t,o)),r=E(n,(e=>{const n=qe(e.element);return oc(n,"colspan",o-t),n})),s=pe.fromTag("tr");return Me(s,r),s})))(o,n,r);return[...s,...l]}))})(t,ns(as(e),t,o)))),d=(t,o)=>o().each((o=>{const n=E(o,(e=>qe(e)));l(((o,r)=>{const s=Rr(pe.fromDom(e.getDoc())),l=((e,t,o,n)=>({selection:Zr(e),clipboard:o,generators:n}))(as(e),0,n,s);t(o,l).each(a)}))})),g=e=>(t,o)=>((e,t)=>X(e,t)?C.from(e.type):C.none())(o,"type").each((t=>{c(e(t),o.no_events)}));G({mceTableSplitCells:()=>c(t.unmergeCells),mceTableMergeCells:()=>c(t.mergeCells),mceTableInsertRowBefore:()=>c(t.insertRowsBefore),mceTableInsertRowAfter:()=>c(t.insertRowsAfter),mceTableInsertColBefore:()=>c(t.insertColumnsBefore),mceTableInsertColAfter:()=>c(t.insertColumnsAfter),mceTableDeleteCol:()=>c(t.deleteColumn),mceTableDeleteRow:()=>c(t.deleteRow),mceTableCutCol:()=>m().each((e=>{Lc(e),c(t.deleteColumn)})),mceTableCutRow:()=>i().each((e=>{zc(e),c(t.deleteRow)})),mceTableCopyCol:()=>m().each((e=>Lc(e))),mceTableCopyRow:()=>i().each((e=>zc(e))),mceTablePasteColBefore:()=>d(t.pasteColsBefore,_c),mceTablePasteColAfter:()=>d(t.pasteColsAfter,_c),mceTablePasteRowBefore:()=>d(t.pasteRowsBefore,Ac),mceTablePasteRowAfter:()=>d(t.pasteRowsAfter,Ac),mceTableDelete:()=>jc(e).each((t=>{Ft(t,o).filter(b(o)).each((t=>{const o=pe.fromText("");if(ze(t,o),Ie(t),e.dom.isEmpty(e.getBody()))e.setContent(""),e.selection.setCursorLocation();else{const t=e.dom.createRng();t.setStart(o.dom,0),t.setEnd(o.dom,0),e.selection.setRng(t),e.nodeChanged()}}))})),mceTableCellToggleClass:(t,o)=>{l((t=>{const n=as(e),r=I(n,(t=>e.formatter.match("tablecellclass",{value:o},t.dom))),s=r?e.formatter.remove:e.formatter.apply;N(n,(e=>s("tablecellclass",{value:o},e.dom))),Wa(e,t.dom,La)}))},mceTableToggleClass:(t,o)=>{l((t=>{e.formatter.toggle("tableclass",{value:o},t.dom),Wa(e,t.dom,La)}))},mceTableToggleCaption:()=>{jc(e).each((t=>{Ft(t,o).each((o=>{it(o,"caption").fold((()=>{const t=pe.fromTag("caption");We(t,pe.fromText("Caption")),((e,t,o)=>{Ne(e,0).fold((()=>{We(e,t)}),(e=>{Be(e,t)}))})(o,t),e.selection.setCursorLocation(t.dom,0)}),(n=>{ae("caption")(t)&&ve("td",o).each((t=>e.selection.setCursorLocation(t.dom,0))),Ie(n)})),Wa(e,o.dom,_a)}))}))},mceTableSizingMode:(t,n)=>(t=>jc(e).each((n=>{Ya(e)||Ka(e)||Ga(e)||Ft(n,o).each((o=>{"relative"!==t||gc(o)?"fixed"!==t||hc(o)?"responsive"!==t||pc(o)||yc(o):vc(o):bc(o),kr(o),Wa(e,o.dom,_a)}))})))(n),mceTableCellType:g((e=>"th"===e?t.makeCellsHeader:t.unmakeCellsHeader)),mceTableColType:g((e=>"th"===e?t.makeColumnsHeader:t.unmakeColumnsHeader)),mceTableRowType:g((e=>{switch(e){case"header":return t.makeRowsHeader;case"footer":return t.makeRowsFooter;default:return t.makeRowsBody}}))},((t,o)=>e.addCommand(o,t))),e.addCommand("mceInsertTable",((t,o)=>{((e,t,o,n={})=>{const r=e=>u(e)&&e>0;if(r(t)&&r(o)){const r=n.headerRows||0,s=n.headerColumns||0;return Tc(e,o,t,s,r)}console.error("Invalid values for mceInsertTable - rows and columns values are required to insert a table.")})(e,o.rows,o.columns,o.options)})),e.addCommand("mceTableApplyCellStyle",((t,o)=>{const l=e=>"tablecell"+e.toLowerCase().replace("-","");if(!s(o))return;const a=as(e);if(0===a.length)return;const c=((e,t)=>{const o={};return((e,t,o,n)=>{G(e,((e,r)=>{(t(e,r)?o:n)(e,r)}))})(e,t,(e=>(t,o)=>{e[o]=t})(o),f),o})(o,((t,o)=>e.formatter.has(l(o))&&r(t)));(e=>{for(const t in e)if(U.call(e,t))return!1;return!0})(c)||(G(c,((t,o)=>{const n=l(o);N(a,(o=>{""===t?e.formatter.remove(n,{value:null},o.dom,!0):e.formatter.apply(n,{value:t},o.dom)}))})),n(a[0]).each((t=>Wa(e,t.dom,La))))}))},Pc=Tl([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),Fc={before:Pc.before,on:Pc.on,after:Pc.after,cata:(e,t,o,n)=>e.fold(t,o,n),getStart:e=>e.fold(h,h,h)},Hc=(e,t)=>({selection:e,kill:t}),qc=(e,t)=>{const o=e.document.createRange();return o.selectNode(t.dom),o},Vc=(e,t)=>{const o=e.document.createRange();return $c(o,t),o},$c=(e,t)=>e.selectNodeContents(t.dom),Uc=(e,t,o)=>{const n=e.document.createRange();var r;return r=n,t.fold((e=>{r.setStartBefore(e.dom)}),((e,t)=>{r.setStart(e.dom,t)}),(e=>{r.setStartAfter(e.dom)})),((e,t)=>{t.fold((t=>{e.setEndBefore(t.dom)}),((t,o)=>{e.setEnd(t.dom,o)}),(t=>{e.setEndAfter(t.dom)}))})(n,o),n},Gc=(e,t,o,n,r)=>{const s=e.document.createRange();return s.setStart(t.dom,o),s.setEnd(n.dom,r),s},Kc=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom,width:e.width,height:e.height}),Yc=Tl([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),Jc=(e,t,o)=>t(pe.fromDom(o.startContainer),o.startOffset,pe.fromDom(o.endContainer),o.endOffset),Qc=(e,t)=>{const o=((e,t)=>t.match({domRange:e=>({ltr:g(e),rtl:C.none}),relative:(t,o)=>({ltr:Gt((()=>Uc(e,t,o))),rtl:Gt((()=>C.some(Uc(e,o,t))))}),exact:(t,o,n,r)=>({ltr:Gt((()=>Gc(e,t,o,n,r))),rtl:Gt((()=>C.some(Gc(e,n,r,t,o))))})}))(e,t);return((e,t)=>{const o=t.ltr();return o.collapsed?t.rtl().filter((e=>!1===e.collapsed)).map((e=>Yc.rtl(pe.fromDom(e.endContainer),e.endOffset,pe.fromDom(e.startContainer),e.startOffset))).getOrThunk((()=>Jc(0,Yc.ltr,o))):Jc(0,Yc.ltr,o)})(0,o)},Xc=(e,t)=>Qc(e,t).match({ltr:(t,o,n,r)=>{const s=e.document.createRange();return s.setStart(t.dom,o),s.setEnd(n.dom,r),s},rtl:(t,o,n,r)=>{const s=e.document.createRange();return s.setStart(n.dom,r),s.setEnd(t.dom,o),s}});Yc.ltr,Yc.rtl;const Zc=(e,t,o,n)=>({start:e,soffset:t,finish:o,foffset:n}),ei=(e,t,o,n)=>({start:Fc.on(e,t),finish:Fc.on(o,n)}),ti=(e,t)=>{const o=Xc(e,t);return Zc(pe.fromDom(o.startContainer),o.startOffset,pe.fromDom(o.endContainer),o.endOffset)},oi=ei,ni=(e,t,o,n,r)=>ye(o,n)?C.none():Gr(o,n,t).bind((t=>{const n=t.boxes.getOr([]);return n.length>1?(r(e,n,t.start,t.finish),C.some(Hc(C.some(oi(o,0,o,dr(o))),!0))):C.none()})),ri=(e,t)=>({item:e,mode:t}),si=(e,t,o,n=li)=>e.property().parent(t).map((e=>ri(e,n))),li=(e,t,o,n=ai)=>o.sibling(e,t).map((e=>ri(e,n))),ai=(e,t,o,n=ai)=>{const r=e.property().children(t);return o.first(r).map((e=>ri(e,n)))},ci=[{current:si,next:li,fallback:C.none()},{current:li,next:ai,fallback:C.some(si)},{current:ai,next:ai,fallback:C.some(li)}],ii=(e,t,o,n,r=ci)=>L(r,(e=>e.current===o)).bind((o=>o.current(e,t,n,o.next).orThunk((()=>o.fallback.bind((o=>ii(e,t,o,n))))))),mi=(e,t,o,n,r,s)=>ii(e,t,n,r).bind((t=>s(t.item)?C.none():o(t.item)?C.some(t.item):mi(e,t.item,o,t.mode,r,s))),di=e=>t=>0===e.property().children(t).length,ui=(e,t,o,n)=>mi(e,t,o,li,{sibling:(e,t)=>e.query().prevSibling(t),first:e=>e.length>0?C.some(e[e.length-1]):C.none()},n),fi=(e,t,o,n)=>mi(e,t,o,li,{sibling:(e,t)=>e.query().nextSibling(t),first:e=>e.length>0?C.some(e[0]):C.none()},n),gi=Fr(),hi=(e,t)=>((e,t,o)=>ui(e,t,di(e),o))(gi,e,t),pi=(e,t)=>((e,t,o)=>fi(e,t,di(e),o))(gi,e,t),wi=Tl([{none:["message"]},{success:[]},{failedUp:["cell"]},{failedDown:["cell"]}]),bi=e=>dt(e,"tr"),vi={...wi,verify:(e,t,o,n,r,s,l)=>dt(n,"td,th",l).bind((o=>dt(t,"td,th",l).map((t=>ye(o,t)?ye(n,o)&&dr(o)===r?s(t):wi.none("in same cell"):$r(bi,[o,t]).fold((()=>((e,t,o)=>{const n=e.getRect(t),r=e.getRect(o);return r.right>n.left&&r.lefts(t))))))).getOr(wi.none("default")),cata:(e,t,o,n,r)=>e.fold(t,o,n,r)},yi=ae("br"),xi=(e,t,o)=>t(e,o).bind((e=>re(e)&&0===cr(e).trim().length?xi(e,t,o):C.some(e))),Ci=(e,t,o,n)=>((e,t)=>Ne(e,t).filter(yi).orThunk((()=>Ne(e,t-1).filter(yi))))(t,o).bind((t=>n.traverse(t).fold((()=>xi(t,n.gather,e).map(n.relative)),(e=>(e=>Re(e).bind((t=>{const o=Ee(t);return((e,t)=>_(e,w(ye,t)))(o,e).map((n=>((e,t,o,n)=>({parent:e,children:t,element:o,index:n}))(t,o,e,n)))})))(e).map((e=>Fc.on(e.parent,e.index))))))),Si=(e,t)=>({left:e.left,top:e.top+t,right:e.right,bottom:e.bottom+t}),Ti=(e,t)=>({left:e.left,top:e.top-t,right:e.right,bottom:e.bottom-t}),Ri=(e,t,o)=>({left:e.left+t,top:e.top+o,right:e.right+t,bottom:e.bottom+o}),Di=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom}),Oi=(e,t)=>C.some(e.getRect(t)),ki=(e,t,o)=>ne(t)?Oi(e,t).map(Di):re(t)?((e,t,o)=>o>=0&&o0?e.getRangedRect(t,o-1,t,o):C.none())(e,t,o).map(Di):C.none(),Ei=(e,t)=>ne(t)?Oi(e,t).map(Di):re(t)?e.getRangedRect(t,0,t,dr(t)).map(Di):C.none(),Ni=Tl([{none:[]},{retry:["caret"]}]),Bi=(e,t,o)=>{return(n=t,r=Fl,lt(((e,t)=>t(e)),at,n,r,undefined)).fold(y,(t=>Ei(e,t).exists((e=>((e,t)=>e.leftt.right)(o,e)))));var n,r},zi={point:e=>e.bottom,adjuster:(e,t,o,n,r)=>{const s=Si(r,5);return Math.abs(o.bottom-n.bottom)<1||o.top>r.bottom?Ni.retry(s):o.top===r.bottom?Ni.retry(Si(r,1)):Bi(e,t,r)?Ni.retry(Ri(s,5,0)):Ni.none()},move:Si,gather:pi},Ai=(e,t,o,n,r)=>0===r?C.some(n):((e,t,o)=>e.elementFromPoint(t,o).filter((e=>"table"===Z(e))).isSome())(e,n.left,t.point(n))?((e,t,o,n,r)=>Ai(e,t,o,t.move(n,5),r))(e,t,o,n,r-1):e.situsFromPoint(n.left,t.point(n)).bind((s=>s.start.fold(C.none,(s=>Ei(e,s).bind((l=>t.adjuster(e,s,l,o,n).fold(C.none,(n=>Ai(e,t,o,n,r-1))))).orThunk((()=>C.some(n)))),C.none))),Wi=(e,t,o)=>{const n=e.move(o,5),r=Ai(t,e,o,n,100).getOr(n);return((e,t,o)=>e.point(t)>o.getInnerHeight()?C.some(e.point(t)-o.getInnerHeight()):e.point(t)<0?C.some(-e.point(t)):C.none())(e,r,t).fold((()=>t.situsFromPoint(r.left,e.point(r))),(o=>(t.scrollBy(0,o),t.situsFromPoint(r.left,e.point(r)-o))))},Li={tryUp:w(Wi,{point:e=>e.top,adjuster:(e,t,o,n,r)=>{const s=Ti(r,5);return Math.abs(o.top-n.top)<1||o.bottome.getSelection().bind((n=>((e,t,o,n)=>{const r=yi(t)?((e,t,o)=>o.traverse(t).orThunk((()=>xi(t,o.gather,e))).map(o.relative))(e,t,n):Ci(e,t,o,n);return r.map((e=>({start:e,finish:e})))})(t,n.finish,n.foffset,o).fold((()=>C.some(is(n.finish,n.foffset))),(r=>{const s=e.fromSitus(r);return l=vi.verify(e,n.finish,n.foffset,s.finish,s.foffset,o.failure,t),vi.cata(l,(e=>C.none()),(()=>C.none()),(e=>C.some(is(e,0))),(e=>C.some(is(e,dr(e)))));var l})))),Mi=(e,t,o,n,r,s)=>0===s?C.none():Pi(e,t,o,n,r).bind((l=>{const a=e.fromSitus(l),c=vi.verify(e,o,n,a.finish,a.foffset,r.failure,t);return vi.cata(c,(()=>C.none()),(()=>C.some(l)),(l=>ye(o,l)&&0===n?ji(e,o,n,Ti,r):Mi(e,t,l,0,r,s-1)),(l=>ye(o,l)&&n===dr(l)?ji(e,o,n,Si,r):Mi(e,t,l,dr(l),r,s-1)))})),ji=(e,t,o,n,r)=>ki(e,t,o).bind((t=>Ii(e,r,n(t,Li.getJumpSize())))),Ii=(e,t,o)=>{const n=To().browser;return n.isChromium()||n.isSafari()||n.isFirefox()?t.retry(e,o):C.none()},Pi=(e,t,o,n,r)=>ki(e,o,n).bind((t=>Ii(e,r,t))),Fi=(e,t,o,n,r)=>dt(n,"td,th",t).bind((n=>dt(n,"table",t).bind((s=>((e,t)=>at(e,(e=>Re(e).exists((e=>ye(e,t)))),void 0).isSome())(r,s)?((e,t,o)=>_i(e,t,o).bind((n=>Mi(e,t,n.element,n.offset,o,20).map(e.fromSitus))))(e,t,o).bind((e=>dt(e.finish,"td,th",t).map((t=>({start:n,finish:t,range:e}))))):C.none())))),Hi=(e,t,o,n,r,s)=>s(n,t).orThunk((()=>Fi(e,t,o,n,r).map((e=>{const t=e.range;return Hc(C.some(oi(t.start,t.soffset,t.finish,t.foffset)),!0)})))),qi=(e,t)=>dt(e,"tr",t).bind((e=>dt(e,"table",t).bind((o=>{const n=st(o,"tr");return ye(e,n[0])?((e,t,o)=>ui(gi,e,(e=>hr(e).isSome()),o))(o,0,t).map((e=>{const t=dr(e);return Hc(C.some(oi(e,t,e,t)),!0)})):C.none()})))),Vi=(e,t)=>dt(e,"tr",t).bind((e=>dt(e,"table",t).bind((o=>{const n=st(o,"tr");return ye(e,n[n.length-1])?((e,t,o)=>fi(gi,e,(e=>gr(e).isSome()),o))(o,0,t).map((e=>Hc(C.some(oi(e,0,e,0)),!0))):C.none()})))),$i=(e,t,o,n,r,s,l)=>Fi(e,o,n,r,s).bind((e=>ni(t,o,e.start,e.finish,l))),Ui=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}},Gi=()=>{const e=(e=>{const t=Ui(C.none()),o=()=>t.get().each(e);return{clear:()=>{o(),t.set(C.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:e=>{o(),t.set(C.some(e))}}})(f);return{...e,on:t=>e.get().each(t)}},Ki=(e,t)=>dt(e,"td,th",t),Yi={traverse:ke,gather:pi,relative:Fc.before,retry:Li.tryDown,failure:vi.failedDown},Ji={traverse:Oe,gather:hi,relative:Fc.before,retry:Li.tryUp,failure:vi.failedUp},Qi=e=>t=>t===e,Xi=Qi(38),Zi=Qi(40),em=e=>e>=37&&e<=40,tm={isBackward:Qi(37),isForward:Qi(39)},om={isBackward:Qi(39),isForward:Qi(37)},nm=Tl([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),rm={domRange:nm.domRange,relative:nm.relative,exact:nm.exact,exactFromRange:e=>nm.exact(e.start,e.soffset,e.finish,e.foffset),getWin:e=>{const t=(e=>e.match({domRange:e=>pe.fromDom(e.startContainer),relative:(e,t)=>Fc.getStart(e),exact:(e,t,o,n)=>e}))(e);return pe.fromDom(Te(t).dom.defaultView)},range:Zc},sm=document.caretPositionFromPoint?(e,t,o)=>{var n,r;return C.from(null===(r=(n=e.dom).caretPositionFromPoint)||void 0===r?void 0:r.call(n,t,o)).bind((t=>{if(null===t.offsetNode)return C.none();const o=e.dom.createRange();return o.setStart(t.offsetNode,t.offset),o.collapse(),C.some(o)}))}:document.caretRangeFromPoint?(e,t,o)=>{var n,r;return C.from(null===(r=(n=e.dom).caretRangeFromPoint)||void 0===r?void 0:r.call(n,t,o))}:C.none,lm=(e,t)=>{const o=Z(e);return"input"===o?Fc.after(e):D(["br","img"],o)?0===t?Fc.before(e):Fc.after(e):Fc.on(e,t)},am=e=>C.from(e.getSelection()),cm=(e,t)=>{am(e).each((e=>{e.removeAllRanges(),e.addRange(t)}))},im=(e,t,o,n,r)=>{const s=Gc(e,t,o,n,r);cm(e,s)},mm=(e,t)=>Qc(e,t).match({ltr:(t,o,n,r)=>{im(e,t,o,n,r)},rtl:(t,o,n,r)=>{am(e).each((s=>{if(s.setBaseAndExtent)s.setBaseAndExtent(t.dom,o,n.dom,r);else if(s.extend)try{((e,t,o,n,r,s)=>{t.collapse(o.dom,n),t.extend(r.dom,s)})(0,s,t,o,n,r)}catch(s){im(e,n,r,t,o)}else im(e,n,r,t,o)}))}}),dm=(e,t,o,n,r)=>{const s=((e,t,o,n)=>{const r=lm(e,t),s=lm(o,n);return rm.relative(r,s)})(t,o,n,r);mm(e,s)},um=(e,t,o)=>{const n=((e,t)=>{const o=e.fold(Fc.before,lm,Fc.after),n=t.fold(Fc.before,lm,Fc.after);return rm.relative(o,n)})(t,o);mm(e,n)},fm=e=>{if(e.rangeCount>0){const t=e.getRangeAt(0),o=e.getRangeAt(e.rangeCount-1);return C.some(Zc(pe.fromDom(t.startContainer),t.startOffset,pe.fromDom(o.endContainer),o.endOffset))}return C.none()},gm=e=>{if(null===e.anchorNode||null===e.focusNode)return fm(e);{const t=pe.fromDom(e.anchorNode),o=pe.fromDom(e.focusNode);return((e,t,o,n)=>{const r=((e,t,o,n)=>{const r=Se(e).dom.createRange();return r.setStart(e.dom,t),r.setEnd(o.dom,n),r})(e,t,o,n),s=ye(e,o)&&t===n;return r.collapsed&&!s})(t,e.anchorOffset,o,e.focusOffset)?C.some(Zc(t,e.anchorOffset,o,e.focusOffset)):fm(e)}},hm=(e,t,o=!0)=>{const n=(o?Vc:qc)(e,t);cm(e,n)},pm=e=>(e=>am(e).filter((e=>e.rangeCount>0)).bind(gm))(e).map((e=>rm.exact(e.start,e.soffset,e.finish,e.foffset))),wm=e=>({elementFromPoint:(t,o)=>pe.fromPoint(pe.fromDom(e.document),t,o),getRect:e=>e.dom.getBoundingClientRect(),getRangedRect:(t,o,n,r)=>{const s=rm.exact(t,o,n,r);return((e,t)=>(e=>{const t=e.getClientRects(),o=t.length>0?t[0]:e.getBoundingClientRect();return o.width>0||o.height>0?C.some(o).map(Kc):C.none()})(Xc(e,t)))(e,s)},getSelection:()=>pm(e).map((t=>ti(e,t))),fromSitus:t=>{const o=rm.relative(t.start,t.finish);return ti(e,o)},situsFromPoint:(t,o)=>((e,t,o)=>((e,t,o)=>{const n=pe.fromDom(e.document);return sm(n,t,o).map((e=>Zc(pe.fromDom(e.startContainer),e.startOffset,pe.fromDom(e.endContainer),e.endOffset)))})(e,t,o))(e,t,o).map((e=>ei(e.start,e.soffset,e.finish,e.foffset))),clearSelection:()=>{(e=>{am(e).each((e=>e.removeAllRanges()))})(e)},collapseSelection:(t=!1)=>{pm(e).each((o=>o.fold((e=>e.collapse(t)),((o,n)=>{const r=t?o:n;um(e,r,r)}),((o,n,r,s)=>{const l=t?o:r,a=t?n:s;dm(e,l,a,l,a)}))))},setSelection:t=>{dm(e,t.start,t.soffset,t.finish,t.foffset)},setRelativeSelection:(t,o)=>{um(e,t,o)},selectNode:t=>{hm(e,t,!1)},selectContents:t=>{hm(e,t)},getInnerHeight:()=>e.innerHeight,getScrollY:()=>(e=>{const t=void 0!==e?e.dom:document,o=t.body.scrollLeft||t.documentElement.scrollLeft,n=t.body.scrollTop||t.documentElement.scrollTop;return dn(o,n)})(pe.fromDom(e.document)).top,scrollBy:(t,o)=>{((e,t,o)=>{const n=(void 0!==o?o.dom:document).defaultView;n&&n.scrollBy(e,t)})(t,o,pe.fromDom(e.document))}}),bm=(e,t)=>({rows:e,cols:t}),vm=e=>void 0!==e.dom.classList,ym=(e,t)=>((e,t,o)=>{const n=((e,t)=>{const o=de(e,t);return void 0===o||""===o?[]:o.split(" ")})(e,t).concat([o]);return ie(e,t,n.join(" ")),!0})(e,"class",t),xm=(e,t)=>{vm(e)?e.dom.classList.add(t):ym(e,t)},Cm=(e,t)=>vm(e)&&e.dom.classList.contains(t),Sm=()=>({tag:"none"}),Tm=e=>({tag:"multiple",elements:e}),Rm=e=>({tag:"single",element:e}),Dm=e=>{const t=pe.fromDom((e=>{if(Qe()&&m(e.target)){const t=pe.fromDom(e.target);if(ne(t)&&m(t.dom.shadowRoot)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return H(t)}}return C.from(e.target)})(e).getOr(e.target)),o=()=>e.stopPropagation(),n=()=>e.preventDefault(),r=(s=n,l=o,(...e)=>s(l.apply(null,e)));var s,l;return((e,t,o,n,r,s,l)=>({target:e,x:t,y:o,stop:n,prevent:r,kill:s,raw:l}))(t,e.clientX,e.clientY,o,n,r,e)},Om=(e,t,o,n)=>{e.dom.removeEventListener(t,o,n)},km=x,Em=(e,t,o)=>((e,t,o,n)=>((e,t,o,n,r)=>{const s=((e,t)=>o=>{e(o)&&t(Dm(o))})(o,n);return e.dom.addEventListener(t,s,r),{unbind:w(Om,e,t,s,r)}})(e,t,o,n,!1))(e,t,km,o),Nm=Dm,Bm=e=>!Cm(pe.fromDom(e.target),"ephox-snooker-resizer-bar"),zm=(e,t)=>{const o=(r=os.selectedSelector,{get:()=>Qr(pe.fromDom(e.getBody()),r).fold((()=>ls(Er(e),Or(e)).fold(Sm,Rm)),Tm)}),n=((e,t,o)=>{const n=t=>{fe(t,e.selected),fe(t,e.firstSelected),fe(t,e.lastSelected)},r=t=>{ie(t,e.selected,"1")},s=e=>{l(e),o()},l=t=>{const o=st(t,`${e.selectedSelector},${e.firstSelectedSelector},${e.lastSelectedSelector}`);N(o,n)};return{clearBeforeUpdate:l,clear:s,selectRange:(o,n,l,a)=>{s(o),N(n,r),ie(l,e.firstSelected,"1"),ie(a,e.lastSelected,"1"),t(n,l,a)},selectedSelector:e.selectedSelector,firstSelectedSelector:e.firstSelectedSelector,lastSelectedSelector:e.lastSelectedSelector}})(os,((t,o,n)=>{Ft(o).each((r=>{const s=Fa(e),l=Tr(f,pe.fromDom(e.getDoc()),s),a=((e,t,o)=>{const n=Uo(e);return Xs(n,t).map((e=>{const t=Us(n,o,!1),{rows:r}=jo(t),s=((e,t)=>{const o=e.slice(0,t[t.length-1].row+1),n=Gs(o);return j(n,(e=>{const o=e.cells.slice(0,t[t.length-1].column+1);return E(o,(e=>e.element))}))})(r,e),l=((e,t)=>{const o=e.slice(t[0].row+t[0].rowspan-1,e.length),n=Gs(o);return j(n,(e=>{const o=e.cells.slice(t[0].column+t[0].colspan-1,e.cells.length);return E(o,(e=>e.element))}))})(r,e);return{upOrLeftCells:s,downOrRightCells:l}}))})(r,{selection:as(e)},l);((e,t,o,n,r)=>{e.dispatch("TableSelectionChange",{cells:t,start:o,finish:n,otherCells:r})})(e,t,o,n,a)}))}),(()=>(e=>{e.dispatch("TableSelectionClear")})(e)));var r;return e.on("init",(o=>{const r=e.getWin(),s=Dr(e),l=Or(e),a=((e,t,o,n)=>{const r=((e,t,o,n)=>{const r=Gi(),s=r.clear,l=s=>{r.on((r=>{n.clearBeforeUpdate(t),Ki(s.target,o).each((l=>{Gr(r,l,o).each((o=>{const r=o.boxes.getOr([]);if(1===r.length){const o=r[0],l="false"===Ps(o),a=ut(js(s.target),o,ye);l&&a&&(n.selectRange(t,r,o,o),e.selectContents(o))}else r.length>1&&(n.selectRange(t,r,o.start,o.finish),e.selectContents(l))}))}))}))};return{clearstate:s,mousedown:e=>{n.clear(t),Ki(e.target,o).each(r.set)},mouseover:e=>{l(e)},mouseup:e=>{l(e),s()}}})(wm(e),t,o,n);return{clearstate:r.clearstate,mousedown:r.mousedown,mouseover:r.mouseover,mouseup:r.mouseup}})(r,s,l,n),c=((e,t,o,n)=>{const r=wm(e),s=()=>(n.clear(t),C.none());return{keydown:(e,l,a,c,i,m)=>{const d=e.raw,u=d.which,f=!0===d.shiftKey,g=Kr(t,n.selectedSelector).fold((()=>(em(u)&&!f&&n.clearBeforeUpdate(t),Zi(u)&&f?w($i,r,t,o,Yi,c,l,n.selectRange):Xi(u)&&f?w($i,r,t,o,Ji,c,l,n.selectRange):Zi(u)?w(Hi,r,o,Yi,c,l,Vi):Xi(u)?w(Hi,r,o,Ji,c,l,qi):C.none)),(e=>{const o=o=>()=>{const s=V(o,(o=>((e,t,o,n,r)=>Jr(n,e,t,r.firstSelectedSelector,r.lastSelectedSelector).map((e=>(r.clearBeforeUpdate(o),r.selectRange(o,e.boxes,e.start,e.finish),e.boxes))))(o.rows,o.cols,t,e,n)));return s.fold((()=>Yr(t,n.firstSelectedSelector,n.lastSelectedSelector).map((e=>{const o=Zi(u)||m.isForward(u)?Fc.after:Fc.before;return r.setRelativeSelection(Fc.on(e.first,0),o(e.table)),n.clear(t),Hc(C.none(),!0)}))),(e=>C.some(Hc(C.none(),!0))))};return Zi(u)&&f?o([bm(1,0)]):Xi(u)&&f?o([bm(-1,0)]):m.isBackward(u)&&f?o([bm(0,-1),bm(-1,0)]):m.isForward(u)&&f?o([bm(0,1),bm(1,0)]):em(u)&&!f?s:C.none}));return g()},keyup:(e,r,s,l,a)=>Kr(t,n.selectedSelector).fold((()=>{const c=e.raw,i=c.which;return!0===c.shiftKey&&em(i)?((e,t,o,n,r,s,l)=>ye(o,r)&&n===s?C.none():dt(o,"td,th",t).bind((o=>dt(r,"td,th",t).bind((n=>ni(e,t,o,n,l))))))(t,o,r,s,l,a,n.selectRange):C.none()}),C.none)}})(r,s,l,n),i=((e,t,o,n)=>{const r=wm(e);return(e,s)=>{n.clearBeforeUpdate(t),Gr(e,s,o).each((e=>{const o=e.boxes.getOr([]);n.selectRange(t,o,e.start,e.finish),r.selectContents(s),r.collapseSelection()}))}})(r,s,l,n);e.on("TableSelectorChange",(e=>i(e.start,e.finish)));const m=(t,o)=>{(e=>!0===e.raw.shiftKey)(t)&&(o.kill&&t.kill(),o.selection.each((t=>{const o=rm.relative(t.start,t.finish),n=Xc(r,o);e.selection.setRng(n)})))},d=e=>0===e.button,u=(()=>{const e=Ui(pe.fromDom(s)),t=Ui(0);return{touchEnd:o=>{const n=pe.fromDom(o.target);if(ae("td")(n)||ae("th")(n)){const r=e.get(),s=t.get();ye(r,n)&&o.timeStamp-s<300&&(o.preventDefault(),i(n,n))}e.set(n),t.set(o.timeStamp)}}})();e.on("dragstart",(e=>{a.clearstate()})),e.on("mousedown",(e=>{d(e)&&Bm(e)&&a.mousedown(Nm(e))})),e.on("mouseover",(e=>{var t;void 0!==(t=e).buttons&&0==(1&t.buttons)||!Bm(e)||a.mouseover(Nm(e))})),e.on("mouseup",(e=>{d(e)&&Bm(e)&&a.mouseup(Nm(e))})),e.on("touchend",u.touchEnd),e.on("keyup",(t=>{const o=Nm(t);if(o.raw.shiftKey&&em(o.raw.which)){const t=e.selection.getRng(),n=pe.fromDom(t.startContainer),r=pe.fromDom(t.endContainer);c.keyup(o,n,t.startOffset,r,t.endOffset).each((e=>{m(o,e)}))}})),e.on("keydown",(o=>{const n=Nm(o);t.hide();const r=e.selection.getRng(),s=pe.fromDom(r.startContainer),l=pe.fromDom(r.endContainer),a=rn(tm,om)(pe.fromDom(e.selection.getStart()));c.keydown(n,s,r.startOffset,l,r.endOffset,a).each((e=>{m(n,e)})),t.show()})),e.on("NodeChange",(()=>{const t=e.selection,o=pe.fromDom(t.getStart()),r=pe.fromDom(t.getEnd());$r(Ft,[o,r]).fold((()=>n.clear(s)),f)}))})),e.on("PreInit",(()=>{e.serializer.addTempAttr(os.firstSelected),e.serializer.addTempAttr(os.lastSelected)})),{getSelectedCells:()=>((e,t,o,n)=>{switch(e.tag){case"none":return t();case"single":return(e=>[e.dom])(e.element);case"multiple":return(e=>E(e,(e=>e.dom)))(e.elements)}})(o.get(),g([])),clearSelectedCells:e=>n.clear(pe.fromDom(e))}},Am=e=>{let t=[];return{bind:e=>{if(void 0===e)throw new Error("Event bind error: undefined handler");t.push(e)},unbind:e=>{t=z(t,(t=>t!==e))},trigger:(...o)=>{const n={};N(e,((e,t)=>{n[e]=o[t]})),N(t,(e=>{e(n)}))}}},Wm=e=>({registry:K(e,(e=>({bind:e.bind,unbind:e.unbind}))),trigger:K(e,(e=>e.trigger))}),Lm=e=>e.slice(0).sort(),_m=(e,t)=>{const o=z(t,(t=>!D(e,t)));o.length>0&&(e=>{throw new Error("Unsupported keys for object: "+Lm(e).join(", "))})(o)},Mm=e=>((e,t)=>((e,t,o)=>{if(0===t.length)throw new Error("You must specify at least one required field.");return((e,t)=>{if(!l(t))throw new Error("The required fields must be an array. Was: "+t+".");N(t,(t=>{if(!r(t))throw new Error("The value "+t+" in the "+e+" fields was not a string.")}))})("required",t),(e=>{const t=Lm(e);L(t,((e,o)=>o{throw new Error("The field: "+e+" occurs more than once in the combined fields: ["+t.join(", ")+"].")}))})(t),n=>{const r=$(n);I(t,(e=>D(r,e)))||((e,t)=>{throw new Error("All required keys ("+Lm(e).join(", ")+") were not specified. Specified keys were: "+Lm(t).join(", ")+".")})(t,r),e(t,r);const s=z(t,(e=>!o.validate(n[e],e)));return s.length>0&&((e,t)=>{throw new Error("All values need to be of type: "+t+". Keys ("+Lm(e).join(", ")+") were not.")})(s,o.label),n}})(e,t,{validate:d,label:"function"}))(_m,e),jm=Mm(["compare","extract","mutate","sink"]),Im=Mm(["element","start","stop","destroy"]),Pm=Mm(["forceDrop","drop","move","delayDrop"]),Fm=()=>{const e=(()=>{const e=Wm({move:Am(["info"])});return{onEvent:f,reset:f,events:e.registry}})(),t=(()=>{let e=C.none();const t=Wm({move:Am(["info"])});return{onEvent:(o,n)=>{n.extract(o).each((o=>{const r=((t,o)=>{const n=e.map((e=>t.compare(e,o)));return e=C.some(o),n})(n,o);r.each((e=>{t.trigger.move(e)}))}))},reset:()=>{e=C.none()},events:t.registry}})();let o=e;return{on:()=>{o.reset(),o=t},off:()=>{o.reset(),o=e},isOn:()=>o===t,onEvent:(e,t)=>{o.onEvent(e,t)},events:t.events}},Hm=e=>{const t=e.replace(/\./g,"-");return{resolve:e=>t+"-"+e}},qm=Hm("ephox-dragster").resolve;var Vm=jm({compare:(e,t)=>dn(t.left-e.left,t.top-e.top),extract:e=>C.some(dn(e.x,e.y)),sink:(e,t)=>{const o=(e=>{const t={layerClass:qm("blocker"),...e},o=pe.fromTag("div");return ie(o,"role","presentation"),Tt(o,{position:"fixed",left:"0px",top:"0px",width:"100%",height:"100%"}),xm(o,qm("blocker")),xm(o,t.layerClass),{element:g(o),destroy:()=>{Ie(o)}}})(t),n=Em(o.element(),"mousedown",e.forceDrop),r=Em(o.element(),"mouseup",e.drop),s=Em(o.element(),"mousemove",e.move),l=Em(o.element(),"mouseout",e.delayDrop);return Im({element:o.element,start:e=>{We(e,o.element())},stop:()=>{Ie(o.element())},destroy:()=>{o.destroy(),r.unbind(),s.unbind(),l.unbind(),n.unbind()}})},mutate:(e,t)=>{e.mutate(t.left,t.top)}});const $m=Hm("ephox-snooker").resolve,Um=$m("resizer-bar"),Gm=$m("resizer-rows"),Km=$m("resizer-cols"),Ym=e=>{const t=st(e.parent(),"."+Um);N(t,Ie)},Jm=(e,t,o)=>{const n=e.origin();N(t,(t=>{t.each((t=>{const r=o(n,t);xm(r,Um),We(e.parent(),r)}))}))},Qm=(e,t,o,n,r)=>{const s=fn(o),l=t.isResizable,a=n.length>0?Rn.positions(n,o):[],c=a.length>0?((e,t)=>j(e.all,((e,o)=>t(e.element)?[o]:[])))(e,l):[];((e,t,o,n)=>{Jm(e,t,((e,t)=>{const r=((e,t,o,n,r)=>{const s=pe.fromTag("div");return Tt(s,{position:"absolute",left:t+"px",top:o-3.5+"px",height:"7px",width:n+"px"}),me(s,{"data-row":e,role:"presentation"}),s})(t.row,o.left-e.left,t.y-e.top,n);return xm(r,Gm),r}))})(t,z(a,((e,t)=>O(c,(e=>t===e)))),s,Eo(o));const i=r.length>0?On.positions(r,o):[],m=i.length>0?((e,t)=>{const o=[];return k(e.grid.columns,(n=>{en(e,n).map((e=>e.element)).forall(t)&&o.push(n)})),z(o,(o=>{const n=Jo(e,(e=>e.column===o));return I(n,(e=>t(e.element)))}))})(e,l):[];((e,t,o,n)=>{Jm(e,t,((e,t)=>{const r=((e,t,o,n,r)=>{const s=pe.fromTag("div");return Tt(s,{position:"absolute",left:t-3.5+"px",top:o+"px",height:r+"px",width:"7px"}),me(s,{"data-column":e,role:"presentation"}),s})(t.col,t.x-e.left,o.top-e.top,0,n);return xm(r,Km),r}))})(t,z(i,((e,t)=>O(m,(e=>t===e)))),s,cn(o))},Xm=(e,t)=>{if(Ym(e),e.isResizable(t)){const o=Uo(t),n=nn(o),r=tn(o);Qm(o,e,t,n,r)}},Zm=(e,t)=>{const o=st(e.parent(),"."+Um);N(o,t)},ed=e=>{Zm(e,(e=>{St(e,"display","none")}))},td=e=>{Zm(e,(e=>{St(e,"display","block")}))},od=$m("resizer-bar-dragging"),nd=e=>{const t=(()=>{const e=Wm({drag:Am(["xDelta","yDelta","target"])});let t=C.none();const o=(()=>{const e=Wm({drag:Am(["xDelta","yDelta"])});return{mutate:(t,o)=>{e.trigger.drag(t,o)},events:e.registry}})();return o.events.drag.bind((o=>{t.each((t=>{e.trigger.drag(o.xDelta,o.yDelta,t)}))})),{assign:e=>{t=C.some(e)},get:()=>t,mutate:o.mutate,events:e.registry}})(),o=((e,t={})=>{var o;return((e,t,o)=>{let n=!1;const r=Wm({start:Am([]),stop:Am([])}),s=Fm(),l=()=>{m.stop(),s.isOn()&&(s.off(),r.trigger.stop())},c=((e,t)=>{let o=null;const n=()=>{a(o)||(clearTimeout(o),o=null)};return{cancel:n,throttle:(...t)=>{n(),o=setTimeout((()=>{o=null,e.apply(null,t)}),200)}}})(l);s.events.move.bind((o=>{t.mutate(e,o.info)}));const i=e=>(...t)=>{n&&e.apply(null,t)},m=t.sink(Pm({forceDrop:l,drop:i(l),move:i((e=>{c.cancel(),s.onEvent(e,t)})),delayDrop:i(c.throttle)}),o);return{element:m.element,go:e=>{m.start(e),s.on(),r.trigger.start()},on:()=>{n=!0},off:()=>{n=!1},destroy:()=>{m.destroy()},events:r.registry}})(e,null!==(o=t.mode)&&void 0!==o?o:Vm,t)})(t,{});let n=C.none();const r=(e,t)=>C.from(de(e,t));t.events.drag.bind((e=>{r(e.target,"data-row").each((t=>{const o=At(e.target,"top");St(e.target,"top",o+e.yDelta+"px")})),r(e.target,"data-column").each((t=>{const o=At(e.target,"left");St(e.target,"left",o+e.xDelta+"px")}))}));const s=(e,t)=>At(e,t)-Et(e,"data-initial-"+t,0);o.events.stop.bind((()=>{t.get().each((t=>{n.each((o=>{r(t,"data-row").each((e=>{const n=s(t,"top");fe(t,"data-initial-top"),d.trigger.adjustHeight(o,n,parseInt(e,10))})),r(t,"data-column").each((e=>{const n=s(t,"left");fe(t,"data-initial-left"),d.trigger.adjustWidth(o,n,parseInt(e,10))})),Xm(e,o)}))}))}));const l=(n,r)=>{d.trigger.startAdjust(),t.assign(n),ie(n,"data-initial-"+r,At(n,r)),xm(n,od),St(n,"opacity","0.2"),o.go(e.parent())},c=Em(e.parent(),"mousedown",(e=>{var t;t=e.target,Cm(t,Gm)&&l(e.target,"top"),(e=>Cm(e,Km))(e.target)&&l(e.target,"left")})),i=t=>ye(t,e.view()),m=Em(e.view(),"mouseover",(t=>{var o;(o=t.target,dt(o,"table",i).filter(Is)).fold((()=>{et(t.target)&&Ym(e)}),(t=>{n=C.some(t),Xm(e,t)}))})),d=Wm({adjustHeight:Am(["table","delta","row"]),adjustWidth:Am(["table","delta","column"]),startAdjust:Am([])});return{destroy:()=>{c.unbind(),m.unbind(),o.destroy(),Ym(e)},refresh:t=>{Xm(e,t)},on:o.on,off:o.off,hideBars:w(ed,e),showBars:w(td,e),events:d.registry}},rd=(e,t,o)=>{const n=Rn,r=On,s=nd(e),l=Wm({beforeResize:Am(["table","type"]),afterResize:Am(["table","type"]),startDrag:Am([])});return s.events.adjustHeight.bind((e=>{const t=e.table;l.trigger.beforeResize(t,"row");((e,t,o,n)=>{const r=Uo(e),s=((e,t,o)=>Zn(e,t,o,Hn,(e=>e.getOrThunk(Lt))))(r,e,n),l=E(s,((e,n)=>o===n?Math.max(t+e,Lt()):e)),a=Ol(r,l),c=((e,t)=>E(e.all,((e,o)=>({element:e.element,height:t[o]}))))(r,l);N(c,(e=>{_n(e.element,e.height)})),N(a,(e=>{_n(e.element,e.height)}));const i=A(l,((e,t)=>e+t),0);_n(e,i)})(t,n.delta(e.delta,t),e.row,n),l.trigger.afterResize(t,"row")})),s.events.startAdjust.bind((e=>{l.trigger.startDrag()})),s.events.adjustWidth.bind((e=>{const n=e.table;l.trigger.beforeResize(n,"col");const s=r.delta(e.delta,n),a=o(n);El(n,s,e.column,t,a),l.trigger.afterResize(n,"col")})),{on:s.on,off:s.off,refreshBars:s.refresh,hideBars:s.hideBars,showBars:s.showBars,destroy:s.destroy,events:l.registry}},sd=e=>m(e)&&"TABLE"===e.nodeName,ld="bar-",ad=e=>"false"!==de(e,"data-mce-resize"),cd=e=>{const t=Gi(),o=Gi(),n=Gi();let r,s;const l=t=>ec(e,t),a=()=>Va(e)?Cs():xs();return e.on("init",(()=>{const r=((e,t)=>e.inline?((e,t,o)=>({parent:g(t),view:g(e),origin:g(dn(0,0)),isResizable:o}))(pe.fromDom(e.getBody()),(()=>{const e=pe.fromTag("div");return Tt(e,{position:"static",height:"0",width:"0",padding:"0",margin:"0",border:"0"}),We(tt(pe.fromDom(document)),e),e})(),t):((e,t)=>{const o=se(e)?(e=>pe.fromDom(Te(e).dom.documentElement))(e):e;return{parent:g(o),view:g(e),origin:g(dn(0,0)),isResizable:t}})(pe.fromDom(e.getDoc()),t))(e,ad);if(n.set(r),(e=>{const t=e.options.get("object_resizing");return D(t.split(","),"table")})(e)&&Ja(e)){const n=a(),s=rd(r,n,l);s.on(),s.events.startDrag.bind((o=>{t.set(e.selection.getRng())})),s.events.beforeResize.bind((t=>{const o=t.table.dom;((e,t,o,n,r)=>{e.dispatch("ObjectResizeStart",{target:t,width:o,height:n,origin:r})})(e,o,Nr(o),Br(o),ld+t.type)})),s.events.afterResize.bind((o=>{const n=o.table,r=n.dom;kr(n),t.on((t=>{e.selection.setRng(t),e.focus()})),((e,t,o,n,r)=>{e.dispatch("ObjectResized",{target:t,width:o,height:n,origin:r})})(e,r,Nr(r),Br(r),ld+o.type),e.undoManager.add()})),o.set(s)}})),e.on("ObjectResizeStart",(t=>{const o=t.target;if(sd(o)){const n=pe.fromDom(o);N(e.dom.select(".mce-clonedresizable"),(t=>{e.dom.addClass(t,"mce-"+qa(e)+"-columns")})),!hc(n)&&Ka(e)?vc(n):!gc(n)&&Ga(e)&&bc(n),pc(n)&&wt(t.origin,ld)&&bc(n),r=t.width,s=Ya(e)?"":((e,t)=>{const o=e.dom.getStyle(t,"width")||e.dom.getAttrib(t,"width");return C.from(o).filter(yt)})(e,o).getOr("")}})),e.on("ObjectResized",(t=>{const o=t.target;if(sd(o)){const n=pe.fromDom(o),c=t.origin;wt(c,"corner-")&&((t,o,n)=>{const c=bt(o,"e");if(""===s&&bc(t),n!==r&&""!==s){St(t,"width",s);const o=a(),i=l(t),m=Va(e)||c?(e=>Ss(e).columns)(t)-1:0;El(t,n-r,m,o,i)}else if((e=>/^(\d+(\.\d+)?)%$/.test(e))(s)){const e=parseFloat(s.replace("%",""));St(t,"width",n*e/r+"%")}(e=>/^(\d+(\.\d+)?)px$/.test(e))(s)&&(e=>{const t=Uo(e);Zo(t)||N(It(e),(e=>{const t=Rt(e,"width");St(e,"width",t),fe(e,"width")}))})(t)})(n,c,t.width),kr(n),Wa(e,n.dom,La)}})),e.on("SwitchMode",(()=>{o.on((t=>{e.mode.isReadOnly()?t.hideBars():t.showBars()}))})),e.on("remove",(()=>{o.on((e=>{e.destroy()})),n.on((t=>{((e,t)=>{e.inline&&Ie(t.parent())})(e,t)}))})),{refresh:e=>{o.on((t=>t.refreshBars(pe.fromDom(e))))},hide:()=>{o.on((e=>e.hideBars()))},show:()=>{o.on((e=>e.showBars()))}}},id=e=>{(e=>{const t=e.options.register;t("table_clone_elements",{processor:"string[]"}),t("table_use_colgroups",{processor:"boolean",default:!0}),t("table_header_type",{processor:e=>{const t=D(["section","cells","sectionCells","auto"],e);return t?{value:e,valid:t}:{valid:!1,message:"Must be one of: section, cells, sectionCells or auto."}},default:"section"}),t("table_sizing_mode",{processor:"string",default:"auto"}),t("table_default_attributes",{processor:"object",default:{border:"1"}}),t("table_default_styles",{processor:"object",default:{"border-collapse":"collapse"}}),t("table_column_resizing",{processor:e=>{const t=D(["preservetable","resizetable"],e);return t?{value:e,valid:t}:{valid:!1,message:"Must be preservetable, or resizetable."}},default:"preservetable"}),t("table_resize_bars",{processor:"boolean",default:!0}),t("table_style_by_css",{processor:"boolean",default:!0})})(e);const t=cd(e),o=zm(e,t),n=tc(e,t,o);return Ic(e,n),((e,t)=>{const o=Or(e),n=t=>ls(Er(e)).bind((n=>Ft(n,o).map((o=>{const r=ns(as(e),o,n);return t(o,r)})))).getOr("");G({mceTableRowType:()=>n(t.getTableRowType),mceTableCellType:()=>n(t.getTableCellType),mceTableColType:()=>n(t.getTableColType)},((t,o)=>e.addQueryValueHandler(o,t)))})(e,n),cs(e,n),{getSelectedCells:o.getSelectedCells,clearSelectedCells:o.clearSelectedCells}};e.add("dom",(e=>({table:id(e)})))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/advlist/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/advlist/plugin.min.js new file mode 100644 index 0000000000..5af99b5f57 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/advlist/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=(t,e,r)=>{const s="UL"===e?"InsertUnorderedList":"InsertOrderedList";t.execCommand(s,!1,!1===r?null:{"list-style-type":r})},r=t=>e=>e.options.get(t),s=r("advlist_number_styles"),n=r("advlist_bullet_styles"),l=t=>null==t,i=t=>!l(t);var o=tinymce.util.Tools.resolve("tinymce.util.Tools");class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return i(t)?a.some(t):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const u=t=>i(t)&&/^(TH|TD)$/.test(t.nodeName),d=t=>l(t)||"default"===t?"":t,g=(t,e)=>r=>{const s=s=>{r.setActive(((t,e,r)=>{const s=((t,e)=>{for(let r=0;re=>i(e)&&/^(OL|UL|DL)$/.test(e.nodeName)&&((t,e)=>t.dom.isChildOf(e,t.getBody()))(t,e))(t));return l.length>0&&l[0].nodeName===r})(t,s,e)),r.setEnabled(!((t,e)=>{const r=t.dom.getParent(e,"ol,ul,dl");return((t,e)=>null!==e&&"false"===t.dom.getContentEditableParent(e))(t,r)})(t,s.element))};return t.on("NodeChange",s),()=>t.off("NodeChange",s)},h=(t,r,s,n,l,i)=>{i.length>1?((t,r,s,n,l,i)=>{t.ui.registry.addSplitButton(r,{tooltip:s,icon:"OL"===l?"ordered-list":"unordered-list",presets:"listpreview",columns:3,fetch:t=>{t(o.map(i,(t=>{const e="OL"===l?"num":"bull",r="disc"===t||"decimal"===t?"default":t,s=d(t),n=(t=>t.replace(/\-/g," ").replace(/\b\w/g,(t=>t.toUpperCase())))(t);return{type:"choiceitem",value:s,icon:"list-"+e+"-"+r,text:n}})))},onAction:()=>t.execCommand(n),onItemAction:(r,s)=>{e(t,l,s)},select:e=>{const r=(t=>{const e=t.dom.getParent(t.selection.getNode(),"ol,ul"),r=t.dom.getStyle(e,"listStyleType");return a.from(r)})(t);return r.map((t=>e===t)).getOr(!1)},onSetup:g(t,l)})})(t,r,s,n,l,i):((t,r,s,n,l,i)=>{t.ui.registry.addToggleButton(r,{active:!1,tooltip:s,icon:"OL"===l?"ordered-list":"unordered-list",onSetup:g(t,l),onAction:()=>t.queryCommandState(n)||""===i?t.execCommand(n):e(t,l,i)})})(t,r,s,n,l,d(i[0]))};t.add("advlist",(t=>{t.hasPlugin("lists")?((t=>{const e=t.options.register;e("advlist_number_styles",{processor:"string[]",default:"default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman".split(",")}),e("advlist_bullet_styles",{processor:"string[]",default:"default,circle,square".split(",")})})(t),(t=>{h(t,"numlist","Numbered list","InsertOrderedList","OL",s(t)),h(t,"bullist","Bullet list","InsertUnorderedList","UL",n(t))})(t),(t=>{t.addCommand("ApplyUnorderedListStyle",((r,s)=>{e(t,"UL",s["list-style-type"])})),t.addCommand("ApplyOrderedListStyle",((r,s)=>{e(t,"OL",s["list-style-type"])}))})(t)):console.error("Please use the Lists plugin together with the Advanced List plugin.")}))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/anchor/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/anchor/plugin.min.js new file mode 100644 index 0000000000..fa21014c81 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/anchor/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),o=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=("allow_html_in_named_anchor",e=>e.options.get("allow_html_in_named_anchor"));const a="a:not([href])",r=e=>!e,i=e=>e.getAttribute("id")||e.getAttribute("name")||"",l=e=>(e=>"a"===e.nodeName.toLowerCase())(e)&&!e.getAttribute("href")&&""!==i(e),s=e=>e.dom.getParent(e.selection.getStart(),a),d=(e,a)=>{const r=s(e);r?((e,t,o)=>{o.removeAttribute("name"),o.id=t,e.addVisual(),e.undoManager.add()})(e,a,r):((e,a)=>{e.undoManager.transact((()=>{n(e)||e.selection.collapse(!0),e.selection.isCollapsed()?e.insertContent(e.dom.createHTML("a",{id:a})):((e=>{const n=e.dom;t(n).walk(e.selection.getRng(),(e=>{o.each(e,(e=>{var t;l(t=e)&&!t.firstChild&&n.remove(e,!1)}))}))})(e),e.formatter.remove("namedAnchor",void 0,void 0,!0),e.formatter.apply("namedAnchor",{value:a}),e.addVisual())}))})(e,a),e.focus()},c=e=>(e=>r(e.attr("href"))&&!r(e.attr("id")||e.attr("name")))(e)&&!e.firstChild,m=e=>t=>{for(let o=0;o{(e=>{(0,e.options.register)("allow_html_in_named_anchor",{processor:"boolean",default:!1})})(e),(e=>{e.on("PreInit",(()=>{e.parser.addNodeFilter("a",m("false")),e.serializer.addNodeFilter("a",m(null))}))})(e),(e=>{e.addCommand("mceAnchor",(()=>{(e=>{const t=(e=>{const t=s(e);return t?i(t):""})(e);e.windowManager.open({title:"Anchor",size:"normal",body:{type:"panel",items:[{name:"id",type:"input",label:"ID",placeholder:"example"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{id:t},onSubmit:t=>{((e,t)=>/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(t)?(d(e,t),!0):(e.windowManager.alert("ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),!1))(e,t.getData().id)&&t.close()}})})(e)}))})(e),(e=>{const t=()=>e.execCommand("mceAnchor");e.ui.registry.addToggleButton("anchor",{icon:"bookmark",tooltip:"Anchor",onAction:t,onSetup:t=>e.selection.selectorChangedWithUnbind("a:not([href])",t.setActive).unbind}),e.ui.registry.addMenuItem("anchor",{icon:"bookmark",text:"Anchor...",onAction:t})})(e),e.on("PreInit",(()=>{(e=>{e.formatter.register("namedAnchor",{inline:"a",selector:a,remove:"all",split:!0,deep:!0,attributes:{id:"%value"},onmatch:(e,t,o)=>l(e)})})(e)}))}))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/autolink/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/autolink/plugin.min.js new file mode 100644 index 0000000000..9362b94d92 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/autolink/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),n=t("autolink_pattern"),o=t("link_default_target"),r=t("link_default_protocol"),a=t("allow_unsafe_link_target"),s=("string",e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(a=o.constructor)||void 0===a?void 0:a.name)===r.name)?"string":t;var n,o,r,a})(e));const l=(void 0,e=>undefined===e);const i=e=>!(e=>null==e)(e),c=Object.hasOwnProperty,d=e=>"\ufeff"===e;var u=tinymce.util.Tools.resolve("tinymce.dom.TextSeeker");const f=e=>/^[(\[{ \u00a0]$/.test(e),g=(e,t,n)=>{for(let o=t-1;o>=0;o--){const t=e.charAt(o);if(!d(t)&&n(t))return o}return-1},m=(e,t)=>{var o;const a=e.schema.getVoidElements(),s=n(e),{dom:i,selection:d}=e;if(null!==i.getParent(d.getNode(),"a[href]"))return null;const m=d.getRng(),k=u(i,(e=>{return i.isBlock(e)||(t=a,n=e.nodeName.toLowerCase(),c.call(t,n))||"false"===i.getContentEditable(e);var t,n})),{container:p,offset:y}=((e,t)=>{let n=e,o=t;for(;1===n.nodeType&&n.childNodes[o];)n=n.childNodes[o],o=3===n.nodeType?n.data.length:n.childNodes.length;return{container:n,offset:o}})(m.endContainer,m.endOffset),h=null!==(o=i.getParent(p,i.isBlock))&&void 0!==o?o:i.getRoot(),w=k.backwards(p,y+t,((e,t)=>{const n=e.data,o=g(n,t,(r=f,e=>!r(e)));var r,a;return-1===o||(a=n[o],/[?!,.;:]/.test(a))?o:o+1}),h);if(!w)return null;let v=w.container;const _=k.backwards(w.container,w.offset,((e,t)=>{v=e;const n=g(e.data,t,f);return-1===n?n:n+1}),h),A=i.createRng();_?A.setStart(_.container,_.offset):A.setStart(v,0),A.setEnd(w.container,w.offset);const C=A.toString().replace(/\uFEFF/g,"").match(s);if(C){let t=C[0];return $="www.",(b=t).length>=$.length&&b.substr(0,0+$.length)===$?t=r(e)+"://"+t:((e,t,n=0,o)=>{const r=e.indexOf(t,n);return-1!==r&&(!!l(o)||r+t.length<=o)})(t,"@")&&!(e=>/^([A-Za-z][A-Za-z\d.+-]*:\/\/)|mailto:/.test(e))(t)&&(t="mailto:"+t),{rng:A,url:t}}var b,$;return null},k=(e,t)=>{const{dom:n,selection:r}=e,{rng:l,url:i}=t,c=r.getBookmark();r.setRng(l);const d="createlink",u={command:d,ui:!1,value:i};if(!e.dispatch("BeforeExecCommand",u).isDefaultPrevented()){e.getDoc().execCommand(d,!1,i),e.dispatch("ExecCommand",u);const t=o(e);if(s(t)){const o=r.getNode();n.setAttrib(o,"target",t),"_blank"!==t||a(e)||n.setAttrib(o,"rel","noopener")}}r.moveToBookmark(c),e.nodeChanged()},p=e=>{const t=m(e,-1);i(t)&&k(e,t)},y=p;e.add("autolink",(e=>{(e=>{const t=e.options.register;t("autolink_pattern",{processor:"regexp",default:new RegExp("^"+/(?:[A-Za-z][A-Za-z\d.+-]{0,14}:\/\/(?:[-.~*+=!&;:'%@?^${}(),\w]+@)?|www\.|[-;:&=+$,.\w]+@)[A-Za-z\d-]+(?:\.[A-Za-z\d-]+)*(?::\d+)?(?:\/(?:[-.~*+=!;:'%@$(),\/\w]*[-~*+=%@$()\/\w])?)?(?:\?(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?/g.source+"$","i")}),t("link_default_target",{processor:"string"}),t("link_default_protocol",{processor:"string",default:"https"})})(e),(e=>{e.on("keydown",(t=>{13!==t.keyCode||t.isDefaultPrevented()||(e=>{const t=m(e,0);i(t)&&k(e,t)})(e)})),e.on("keyup",(t=>{32===t.keyCode?p(e):(48===t.keyCode&&t.shiftKey||221===t.keyCode)&&y(e)}))})(e)}))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/autoresize/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/autoresize/plugin.min.js new file mode 100644 index 0000000000..43b3005bce --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/autoresize/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env");const o=e=>t=>t.options.get(e),n=o("min_height"),s=o("max_height"),i=o("autoresize_overflow_padding"),r=o("autoresize_bottom_margin"),l=(e,t)=>{const o=e.getBody();o&&(o.style.overflowY=t?"":"hidden",t||(o.scrollTop=0))},a=(e,t,o,n)=>{var s;const i=parseInt(null!==(s=e.getStyle(t,o,n))&&void 0!==s?s:"",10);return isNaN(i)?0:i},g=(e,o,i)=>{var c;const u=e.dom,d=e.getDoc();if(!d)return;if((e=>e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen())(e))return void l(e,!0);const f=d.documentElement,m=r(e),p=null!==(c=n(e))&&void 0!==c?c:e.getElement().offsetHeight;let h=p;const v=a(u,f,"margin-top",!0),y=a(u,f,"margin-bottom",!0);let C=f.offsetHeight+v+y+m;C<0&&(C=0);const S=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight;C+S>p&&(h=C+S);const z=s(e);if(z&&h>z?(h=z,l(e,!0)):l(e,!1),h!==o.get()){const n=h-o.get();if(u.setStyle(e.getContainer(),"height",h+"px"),o.set(h),(e=>{e.dispatch("ResizeEditor")})(e),t.browser.isSafari()&&(t.os.isMacOS()||t.os.isiOS())){const t=e.getWin();t.scrollTo(t.pageXOffset,t.pageYOffset)}e.hasFocus()&&(e=>{if("setcontent"===(null==e?void 0:e.type.toLowerCase())){const t=e;return!0===t.selection||!0===t.paste}return!1})(i)&&e.selection.scrollIntoView(),(t.browser.isSafari()||t.browser.isChromium())&&n<0&&g(e,o,i)}};e.add("autoresize",(e=>{if((e=>{const t=e.options.register;t("autoresize_overflow_padding",{processor:"number",default:1}),t("autoresize_bottom_margin",{processor:"number",default:50})})(e),e.options.isSet("resize")||e.options.set("resize",!1),!e.inline){const t=(e=>{let t=0;return{get:()=>t,set:e=>{t=e}}})();((e,t)=>{e.addCommand("mceAutoResize",(()=>{g(e,t)}))})(e,t),((e,t)=>{e.on("init",(()=>{const t=i(e),o=e.dom;o.setStyles(e.getDoc().documentElement,{height:"auto"}),o.setStyles(e.getBody(),{paddingLeft:t,paddingRight:t,"min-height":0})})),e.on("NodeChange SetContent keyup FullscreenStateChanged ResizeContent",(o=>{g(e,t,o)}))})(e,t)}}))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/autosave/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/autosave/plugin.min.js new file mode 100644 index 0000000000..19a6f16315 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/autosave/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=("string",t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(r=o=t,(a=String).prototype.isPrototypeOf(r)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===a.name)?"string":e;var r,o,a,s})(t));const r=(void 0,t=>undefined===t);var o=tinymce.util.Tools.resolve("tinymce.util.Delay"),a=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),s=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=t=>{const e=/^(\d+)([ms]?)$/.exec(t);return(e&&e[2]?{s:1e3,m:6e4}[e[2]]:1)*parseInt(t,10)},i=t=>e=>e.options.get(t),u=i("autosave_ask_before_unload"),l=i("autosave_restore_when_empty"),c=i("autosave_interval"),d=i("autosave_retention"),m=t=>{const e=document.location;return t.options.get("autosave_prefix").replace(/{path}/g,e.pathname).replace(/{query}/g,e.search).replace(/{hash}/g,e.hash).replace(/{id}/g,t.id)},v=(t,e)=>{if(r(e))return t.dom.isEmpty(t.getBody());{const r=s.trim(e);if(""===r)return!0;{const e=(new DOMParser).parseFromString(r,"text/html");return t.dom.isEmpty(e)}}},f=t=>{var e;const r=parseInt(null!==(e=a.getItem(m(t)+"time"))&&void 0!==e?e:"0",10)||0;return!((new Date).getTime()-r>d(t)&&(p(t,!1),1))},p=(t,e)=>{const r=m(t);a.removeItem(r+"draft"),a.removeItem(r+"time"),!1!==e&&(t=>{t.dispatch("RemoveDraft")})(t)},g=t=>{const e=m(t);!v(t)&&t.isDirty()&&(a.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),a.setItem(e+"time",(new Date).getTime().toString()),(t=>{t.dispatch("StoreDraft")})(t))},y=t=>{var e;const r=m(t);f(t)&&(t.setContent(null!==(e=a.getItem(r+"draft"))&&void 0!==e?e:"",{format:"raw"}),(t=>{t.dispatch("RestoreDraft")})(t))};var D=tinymce.util.Tools.resolve("tinymce.EditorManager");const h=t=>e=>{e.setEnabled(f(t));const r=()=>e.setEnabled(f(t));return t.on("StoreDraft RestoreDraft RemoveDraft",r),()=>t.off("StoreDraft RestoreDraft RemoveDraft",r)};t.add("autosave",(t=>((t=>{const r=t.options.register,o=t=>{const r=e(t);return r?{value:n(t),valid:r}:{valid:!1,message:"Must be a string."}};r("autosave_ask_before_unload",{processor:"boolean",default:!0}),r("autosave_prefix",{processor:"string",default:"tinymce-autosave-{path}{query}{hash}-{id}-"}),r("autosave_restore_when_empty",{processor:"boolean",default:!1}),r("autosave_interval",{processor:o,default:"30s"}),r("autosave_retention",{processor:o,default:"20m"})})(t),(t=>{t.editorManager.on("BeforeUnload",(t=>{let e;s.each(D.get(),(t=>{t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&u(t)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))})),e&&(t.preventDefault(),t.returnValue=e)}))})(t),(t=>{(t=>{const e=c(t);o.setEditorInterval(t,(()=>{g(t)}),e)})(t);const e=()=>{(t=>{t.undoManager.transact((()=>{y(t),p(t)})),t.focus()})(t)};t.ui.registry.addButton("restoredraft",{tooltip:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)}),t.ui.registry.addMenuItem("restoredraft",{text:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)})})(t),t.on("init",(()=>{l(t)&&t.dom.isEmpty(t.getBody())&&y(t)})),(t=>({hasDraft:()=>f(t),storeDraft:()=>g(t),restoreDraft:()=>y(t),removeDraft:e=>p(t,e),isEmpty:e=>v(t,e)}))(t))))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/charmap/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/charmap/plugin.min.js new file mode 100644 index 0000000000..d2dac7f35f --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/charmap/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=(e,t)=>{const r=((e,t)=>e.dispatch("insertCustomChar",{chr:t}))(e,t).chr;e.execCommand("mceInsertContent",!1,r)},r=e=>t=>e===t,a=("array",e=>"array"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(r=a=e,(n=String).prototype.isPrototypeOf(r)||(null===(i=a.constructor)||void 0===i?void 0:i.name)===n.name)?"string":t;var r,a,n,i})(e));const n=r(null),i=r(void 0),o=e=>"function"==typeof e,s=(!1,()=>false);class l{constructor(e,t){this.tag=e,this.value=t}static some(e){return new l(!0,e)}static none(){return l.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?l.some(e(this.value)):l.none()}bind(e){return this.tag?e(this.value):l.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:l.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?l.none():l.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}l.singletonNone=new l(!1);const c=Array.prototype.push,u=(e,t)=>{const r=e.length,a=new Array(r);for(let n=0;nt=>t.options.get(e),m=h("charmap"),p=h("charmap_append"),d=g.isArray,f="User Defined",y=e=>{return d(e)?(t=e,g.grep(t,(e=>d(e)&&2===e.length))):"function"==typeof e?e():[];var t},w=e=>{const t=((e,t)=>{const r=m(e);r&&(t=[{name:f,characters:y(r)}]);const a=p(e);if(a){const e=g.grep(t,(e=>e.name===f));return e.length?(e[0].characters=[...e[0].characters,...y(a)],t):t.concat({name:f,characters:y(a)})}return t})(e,[{name:"Currency",characters:[[36,"dollar sign"],[162,"cent sign"],[8364,"euro sign"],[163,"pound sign"],[165,"yen sign"],[164,"currency sign"],[8352,"euro-currency sign"],[8353,"colon sign"],[8354,"cruzeiro sign"],[8355,"french franc sign"],[8356,"lira sign"],[8357,"mill sign"],[8358,"naira sign"],[8359,"peseta sign"],[8360,"rupee sign"],[8361,"won sign"],[8362,"new sheqel sign"],[8363,"dong sign"],[8365,"kip sign"],[8366,"tugrik sign"],[8367,"drachma sign"],[8368,"german penny symbol"],[8369,"peso sign"],[8370,"guarani sign"],[8371,"austral sign"],[8372,"hryvnia sign"],[8373,"cedi sign"],[8374,"livre tournois sign"],[8375,"spesmilo sign"],[8376,"tenge sign"],[8377,"indian rupee sign"],[8378,"turkish lira sign"],[8379,"nordic mark sign"],[8380,"manat sign"],[8381,"ruble sign"],[20870,"yen character"],[20803,"yuan character"],[22291,"yuan character, in hong kong and taiwan"],[22278,"yen/yuan character variant one"]]},{name:"Text",characters:[[169,"copyright sign"],[174,"registered sign"],[8482,"trade mark sign"],[8240,"per mille sign"],[181,"micro sign"],[183,"middle dot"],[8226,"bullet"],[8230,"three dot leader"],[8242,"minutes / feet"],[8243,"seconds / inches"],[167,"section sign"],[182,"paragraph sign"],[223,"sharp s / ess-zed"]]},{name:"Quotations",characters:[[8249,"single left-pointing angle quotation mark"],[8250,"single right-pointing angle quotation mark"],[171,"left pointing guillemet"],[187,"right pointing guillemet"],[8216,"left single quotation mark"],[8217,"right single quotation mark"],[8220,"left double quotation mark"],[8221,"right double quotation mark"],[8218,"single low-9 quotation mark"],[8222,"double low-9 quotation mark"],[60,"less-than sign"],[62,"greater-than sign"],[8804,"less-than or equal to"],[8805,"greater-than or equal to"],[8211,"en dash"],[8212,"em dash"],[175,"macron"],[8254,"overline"],[164,"currency sign"],[166,"broken bar"],[168,"diaeresis"],[161,"inverted exclamation mark"],[191,"turned question mark"],[710,"circumflex accent"],[732,"small tilde"],[176,"degree sign"],[8722,"minus sign"],[177,"plus-minus sign"],[247,"division sign"],[8260,"fraction slash"],[215,"multiplication sign"],[185,"superscript one"],[178,"superscript two"],[179,"superscript three"],[188,"fraction one quarter"],[189,"fraction one half"],[190,"fraction three quarters"]]},{name:"Mathematical",characters:[[402,"function / florin"],[8747,"integral"],[8721,"n-ary sumation"],[8734,"infinity"],[8730,"square root"],[8764,"similar to"],[8773,"approximately equal to"],[8776,"almost equal to"],[8800,"not equal to"],[8801,"identical to"],[8712,"element of"],[8713,"not an element of"],[8715,"contains as member"],[8719,"n-ary product"],[8743,"logical and"],[8744,"logical or"],[172,"not sign"],[8745,"intersection"],[8746,"union"],[8706,"partial differential"],[8704,"for all"],[8707,"there exists"],[8709,"diameter"],[8711,"backward difference"],[8727,"asterisk operator"],[8733,"proportional to"],[8736,"angle"]]},{name:"Extended Latin",characters:[[192,"A - grave"],[193,"A - acute"],[194,"A - circumflex"],[195,"A - tilde"],[196,"A - diaeresis"],[197,"A - ring above"],[256,"A - macron"],[198,"ligature AE"],[199,"C - cedilla"],[200,"E - grave"],[201,"E - acute"],[202,"E - circumflex"],[203,"E - diaeresis"],[274,"E - macron"],[204,"I - grave"],[205,"I - acute"],[206,"I - circumflex"],[207,"I - diaeresis"],[298,"I - macron"],[208,"ETH"],[209,"N - tilde"],[210,"O - grave"],[211,"O - acute"],[212,"O - circumflex"],[213,"O - tilde"],[214,"O - diaeresis"],[216,"O - slash"],[332,"O - macron"],[338,"ligature OE"],[352,"S - caron"],[217,"U - grave"],[218,"U - acute"],[219,"U - circumflex"],[220,"U - diaeresis"],[362,"U - macron"],[221,"Y - acute"],[376,"Y - diaeresis"],[562,"Y - macron"],[222,"THORN"],[224,"a - grave"],[225,"a - acute"],[226,"a - circumflex"],[227,"a - tilde"],[228,"a - diaeresis"],[229,"a - ring above"],[257,"a - macron"],[230,"ligature ae"],[231,"c - cedilla"],[232,"e - grave"],[233,"e - acute"],[234,"e - circumflex"],[235,"e - diaeresis"],[275,"e - macron"],[236,"i - grave"],[237,"i - acute"],[238,"i - circumflex"],[239,"i - diaeresis"],[299,"i - macron"],[240,"eth"],[241,"n - tilde"],[242,"o - grave"],[243,"o - acute"],[244,"o - circumflex"],[245,"o - tilde"],[246,"o - diaeresis"],[248,"o slash"],[333,"o macron"],[339,"ligature oe"],[353,"s - caron"],[249,"u - grave"],[250,"u - acute"],[251,"u - circumflex"],[252,"u - diaeresis"],[363,"u - macron"],[253,"y - acute"],[254,"thorn"],[255,"y - diaeresis"],[563,"y - macron"],[913,"Alpha"],[914,"Beta"],[915,"Gamma"],[916,"Delta"],[917,"Epsilon"],[918,"Zeta"],[919,"Eta"],[920,"Theta"],[921,"Iota"],[922,"Kappa"],[923,"Lambda"],[924,"Mu"],[925,"Nu"],[926,"Xi"],[927,"Omicron"],[928,"Pi"],[929,"Rho"],[931,"Sigma"],[932,"Tau"],[933,"Upsilon"],[934,"Phi"],[935,"Chi"],[936,"Psi"],[937,"Omega"],[945,"alpha"],[946,"beta"],[947,"gamma"],[948,"delta"],[949,"epsilon"],[950,"zeta"],[951,"eta"],[952,"theta"],[953,"iota"],[954,"kappa"],[955,"lambda"],[956,"mu"],[957,"nu"],[958,"xi"],[959,"omicron"],[960,"pi"],[961,"rho"],[962,"final sigma"],[963,"sigma"],[964,"tau"],[965,"upsilon"],[966,"phi"],[967,"chi"],[968,"psi"],[969,"omega"]]},{name:"Symbols",characters:[[8501,"alef symbol"],[982,"pi symbol"],[8476,"real part symbol"],[978,"upsilon - hook symbol"],[8472,"Weierstrass p"],[8465,"imaginary part"]]},{name:"Arrows",characters:[[8592,"leftwards arrow"],[8593,"upwards arrow"],[8594,"rightwards arrow"],[8595,"downwards arrow"],[8596,"left right arrow"],[8629,"carriage return"],[8656,"leftwards double arrow"],[8657,"upwards double arrow"],[8658,"rightwards double arrow"],[8659,"downwards double arrow"],[8660,"left right double arrow"],[8756,"therefore"],[8834,"subset of"],[8835,"superset of"],[8836,"not a subset of"],[8838,"subset of or equal to"],[8839,"superset of or equal to"],[8853,"circled plus"],[8855,"circled times"],[8869,"perpendicular"],[8901,"dot operator"],[8968,"left ceiling"],[8969,"right ceiling"],[8970,"left floor"],[8971,"right floor"],[9001,"left-pointing angle bracket"],[9002,"right-pointing angle bracket"],[9674,"lozenge"],[9824,"black spade suit"],[9827,"black club suit"],[9829,"black heart suit"],[9830,"black diamond suit"],[8194,"en space"],[8195,"em space"],[8201,"thin space"],[8204,"zero width non-joiner"],[8205,"zero width joiner"],[8206,"left-to-right mark"],[8207,"right-to-left mark"]]}]);return t.length>1?[{name:"All",characters:(r=t,n=e=>e.characters,(e=>{const t=[];for(let r=0,n=e.length;r{let t=e;return{get:()=>t,set:e=>{t=e}}},b=(e,t,r=0,a)=>{const n=e.indexOf(t,r);return-1!==n&&(!!i(a)||n+t.length<=a)},k=String.fromCodePoint,C=(e,t)=>{const r=[],a=t.toLowerCase();return((e,t)=>{for(let t=0,i=e.length;t!!b(k(e).toLowerCase(),r)||b(t.toLowerCase(),r)||b(t.toLowerCase().replace(/\s+/g,""),r))((n=e[t])[0],n[1],a)&&r.push(n);var n})(e.characters),u(r,(e=>({text:e[1],value:k(e[0]),icon:k(e[0])})))},x="pattern",A=(e,r)=>{const a=()=>[{label:"Search",type:"input",name:x},{type:"collection",name:"results"}],i=1===r.length?v(f):v("All"),o=((e,t)=>{let r=null;const a=()=>{n(r)||(clearTimeout(r),r=null)};return{cancel:a,throttle:(...t)=>{a(),r=setTimeout((()=>{r=null,e.apply(null,t)}),40)}}})((e=>{const t=e.getData().pattern;((e,t)=>{var a,n;(a=r,n=e=>e.name===i.get(),((e,t,r)=>{for(let a=0,n=e.length;a{const a=C(r,t);e.setData({results:a})}))})(e,t)})),c={title:"Special Character",size:"normal",body:1===r.length?{type:"panel",items:a()}:{type:"tabpanel",tabs:u(r,(e=>({title:e.name,name:e.name,items:a()})))},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{pattern:"",results:C(r[0],"")},onAction:(r,a)=>{"results"===a.name&&(t(e,a.value),r.close())},onTabChange:(e,t)=>{i.set(t.newTabName),o.throttle(e)},onChange:(e,t)=>{t.name===x&&o.throttle(e)}};e.windowManager.open(c).focus(x)};e.add("charmap",(e=>{(e=>{const t=e.options.register,r=e=>o(e)||a(e);t("charmap",{processor:r}),t("charmap_append",{processor:r})})(e);const r=w(e);return((e,t)=>{e.addCommand("mceShowCharmap",(()=>{A(e,t)}))})(e,r),(e=>{const t=()=>e.execCommand("mceShowCharmap");e.ui.registry.addButton("charmap",{icon:"insert-character",tooltip:"Special character",onAction:t}),e.ui.registry.addMenuItem("charmap",{icon:"insert-character",text:"Special character...",onAction:t})})(e),((e,t)=>{e.ui.registry.addAutocompleter("charmap",{trigger:":",columns:"auto",minChars:2,fetch:(e,r)=>new Promise(((r,a)=>{r(C(t,e))})),onAction:(t,r,a)=>{e.selection.setRng(r),e.insertContent(a),t.hide()}})})(e,r[0]),(e=>({getCharMap:()=>w(e),insertChar:r=>{t(e,r)}}))(e)}))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/code/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/code/plugin.min.js new file mode 100644 index 0000000000..aadf39068f --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/code/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("code",(e=>((e=>{e.addCommand("mceCodeEditor",(()=>{(e=>{const o=(e=>e.getContent({source_view:!0}))(e);e.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:o},onSubmit:o=>{((e,o)=>{e.focus(),e.undoManager.transact((()=>{e.setContent(o)})),e.selection.setCursorLocation(),e.nodeChanged()})(e,o.getData().code),o.close()}})})(e)}))})(e),(e=>{const o=()=>e.execCommand("mceCodeEditor");e.ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:o}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:o})})(e),{})))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/codesample/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/codesample/plugin.min.js new file mode 100644 index 0000000000..c0999db810 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/codesample/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>!(e=>null==e)(e);class n{constructor(e,t){this.tag=e,this.value=t}static some(e){return new n(!0,e)}static none(){return n.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?n.some(e(this.value)):n.none()}bind(e){return this.tag?e(this.value):n.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:n.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return t(e)?n.some(e):n.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}n.singletonNone=new n(!1);var a=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils");const s="undefined"!=typeof window?window:Function("return this;")(),r=function(e,t,n){const a=window.Prism;window.Prism={manual:!0};var s=function(e){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,a={},s={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof r?new r(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);x+=_.value.length,_=_.next){var F=_.value;if(t.length>e.length)return;if(!(F instanceof r)){var A,S=1;if(y){if(!(A=i(v,x,e,m))||A.index>=e.length)break;var $=A.index,z=A.index+A[0].length,E=x;for(E+=_.value.length;$>=E;)E+=(_=_.next).value.length;if(x=E-=_.value.length,_.value instanceof r)continue;for(var C=_;C!==t.tail&&(Ed.reach&&(d.reach=O);var P=_.prev;if(B&&(P=u(t,P,B),x+=B.length),c(t,P,S),_=u(t,P,new r(g,f?s.tokenize(j,f):j,w,j)),T&&u(t,_,T),S>1){var N={cause:g+","+b,reach:O};o(e,t,n,_.prev,x,N),d&&N.reach>d.reach&&(d.reach=N.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function u(e,t,n){var a=t.next,s={value:n,prev:t,next:a};return t.next=s,a.prev=s,e.length++,s}function c(e,t,n){for(var a=t.next,s=0;s"+r.content+""},!e.document)return e.addEventListener?(s.disableWorkerMessageHandler||e.addEventListener("message",(function(t){var n=JSON.parse(t.data),a=n.language,r=n.code,i=n.immediateClose;e.postMessage(s.highlight(r,s.languages[a],a)),i&&e.close()}),!1),s):s;var d=s.util.currentScript();function g(){s.manual||s.highlightAll()}if(d&&(s.filename=d.src,d.hasAttribute("data-manual")&&(s.manual=!0)),!s.manual){var p=document.readyState;"loading"===p||"interactive"===p&&d&&d.defer?document.addEventListener("DOMContentLoaded",g):window.requestAnimationFrame?window.requestAnimationFrame(g):window.setTimeout(g,16)}return s}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});return s.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,a,s,r){if(n.language===a){var i=n.tokenStack=[];n.code=n.code.replace(s,(function(e){if("function"==typeof r&&!r(e))return e;for(var s,o=i.length;-1!==n.code.indexOf(s=t(a,o));)++o;return i[o]=e,s})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,a){if(n.language===a&&n.tokenStack){n.grammar=e.languages[a];var s=0,r=Object.keys(n.tokenStack);!function i(o){for(var l=0;l=r.length);l++){var u=o[l];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=r[s],d=n.tokenStack[c],g="string"==typeof u?u:u.content,p=t(a,c),b=g.indexOf(p);if(b>-1){++s;var h=g.substring(0,b),f=new e.Token(a,e.tokenize(d,n.grammar),"language-"+a,d),m=g.substring(b+p.length),y=[];h&&y.push.apply(y,i([h])),y.push(f),m&&y.push.apply(y,i([m])),"string"==typeof u?o.splice.apply(o,[l,1].concat(y)):u.content=y}}else u.content&&i(u.content)}return o}(n.tokens)}}}})}(s),s.languages.c=s.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),s.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),s.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},s.languages.c.string],char:s.languages.c.char,comment:s.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:s.languages.c}}}}),s.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete s.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(s),function(e){function t(e,t){return e.replace(/<<(\d+)>>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,a){return RegExp(t(e,n),a||"")}function a(e,t){for(var n=0;n>/g,(function(){return"(?:"+e+")"}));return e.replace(/<>/g,"[^\\s\\S]")}var s="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",r="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var u=l(r),c=RegExp(l(s+" "+r+" "+i+" "+o)),d=l(r+" "+i+" "+o),g=l(s+" "+r+" "+o),p=a(/<(?:[^<>;=+\-*/%&|^]|<>)*>/.source,2),b=a(/\((?:[^()]|<>)*\)/.source,2),h=/@?\b[A-Za-z_]\w*\b/.source,f=t(/<<0>>(?:\s*<<1>>)?/.source,[h,p]),m=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,f]),y=/\[\s*(?:,\s*)*\]/.source,w=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[m,y]),k=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[p,b,y]),v=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[k]),_=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[v,m,y]),x={keyword:c,punctuation:/[<>()?,.:[\]]/},F=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,A=/"(?:\\.|[^\\"\r\n])*"/.source,S=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[S]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[A]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[m]),lookbehind:!0,inside:x},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[h,_]),lookbehind:!0,inside:x},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[h]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[u,f]),lookbehind:!0,inside:x},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[m]),lookbehind:!0,inside:x},{pattern:n(/(\bwhere\s+)<<0>>/.source,[h]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[w]),lookbehind:!0,inside:x},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[_,g,h]),inside:x}],keyword:c,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[h]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[b]),lookbehind:!0,alias:"class-name",inside:x},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[_,m]),inside:x,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[_]),lookbehind:!0,inside:x,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[h,p]),inside:{function:n(/^<<0>>/.source,[h]),generic:{pattern:RegExp(p),alias:"class-name",inside:x}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[u,f,h,_,c.source,b,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[f,b]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:c,"class-name":{pattern:RegExp(_),greedy:!0,inside:x},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var $=A+"|"+F,z=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[$]),E=a(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[z]),2),C=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,j=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[m,E]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[C,j]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[C]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[E]),inside:e.languages.csharp},"class-name":{pattern:RegExp(m),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var B=/:[^}\r\n]+/.source,T=a(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[z]),2),O=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[T,B]),P=a(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<>*\)/.source,[$]),2),N=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[P,B]);function R(t,a){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[t]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[a,B]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[O]),lookbehind:!0,greedy:!0,inside:R(O,T)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[N]),lookbehind:!0,greedy:!0,inside:R(N,P)}],char:{pattern:RegExp(F),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(s),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(s),function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,a={pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[a,{pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:a.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+n+/[A-Z]\w*\b/.source),lookbehind:!0,inside:a.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":a,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+n+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:a.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+n+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:a.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(s),s.languages.javascript=s.languages.extend("clike",{"class-name":[s.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),s.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,s.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:s.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:s.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:s.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:s.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:s.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),s.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:s.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),s.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),s.languages.markup&&(s.languages.markup.tag.addInlined("script","javascript"),s.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),s.languages.js=s.languages.javascript,s.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},s.languages.markup.tag.inside["attr-value"].inside.entity=s.languages.markup.entity,s.languages.markup.doctype.inside["internal-subset"].inside=s.languages.markup,s.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(s.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:s.languages[t]},n.cdata=/^$/i;var a={"included-cdata":{pattern://i,inside:n}};a["language-"+t]={pattern:/[\s\S]+/,inside:s.languages[t]};var r={};r[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:a},s.languages.insertBefore("markup","cdata",r)}}),Object.defineProperty(s.languages.markup.tag,"addAttribute",{value:function(e,t){s.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:s.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),s.languages.html=s.languages.markup,s.languages.mathml=s.languages.markup,s.languages.svg=s.languages.markup,s.languages.xml=s.languages.extend("markup",{}),s.languages.ssml=s.languages.xml,s.languages.atom=s.languages.xml,s.languages.rss=s.languages.xml,function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],a=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,s=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,r=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:a,operator:s,punctuation:r};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},o=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:o,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:o,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:a,operator:s,punctuation:r}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){/<\?/.test(t.code)&&e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(s),s.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},s.languages.python["string-interpolation"].inside.interpolation.inside.rest=s.languages.python,s.languages.py=s.languages.python,function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===||[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var t={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var n="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",a=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+n+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+a),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+a+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+n),greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+n),greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(s),window.Prism=a,s}(),i=e=>t=>t.options.get(e),o=i("codesample_languages"),l=i("codesample_global_prismjs"),u=e=>s.Prism&&l(e)?s.Prism:r,c=e=>t(e)&&"PRE"===e.nodeName&&-1!==e.className.indexOf("language-"),d=e=>{const t=e.selection?e.selection.getNode():null;return c(t)?n.some(t):n.none()},g=e=>{const t=(e=>o(e)||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}])(e),s=(r=t,((e,t)=>0""),(e=>e.value));var r;const i=((e,t)=>d(e).fold((()=>t),(e=>{const n=e.className.match(/language-(\w+)/);return n?n[1]:t})))(e,s),l=(e=>d(e).bind((e=>n.from(e.textContent))).getOr(""))(e);e.windowManager.open({title:"Insert/Edit Code Sample",size:"large",body:{type:"panel",items:[{type:"selectbox",name:"language",label:"Language",items:t},{type:"textarea",name:"code",label:"Code view"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{language:i,code:l},onSubmit:t=>{const n=t.getData();((e,t,n)=>{const s=e.dom;e.undoManager.transact((()=>{const r=d(e);return n=a.DOM.encode(n),r.fold((()=>{e.insertContent('

'+n+"
");const a=s.select("#__new")[0];s.setAttrib(a,"id",null),e.selection.select(a)}),(a=>{s.setAttrib(a,"class","language-"+t),a.innerHTML=n,u(e).highlightElement(a),e.selection.select(a)}))}))})(e,n.language,n.code),t.close()}})},p=(b=/^\s+|\s+$/g,e=>e.replace(b,""));var b,h=tinymce.util.Tools.resolve("tinymce.util.Tools");e.add("codesample",(e=>{(e=>{const t=e.options.register;t("codesample_languages",{processor:"object[]"}),t("codesample_global_prismjs",{processor:"boolean",default:!1})})(e),(e=>{e.on("PreProcess",(t=>{const n=e.dom,a=n.select("pre[contenteditable=false]",t.node);h.each(h.grep(a,c),(e=>{const t=e.textContent;let a;for(n.setAttrib(e,"class",p(n.getAttrib(e,"class"))),n.setAttrib(e,"contentEditable",null),n.setAttrib(e,"data-mce-highlighted",null);a=e.firstChild;)e.removeChild(a);n.add(e,"code").textContent=t}))})),e.on("SetContent",(()=>{const t=e.dom,n=h.grep(t.select("pre"),(e=>c(e)&&"true"!==t.getAttrib(e,"data-mce-highlighted")));n.length&&e.undoManager.transact((()=>{h.each(n,(n=>{var a;h.each(t.select("br",n),(n=>{t.replace(e.getDoc().createTextNode("\n"),n)})),n.innerHTML=t.encode(null!==(a=n.textContent)&&void 0!==a?a:""),u(e).highlightElement(n),t.setAttrib(n,"data-mce-highlighted",!0),n.className=p(n.className)}))}))})),e.on("PreInit",(()=>{e.parser.addNodeFilter("pre",(e=>{var t;for(let n=0,a=e.length;n{const t=()=>e.execCommand("codesample");e.ui.registry.addToggleButton("codesample",{icon:"code-sample",tooltip:"Insert/edit code sample",onAction:t,onSetup:t=>{const n=()=>{t.setActive((e=>{const t=e.selection.getStart();return e.dom.is(t,'pre[class*="language-"]')})(e))};return e.on("NodeChange",n),()=>e.off("NodeChange",n)}}),e.ui.registry.addMenuItem("codesample",{text:"Code sample...",icon:"code-sample",onAction:t})})(e),(e=>{e.addCommand("codesample",(()=>{const t=e.selection.getNode();e.selection.isCollapsed()||c(t)?g(e):e.formatter.toggle("code")}))})(e),e.on("dblclick",(t=>{c(t.target)&&g(e)}))}))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/directionality/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/directionality/plugin.min.js new file mode 100644 index 0000000000..4f2d3b16be --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/directionality/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>e=>typeof e===t,o=t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(o=r=t,(n=String).prototype.isPrototypeOf(o)||(null===(i=r.constructor)||void 0===i?void 0:i.name)===n.name)?"string":e;var o,r,n,i})(t),r=e("boolean"),n=t=>!(t=>null==t)(t),i=e("function"),s=e("number"),l=(!1,()=>false);class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return n(t)?a.some(t):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const u=(t,e)=>{for(let o=0,r=t.length;o{if(null==t)throw new Error("Node cannot be null or undefined");return{dom:t}},d=c,h=(t,e)=>{const o=t.dom;if(1!==o.nodeType)return!1;{const t=o;if(void 0!==t.matches)return t.matches(e);if(void 0!==t.msMatchesSelector)return t.msMatchesSelector(e);if(void 0!==t.webkitMatchesSelector)return t.webkitMatchesSelector(e);if(void 0!==t.mozMatchesSelector)return t.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")}};"undefined"!=typeof window?window:Function("return this;")();const m=t=>e=>(t=>t.dom.nodeType)(e)===t,g=m(1),f=m(3),v=m(9),p=m(11),y=(t,e)=>{t.dom.removeAttribute(e)},w=i(Element.prototype.attachShadow)&&i(Node.prototype.getRootNode)?t=>d(t.dom.getRootNode()):t=>v(t)?t:d(t.dom.ownerDocument),N=t=>d(t.dom.host),b=t=>{const e=f(t)?t.dom.parentNode:t.dom;if(null==e||null===e.ownerDocument)return!1;const o=e.ownerDocument;return(t=>{const e=w(t);return p(o=e)&&n(o.dom.host)?a.some(e):a.none();var o})(d(e)).fold((()=>o.body.contains(e)),(r=b,i=N,t=>r(i(t))));var r,i},S=t=>"rtl"===((t,e)=>{const o=t.dom,r=window.getComputedStyle(o).getPropertyValue(e);return""!==r||b(t)?r:((t,e)=>(t=>void 0!==t.style&&i(t.style.getPropertyValue))(t)?t.style.getPropertyValue(e):"")(o,e)})(t,"direction")?"rtl":"ltr",A=(t,e)=>((t,o)=>((t,e)=>{const o=[];for(let r=0,n=t.length;r{const o=t.length,r=new Array(o);for(let n=0;nh(t,e))))(t),T=("li",t=>g(t)&&"li"===t.dom.nodeName.toLowerCase());const C=(t,e)=>{const n=t.selection.getSelectedBlocks();n.length>0&&(u(n,(t=>{const n=d(t),c=T(n),m=((t,e)=>{return(e?(o=t,r="ol,ul",((t,e,o)=>{let n=t.dom;const s=i(o)?o:l;for(;n.parentNode;){n=n.parentNode;const t=d(n);if(h(t,r))return a.some(t);if(s(t))break}return a.none()})(o,0,n)):a.some(t)).getOr(t);var o,r,n})(n,c);var f;(f=m,(t=>a.from(t.dom.parentNode).map(d))(f).filter(g)).each((t=>{if(S(t)!==e?((t,e,n)=>{((t,e,n)=>{if(!(o(n)||r(n)||s(n)))throw console.error("Invalid call to Attribute.set. Key ",e,":: Value ",n,":: Element ",t),new Error("Attribute value was not simple");t.setAttribute(e,n+"")})(t.dom,e,n)})(m,"dir",e):S(m)!==e&&y(m,"dir"),c){const t=A(m,"li[dir]");u(t,(t=>y(t,"dir")))}}))})),t.nodeChanged())},D=(t,e)=>o=>{const r=t=>{const r=d(t.element);o.setActive(S(r)===e)};return t.on("NodeChange",r),()=>t.off("NodeChange",r)};t.add("directionality",(t=>{(t=>{t.addCommand("mceDirectionLTR",(()=>{C(t,"ltr")})),t.addCommand("mceDirectionRTL",(()=>{C(t,"rtl")}))})(t),(t=>{t.ui.registry.addToggleButton("ltr",{tooltip:"Left to right",icon:"ltr",onAction:()=>t.execCommand("mceDirectionLTR"),onSetup:D(t,"ltr")}),t.ui.registry.addToggleButton("rtl",{tooltip:"Right to left",icon:"rtl",onAction:()=>t.execCommand("mceDirectionRTL"),onSetup:D(t,"rtl")})})(t)}))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojiimages.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojiimages.js new file mode 100644 index 0000000000..6fcec717ab --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojiimages.js @@ -0,0 +1 @@ +window.tinymce.Resource.add("tinymce.plugins.emoticons",{100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:'💯',fitzpatrick_scale:false,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:'🔢',fitzpatrick_scale:false,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:'😀',fitzpatrick_scale:false,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:'😬',fitzpatrick_scale:false,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:'😁',fitzpatrick_scale:false,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:'😂',fitzpatrick_scale:false,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:'🤣',fitzpatrick_scale:false,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:'🥳',fitzpatrick_scale:false,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:'😃',fitzpatrick_scale:false,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:'😄',fitzpatrick_scale:false,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:'😅',fitzpatrick_scale:false,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:'😆',fitzpatrick_scale:false,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:'😇',fitzpatrick_scale:false,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:'😉',fitzpatrick_scale:false,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:'😊',fitzpatrick_scale:false,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:'🙂',fitzpatrick_scale:false,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:'🙃',fitzpatrick_scale:false,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:'☺️',fitzpatrick_scale:false,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:'😋',fitzpatrick_scale:false,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:'😌',fitzpatrick_scale:false,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:'😍',fitzpatrick_scale:false,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:'🥰',fitzpatrick_scale:false,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'😘',fitzpatrick_scale:false,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:'😗',fitzpatrick_scale:false,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:'😙',fitzpatrick_scale:false,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'😚',fitzpatrick_scale:false,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:'😜',fitzpatrick_scale:false,category:"people"},zany:{keywords:["face","goofy","crazy"],char:'🤪',fitzpatrick_scale:false,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:'🤨',fitzpatrick_scale:false,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:'🧐',fitzpatrick_scale:false,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:'😝',fitzpatrick_scale:false,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:'😛',fitzpatrick_scale:false,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:'🤑',fitzpatrick_scale:false,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:'🤓',fitzpatrick_scale:false,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:'😎',fitzpatrick_scale:false,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:'🤩',fitzpatrick_scale:false,category:"people"},clown_face:{keywords:["face"],char:'🤡',fitzpatrick_scale:false,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:'🤠',fitzpatrick_scale:false,category:"people"},hugs:{keywords:["face","smile","hug"],char:'🤗',fitzpatrick_scale:false,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:'😏',fitzpatrick_scale:false,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:'😶',fitzpatrick_scale:false,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:'😐',fitzpatrick_scale:false,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:'😑',fitzpatrick_scale:false,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:'😒',fitzpatrick_scale:false,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:'🙄',fitzpatrick_scale:false,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:'🤔',fitzpatrick_scale:false,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:'🤥',fitzpatrick_scale:false,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:'🤭',fitzpatrick_scale:false,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:'🤫',fitzpatrick_scale:false,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:'🤬',fitzpatrick_scale:false,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:'🤯',fitzpatrick_scale:false,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:'😳',fitzpatrick_scale:false,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:'😞',fitzpatrick_scale:false,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:'😟',fitzpatrick_scale:false,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:'😠',fitzpatrick_scale:false,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:'😡',fitzpatrick_scale:false,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:'😔',fitzpatrick_scale:false,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:'😕',fitzpatrick_scale:false,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:'🙁',fitzpatrick_scale:false,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:'☹',fitzpatrick_scale:false,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:'😣',fitzpatrick_scale:false,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:'😖',fitzpatrick_scale:false,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:'😫',fitzpatrick_scale:false,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:'😩',fitzpatrick_scale:false,category:"people"},pleading:{keywords:["face","begging","mercy"],char:'🥺',fitzpatrick_scale:false,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:'😤',fitzpatrick_scale:false,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:'😮',fitzpatrick_scale:false,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:'😱',fitzpatrick_scale:false,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:'😨',fitzpatrick_scale:false,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:'😰',fitzpatrick_scale:false,category:"people"},hushed:{keywords:["face","woo","shh"],char:'😯',fitzpatrick_scale:false,category:"people"},frowning:{keywords:["face","aw","what"],char:'😦',fitzpatrick_scale:false,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:'😧',fitzpatrick_scale:false,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:'😢',fitzpatrick_scale:false,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:'😥',fitzpatrick_scale:false,category:"people"},drooling_face:{keywords:["face"],char:'🤤',fitzpatrick_scale:false,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:'😪',fitzpatrick_scale:false,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:'😓',fitzpatrick_scale:false,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:'🥵',fitzpatrick_scale:false,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:'🥶',fitzpatrick_scale:false,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:'😭',fitzpatrick_scale:false,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:'😵',fitzpatrick_scale:false,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:'😲',fitzpatrick_scale:false,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:'🤐',fitzpatrick_scale:false,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:'🤢',fitzpatrick_scale:false,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:'🤧',fitzpatrick_scale:false,category:"people"},vomiting:{keywords:["face","sick"],char:'🤮',fitzpatrick_scale:false,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:'😷',fitzpatrick_scale:false,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:'🤒',fitzpatrick_scale:false,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:'🤕',fitzpatrick_scale:false,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:'🥴',fitzpatrick_scale:false,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:'😴',fitzpatrick_scale:false,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:'💤',fitzpatrick_scale:false,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:'💩',fitzpatrick_scale:false,category:"people"},smiling_imp:{keywords:["devil","horns"],char:'😈',fitzpatrick_scale:false,category:"people"},imp:{keywords:["devil","angry","horns"],char:'👿',fitzpatrick_scale:false,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:'👹',fitzpatrick_scale:false,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:'👺',fitzpatrick_scale:false,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:'💀',fitzpatrick_scale:false,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:'👻',fitzpatrick_scale:false,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:'👽',fitzpatrick_scale:false,category:"people"},robot:{keywords:["computer","machine","bot"],char:'🤖',fitzpatrick_scale:false,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:'😺',fitzpatrick_scale:false,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:'😸',fitzpatrick_scale:false,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:'😹',fitzpatrick_scale:false,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:'😻',fitzpatrick_scale:false,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:'😼',fitzpatrick_scale:false,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:'😽',fitzpatrick_scale:false,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:'🙀',fitzpatrick_scale:false,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:'😿',fitzpatrick_scale:false,category:"people"},pouting_cat:{keywords:["animal","cats"],char:'😾',fitzpatrick_scale:false,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:'🤲',fitzpatrick_scale:true,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:'🙌',fitzpatrick_scale:true,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:'👏',fitzpatrick_scale:true,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:'👋',fitzpatrick_scale:true,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:'🤙',fitzpatrick_scale:true,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:'👍',fitzpatrick_scale:true,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:'👎',fitzpatrick_scale:true,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:'👊',fitzpatrick_scale:true,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:'✊',fitzpatrick_scale:true,category:"people"},fist_left:{keywords:["hand","fistbump"],char:'🤛',fitzpatrick_scale:true,category:"people"},fist_right:{keywords:["hand","fistbump"],char:'🤜',fitzpatrick_scale:true,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:'✌',fitzpatrick_scale:true,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:'👌',fitzpatrick_scale:true,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:'✋',fitzpatrick_scale:true,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:'🤚',fitzpatrick_scale:true,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:'👐',fitzpatrick_scale:true,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:'💪',fitzpatrick_scale:true,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:'🙏',fitzpatrick_scale:true,category:"people"},foot:{keywords:["kick","stomp"],char:'🦶',fitzpatrick_scale:true,category:"people"},leg:{keywords:["kick","limb"],char:'🦵',fitzpatrick_scale:true,category:"people"},handshake:{keywords:["agreement","shake"],char:'🤝',fitzpatrick_scale:false,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:'☝',fitzpatrick_scale:true,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:'👆',fitzpatrick_scale:true,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:'👇',fitzpatrick_scale:true,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:'👈',fitzpatrick_scale:true,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:'👉',fitzpatrick_scale:true,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:'🖕',fitzpatrick_scale:true,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:'🖐',fitzpatrick_scale:true,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:'🤟',fitzpatrick_scale:true,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:'🤘',fitzpatrick_scale:true,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:'🤞',fitzpatrick_scale:true,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:'🖖',fitzpatrick_scale:true,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:'✍',fitzpatrick_scale:true,category:"people"},selfie:{keywords:["camera","phone"],char:'🤳',fitzpatrick_scale:true,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:'💅',fitzpatrick_scale:true,category:"people"},lips:{keywords:["mouth","kiss"],char:'👄',fitzpatrick_scale:false,category:"people"},tooth:{keywords:["teeth","dentist"],char:'🦷',fitzpatrick_scale:false,category:"people"},tongue:{keywords:["mouth","playful"],char:'👅',fitzpatrick_scale:false,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:'👂',fitzpatrick_scale:true,category:"people"},nose:{keywords:["smell","sniff"],char:'👃',fitzpatrick_scale:true,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:'👁',fitzpatrick_scale:false,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:'👀',fitzpatrick_scale:false,category:"people"},brain:{keywords:["smart","intelligent"],char:'🧠',fitzpatrick_scale:false,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:'👤',fitzpatrick_scale:false,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:'👥',fitzpatrick_scale:false,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:'🗣',fitzpatrick_scale:false,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:'👶',fitzpatrick_scale:true,category:"people"},child:{keywords:["gender-neutral","young"],char:'🧒',fitzpatrick_scale:true,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:'👦',fitzpatrick_scale:true,category:"people"},girl:{keywords:["female","woman","teenager"],char:'👧',fitzpatrick_scale:true,category:"people"},adult:{keywords:["gender-neutral","person"],char:'🧑',fitzpatrick_scale:true,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:'👨',fitzpatrick_scale:true,category:"people"},woman:{keywords:["female","girls","lady"],char:'👩',fitzpatrick_scale:true,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:'👱‍♀️',fitzpatrick_scale:true,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:'👱',fitzpatrick_scale:true,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:'🧔',fitzpatrick_scale:true,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:'🧓',fitzpatrick_scale:true,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:'👴',fitzpatrick_scale:true,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:'👵',fitzpatrick_scale:true,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:'👲',fitzpatrick_scale:true,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:'🧕',fitzpatrick_scale:true,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:'👳‍♀️',fitzpatrick_scale:true,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:'👳',fitzpatrick_scale:true,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:'👮‍♀️',fitzpatrick_scale:true,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:'👮',fitzpatrick_scale:true,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:'👷‍♀️',fitzpatrick_scale:true,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:'👷',fitzpatrick_scale:true,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:'💂‍♀️',fitzpatrick_scale:true,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:'💂',fitzpatrick_scale:true,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:'🕵️‍♀️',fitzpatrick_scale:true,category:"people"},male_detective:{keywords:["human","spy","detective"],char:'🕵',fitzpatrick_scale:true,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:'👩‍⚕️',fitzpatrick_scale:true,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:'👨‍⚕️',fitzpatrick_scale:true,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:'👩‍🌾',fitzpatrick_scale:true,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:'👨‍🌾',fitzpatrick_scale:true,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:'👩‍🍳',fitzpatrick_scale:true,category:"people"},man_cook:{keywords:["chef","man","human"],char:'👨‍🍳',fitzpatrick_scale:true,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:'👩‍🎓',fitzpatrick_scale:true,category:"people"},man_student:{keywords:["graduate","man","human"],char:'👨‍🎓',fitzpatrick_scale:true,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:'👩‍🎤',fitzpatrick_scale:true,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:'👨‍🎤',fitzpatrick_scale:true,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:'👩‍🏫',fitzpatrick_scale:true,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:'👨‍🏫',fitzpatrick_scale:true,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:'👩‍🏭',fitzpatrick_scale:true,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:'👨‍🏭',fitzpatrick_scale:true,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:'👩‍💻',fitzpatrick_scale:true,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:'👨‍💻',fitzpatrick_scale:true,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:'👩‍💼',fitzpatrick_scale:true,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:'👨‍💼',fitzpatrick_scale:true,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:'👩‍🔧',fitzpatrick_scale:true,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:'👨‍🔧',fitzpatrick_scale:true,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:'👩‍🔬',fitzpatrick_scale:true,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:'👨‍🔬',fitzpatrick_scale:true,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:'👩‍🎨',fitzpatrick_scale:true,category:"people"},man_artist:{keywords:["painter","man","human"],char:'👨‍🎨',fitzpatrick_scale:true,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:'👩‍🚒',fitzpatrick_scale:true,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:'👨‍🚒',fitzpatrick_scale:true,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:'👩‍✈️',fitzpatrick_scale:true,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:'👨‍✈️',fitzpatrick_scale:true,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:'👩‍🚀',fitzpatrick_scale:true,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:'👨‍🚀',fitzpatrick_scale:true,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:'👩‍⚖️',fitzpatrick_scale:true,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:'👨‍⚖️',fitzpatrick_scale:true,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:'🦸‍♀️',fitzpatrick_scale:true,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:'🦸‍♂️',fitzpatrick_scale:true,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:'🦹‍♀️',fitzpatrick_scale:true,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:'🦹‍♂️',fitzpatrick_scale:true,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:'🤶',fitzpatrick_scale:true,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:'🎅',fitzpatrick_scale:true,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:'🧙‍♀️',fitzpatrick_scale:true,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:'🧙‍♂️',fitzpatrick_scale:true,category:"people"},woman_elf:{keywords:["woman","female"],char:'🧝‍♀️',fitzpatrick_scale:true,category:"people"},man_elf:{keywords:["man","male"],char:'🧝‍♂️',fitzpatrick_scale:true,category:"people"},woman_vampire:{keywords:["woman","female"],char:'🧛‍♀️',fitzpatrick_scale:true,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:'🧛‍♂️',fitzpatrick_scale:true,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:'🧟‍♀️',fitzpatrick_scale:false,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:'🧟‍♂️',fitzpatrick_scale:false,category:"people"},woman_genie:{keywords:["woman","female"],char:'🧞‍♀️',fitzpatrick_scale:false,category:"people"},man_genie:{keywords:["man","male"],char:'🧞‍♂️',fitzpatrick_scale:false,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:'🧜‍♀️',fitzpatrick_scale:true,category:"people"},merman:{keywords:["man","male","triton"],char:'🧜‍♂️',fitzpatrick_scale:true,category:"people"},woman_fairy:{keywords:["woman","female"],char:'🧚‍♀️',fitzpatrick_scale:true,category:"people"},man_fairy:{keywords:["man","male"],char:'🧚‍♂️',fitzpatrick_scale:true,category:"people"},angel:{keywords:["heaven","wings","halo"],char:'👼',fitzpatrick_scale:true,category:"people"},pregnant_woman:{keywords:["baby"],char:'🤰',fitzpatrick_scale:true,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:'🤱',fitzpatrick_scale:true,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:'👸',fitzpatrick_scale:true,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:'🤴',fitzpatrick_scale:true,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:'👰',fitzpatrick_scale:true,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:'🤵',fitzpatrick_scale:true,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:'🏃‍♀️',fitzpatrick_scale:true,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:'🏃',fitzpatrick_scale:true,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:'🚶‍♀️',fitzpatrick_scale:true,category:"people"},walking_man:{keywords:["human","feet","steps"],char:'🚶',fitzpatrick_scale:true,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:'💃',fitzpatrick_scale:true,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:'🕺',fitzpatrick_scale:true,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:'👯',fitzpatrick_scale:false,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:'👯‍♂️',fitzpatrick_scale:false,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:'👫',fitzpatrick_scale:false,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:'👬',fitzpatrick_scale:false,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:'👭',fitzpatrick_scale:false,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:'🙇‍♀️',fitzpatrick_scale:true,category:"people"},bowing_man:{keywords:["man","male","boy"],char:'🙇',fitzpatrick_scale:true,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:'🤦‍♂️',fitzpatrick_scale:true,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:'🤦‍♀️',fitzpatrick_scale:true,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:'🤷',fitzpatrick_scale:true,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:'🤷‍♂️',fitzpatrick_scale:true,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:'💁',fitzpatrick_scale:true,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:'💁‍♂️',fitzpatrick_scale:true,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:'🙅',fitzpatrick_scale:true,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:'🙅‍♂️',fitzpatrick_scale:true,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:'🙆',fitzpatrick_scale:true,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:'🙆‍♂️',fitzpatrick_scale:true,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:'🙋',fitzpatrick_scale:true,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:'🙋‍♂️',fitzpatrick_scale:true,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:'🙎',fitzpatrick_scale:true,category:"people"},pouting_man:{keywords:["male","boy","man"],char:'🙎‍♂️',fitzpatrick_scale:true,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:'🙍',fitzpatrick_scale:true,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:'🙍‍♂️',fitzpatrick_scale:true,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:'💇',fitzpatrick_scale:true,category:"people"},haircut_man:{keywords:["male","boy","man"],char:'💇‍♂️',fitzpatrick_scale:true,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:'💆',fitzpatrick_scale:true,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:'💆‍♂️',fitzpatrick_scale:true,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:'🧖‍♀️',fitzpatrick_scale:true,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:'🧖‍♂️',fitzpatrick_scale:true,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'💑',fitzpatrick_scale:false,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'👩‍❤️‍👩',fitzpatrick_scale:false,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'👨‍❤️‍👨',fitzpatrick_scale:false,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'💏',fitzpatrick_scale:false,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'👩‍❤️‍💋‍👩',fitzpatrick_scale:false,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:'👨‍❤️‍💋‍👨',fitzpatrick_scale:false,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:'👪',fitzpatrick_scale:false,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:'👨‍👩‍👧',fitzpatrick_scale:false,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧',fitzpatrick_scale:false,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:'👩‍👦',fitzpatrick_scale:false,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:'👩‍👧',fitzpatrick_scale:false,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:'👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:'👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:'👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:'👨‍👦',fitzpatrick_scale:false,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:'👨‍👧',fitzpatrick_scale:false,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:'👨‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:'👨‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:'👨‍👧‍👧',fitzpatrick_scale:false,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:'🧶',fitzpatrick_scale:false,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:'🧵',fitzpatrick_scale:false,category:"people"},coat:{keywords:["jacket"],char:'🧥',fitzpatrick_scale:false,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:'🥼',fitzpatrick_scale:false,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:'👚',fitzpatrick_scale:false,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:'👕',fitzpatrick_scale:false,category:"people"},jeans:{keywords:["fashion","shopping"],char:'👖',fitzpatrick_scale:false,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:'👔',fitzpatrick_scale:false,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:'👗',fitzpatrick_scale:false,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:'👙',fitzpatrick_scale:false,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:'👘',fitzpatrick_scale:false,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:'💄',fitzpatrick_scale:false,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:'💋',fitzpatrick_scale:false,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:'👣',fitzpatrick_scale:false,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:'🥿',fitzpatrick_scale:false,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:'👠',fitzpatrick_scale:false,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:'👡',fitzpatrick_scale:false,category:"people"},boot:{keywords:["shoes","fashion"],char:'👢',fitzpatrick_scale:false,category:"people"},mans_shoe:{keywords:["fashion","male"],char:'👞',fitzpatrick_scale:false,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:'👟',fitzpatrick_scale:false,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:'🥾',fitzpatrick_scale:false,category:"people"},socks:{keywords:["stockings","clothes"],char:'🧦',fitzpatrick_scale:false,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:'🧤',fitzpatrick_scale:false,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:'🧣',fitzpatrick_scale:false,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:'👒',fitzpatrick_scale:false,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:'🎩',fitzpatrick_scale:false,category:"people"},billed_hat:{keywords:["cap","baseball"],char:'🧢',fitzpatrick_scale:false,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:'⛑',fitzpatrick_scale:false,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:'🎓',fitzpatrick_scale:false,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:'👑',fitzpatrick_scale:false,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:'🎒',fitzpatrick_scale:false,category:"people"},luggage:{keywords:["packing","travel"],char:'🧳',fitzpatrick_scale:false,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:'👝',fitzpatrick_scale:false,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:'👛',fitzpatrick_scale:false,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:'👜',fitzpatrick_scale:false,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:'💼',fitzpatrick_scale:false,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:'👓',fitzpatrick_scale:false,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:'🕶',fitzpatrick_scale:false,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:'🥽',fitzpatrick_scale:false,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:'💍',fitzpatrick_scale:false,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:'🌂',fitzpatrick_scale:false,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:'🐶',fitzpatrick_scale:false,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:'🐱',fitzpatrick_scale:false,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:'🐭',fitzpatrick_scale:false,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:'🐹',fitzpatrick_scale:false,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:'🐰',fitzpatrick_scale:false,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:'🦊',fitzpatrick_scale:false,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:'🐻',fitzpatrick_scale:false,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:'🐼',fitzpatrick_scale:false,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:'🐨',fitzpatrick_scale:false,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:'🐯',fitzpatrick_scale:false,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:'🦁',fitzpatrick_scale:false,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:'🐮',fitzpatrick_scale:false,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:'🐷',fitzpatrick_scale:false,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:'🐽',fitzpatrick_scale:false,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:'🐸',fitzpatrick_scale:false,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:'🦑',fitzpatrick_scale:false,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:'🐙',fitzpatrick_scale:false,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:'🦐',fitzpatrick_scale:false,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:'🐵',fitzpatrick_scale:false,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:'🦍',fitzpatrick_scale:false,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:'🙈',fitzpatrick_scale:false,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:'🙉',fitzpatrick_scale:false,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:'🙊',fitzpatrick_scale:false,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:'🐒',fitzpatrick_scale:false,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:'🐔',fitzpatrick_scale:false,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:'🐧',fitzpatrick_scale:false,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:'🐦',fitzpatrick_scale:false,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:'🐤',fitzpatrick_scale:false,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:'🐣',fitzpatrick_scale:false,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:'🐥',fitzpatrick_scale:false,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:'🦆',fitzpatrick_scale:false,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:'🦅',fitzpatrick_scale:false,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:'🦉',fitzpatrick_scale:false,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:'🦇',fitzpatrick_scale:false,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:'🐺',fitzpatrick_scale:false,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:'🐗',fitzpatrick_scale:false,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:'🐴',fitzpatrick_scale:false,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:'🦄',fitzpatrick_scale:false,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:'🐝',fitzpatrick_scale:false,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:'🐛',fitzpatrick_scale:false,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:'🦋',fitzpatrick_scale:false,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:'🐌',fitzpatrick_scale:false,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:'🐞',fitzpatrick_scale:false,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:'🐜',fitzpatrick_scale:false,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:'🦗',fitzpatrick_scale:false,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:'🕷',fitzpatrick_scale:false,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:'🦂',fitzpatrick_scale:false,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:'🦀',fitzpatrick_scale:false,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:'🐍',fitzpatrick_scale:false,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:'🦎',fitzpatrick_scale:false,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:'🦖',fitzpatrick_scale:false,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:'🦕',fitzpatrick_scale:false,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:'🐢',fitzpatrick_scale:false,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:'🐠',fitzpatrick_scale:false,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:'🐟',fitzpatrick_scale:false,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:'🐡',fitzpatrick_scale:false,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:'🐬',fitzpatrick_scale:false,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:'🦈',fitzpatrick_scale:false,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:'🐳',fitzpatrick_scale:false,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:'🐋',fitzpatrick_scale:false,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:'🐊',fitzpatrick_scale:false,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:'🐆',fitzpatrick_scale:false,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:'🦓',fitzpatrick_scale:false,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:'🐅',fitzpatrick_scale:false,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:'🐃',fitzpatrick_scale:false,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:'🐂',fitzpatrick_scale:false,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:'🐄',fitzpatrick_scale:false,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:'🦌',fitzpatrick_scale:false,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:'🐪',fitzpatrick_scale:false,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:'🐫',fitzpatrick_scale:false,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:'🦒',fitzpatrick_scale:false,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:'🐘',fitzpatrick_scale:false,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:'🦏',fitzpatrick_scale:false,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:'🐐',fitzpatrick_scale:false,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:'🐏',fitzpatrick_scale:false,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:'🐑',fitzpatrick_scale:false,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:'🐎',fitzpatrick_scale:false,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:'🐖',fitzpatrick_scale:false,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:'🐀',fitzpatrick_scale:false,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:'🐁',fitzpatrick_scale:false,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:'🐓',fitzpatrick_scale:false,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:'🦃',fitzpatrick_scale:false,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:'🕊',fitzpatrick_scale:false,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:'🐕',fitzpatrick_scale:false,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:'🐩',fitzpatrick_scale:false,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:'🐈',fitzpatrick_scale:false,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:'🐇',fitzpatrick_scale:false,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:'🐿',fitzpatrick_scale:false,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:'🦔',fitzpatrick_scale:false,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:'🦝',fitzpatrick_scale:false,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:'🦙',fitzpatrick_scale:false,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:'🦛',fitzpatrick_scale:false,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:'🦘',fitzpatrick_scale:false,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:'🦡',fitzpatrick_scale:false,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:'🦢',fitzpatrick_scale:false,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:'🦚',fitzpatrick_scale:false,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:'🦜',fitzpatrick_scale:false,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:'🦞',fitzpatrick_scale:false,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:'🦟',fitzpatrick_scale:false,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:'🐾',fitzpatrick_scale:false,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:'🐉',fitzpatrick_scale:false,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:'🐲',fitzpatrick_scale:false,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:'🌵',fitzpatrick_scale:false,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:'🎄',fitzpatrick_scale:false,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:'🌲',fitzpatrick_scale:false,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:'🌳',fitzpatrick_scale:false,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:'🌴',fitzpatrick_scale:false,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:'🌱',fitzpatrick_scale:false,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:'🌿',fitzpatrick_scale:false,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:'☘',fitzpatrick_scale:false,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:'🍀',fitzpatrick_scale:false,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:'🎍',fitzpatrick_scale:false,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:'🎋',fitzpatrick_scale:false,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:'🍃',fitzpatrick_scale:false,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:'🍂',fitzpatrick_scale:false,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:'🍁',fitzpatrick_scale:false,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:'🌾',fitzpatrick_scale:false,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:'🌺',fitzpatrick_scale:false,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:'🌻',fitzpatrick_scale:false,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:'🌹',fitzpatrick_scale:false,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:'🥀',fitzpatrick_scale:false,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:'🌷',fitzpatrick_scale:false,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:'🌼',fitzpatrick_scale:false,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:'🌸',fitzpatrick_scale:false,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:'💐',fitzpatrick_scale:false,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:'🍄',fitzpatrick_scale:false,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:'🌰',fitzpatrick_scale:false,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:'🎃',fitzpatrick_scale:false,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:'🐚',fitzpatrick_scale:false,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:'🕸',fitzpatrick_scale:false,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:'🌎',fitzpatrick_scale:false,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:'🌍',fitzpatrick_scale:false,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:'🌏',fitzpatrick_scale:false,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:'🌕',fitzpatrick_scale:false,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:'🌖',fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌗',fitzpatrick_scale:false,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌘',fitzpatrick_scale:false,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌑',fitzpatrick_scale:false,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌒',fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌓',fitzpatrick_scale:false,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:'🌔',fitzpatrick_scale:false,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌚',fitzpatrick_scale:false,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌝',fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌛',fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌜',fitzpatrick_scale:false,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:'🌞',fitzpatrick_scale:false,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:'🌙',fitzpatrick_scale:false,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:'⭐',fitzpatrick_scale:false,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:'🌟',fitzpatrick_scale:false,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:'💫',fitzpatrick_scale:false,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:'✨',fitzpatrick_scale:false,category:"animals_and_nature"},comet:{keywords:["space"],char:'☄',fitzpatrick_scale:false,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:'☀️',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:'🌤',fitzpatrick_scale:false,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:'⛅',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:'🌥',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:'🌦',fitzpatrick_scale:false,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:'☁️',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:'🌧',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:'⛈',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:'🌩',fitzpatrick_scale:false,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:'⚡',fitzpatrick_scale:false,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:'🔥',fitzpatrick_scale:false,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:'💥',fitzpatrick_scale:false,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:'❄️',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:'🌨',fitzpatrick_scale:false,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:'⛄',fitzpatrick_scale:false,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:'☃',fitzpatrick_scale:false,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:'🌬',fitzpatrick_scale:false,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:'💨',fitzpatrick_scale:false,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:'🌪',fitzpatrick_scale:false,category:"animals_and_nature"},fog:{keywords:["weather"],char:'🌫',fitzpatrick_scale:false,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:'☂',fitzpatrick_scale:false,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:'☔',fitzpatrick_scale:false,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:'💧',fitzpatrick_scale:false,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:'💦',fitzpatrick_scale:false,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:'🌊',fitzpatrick_scale:false,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:'🍏',fitzpatrick_scale:false,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:'🍎',fitzpatrick_scale:false,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:'🍐',fitzpatrick_scale:false,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:'🍊',fitzpatrick_scale:false,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:'🍋',fitzpatrick_scale:false,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:'🍌',fitzpatrick_scale:false,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:'🍉',fitzpatrick_scale:false,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:'🍇',fitzpatrick_scale:false,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:'🍓',fitzpatrick_scale:false,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:'🍈',fitzpatrick_scale:false,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:'🍒',fitzpatrick_scale:false,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:'🍑',fitzpatrick_scale:false,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:'🍍',fitzpatrick_scale:false,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:'🥥',fitzpatrick_scale:false,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:'🥝',fitzpatrick_scale:false,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:'🥭',fitzpatrick_scale:false,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:'🥑',fitzpatrick_scale:false,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:'🥦',fitzpatrick_scale:false,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:'🍅',fitzpatrick_scale:false,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:'🍆',fitzpatrick_scale:false,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:'🥒',fitzpatrick_scale:false,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:'🥕',fitzpatrick_scale:false,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:'🌶',fitzpatrick_scale:false,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:'🥔',fitzpatrick_scale:false,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:'🌽',fitzpatrick_scale:false,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:'🥬',fitzpatrick_scale:false,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:'🍠',fitzpatrick_scale:false,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:'🥜',fitzpatrick_scale:false,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:'🍯',fitzpatrick_scale:false,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:'🥐',fitzpatrick_scale:false,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:'🍞',fitzpatrick_scale:false,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:'🥖',fitzpatrick_scale:false,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:'🥯',fitzpatrick_scale:false,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:'🥨',fitzpatrick_scale:false,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:'🧀',fitzpatrick_scale:false,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:'🥚',fitzpatrick_scale:false,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:'🥓',fitzpatrick_scale:false,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:'🥩',fitzpatrick_scale:false,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:'🥞',fitzpatrick_scale:false,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:'🍗',fitzpatrick_scale:false,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:'🍖',fitzpatrick_scale:false,category:"food_and_drink"},bone:{keywords:["skeleton"],char:'🦴',fitzpatrick_scale:false,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:'🍤',fitzpatrick_scale:false,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:'🍳',fitzpatrick_scale:false,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:'🍔',fitzpatrick_scale:false,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:'🍟',fitzpatrick_scale:false,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:'🥙',fitzpatrick_scale:false,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:'🌭',fitzpatrick_scale:false,category:"food_and_drink"},pizza:{keywords:["food","party"],char:'🍕',fitzpatrick_scale:false,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:'🥪',fitzpatrick_scale:false,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:'🥫',fitzpatrick_scale:false,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:'🍝',fitzpatrick_scale:false,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:'🌮',fitzpatrick_scale:false,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:'🌯',fitzpatrick_scale:false,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:'🥗',fitzpatrick_scale:false,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:'🥘',fitzpatrick_scale:false,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:'🍜',fitzpatrick_scale:false,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:'🍲',fitzpatrick_scale:false,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:'🍥',fitzpatrick_scale:false,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:'🥠',fitzpatrick_scale:false,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:'🍣',fitzpatrick_scale:false,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:'🍱',fitzpatrick_scale:false,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:'🍛',fitzpatrick_scale:false,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:'🍙',fitzpatrick_scale:false,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:'🍚',fitzpatrick_scale:false,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:'🍘',fitzpatrick_scale:false,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:'🍢',fitzpatrick_scale:false,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:'🍡',fitzpatrick_scale:false,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:'🍧',fitzpatrick_scale:false,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:'🍨',fitzpatrick_scale:false,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:'🍦',fitzpatrick_scale:false,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:'🥧',fitzpatrick_scale:false,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:'🍰',fitzpatrick_scale:false,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:'🧁',fitzpatrick_scale:false,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:'🥮',fitzpatrick_scale:false,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:'🎂',fitzpatrick_scale:false,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:'🍮',fitzpatrick_scale:false,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:'🍬',fitzpatrick_scale:false,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:'🍭',fitzpatrick_scale:false,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:'🍫',fitzpatrick_scale:false,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:'🍿',fitzpatrick_scale:false,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:'🥟',fitzpatrick_scale:false,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:'🍩',fitzpatrick_scale:false,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:'🍪',fitzpatrick_scale:false,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:'🥛',fitzpatrick_scale:false,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'🍺',fitzpatrick_scale:false,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'🍻',fitzpatrick_scale:false,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:'🥂',fitzpatrick_scale:false,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:'🍷',fitzpatrick_scale:false,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:'🥃',fitzpatrick_scale:false,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:'🍸',fitzpatrick_scale:false,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:'🍹',fitzpatrick_scale:false,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:'🍾',fitzpatrick_scale:false,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:'🍶',fitzpatrick_scale:false,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:'🍵',fitzpatrick_scale:false,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:'🥤',fitzpatrick_scale:false,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:'☕',fitzpatrick_scale:false,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:'🍼',fitzpatrick_scale:false,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:'🧂',fitzpatrick_scale:false,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:'🥄',fitzpatrick_scale:false,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:'🍴',fitzpatrick_scale:false,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:'🍽',fitzpatrick_scale:false,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:'🥣',fitzpatrick_scale:false,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:'🥡',fitzpatrick_scale:false,category:"food_and_drink"},chopsticks:{keywords:["food"],char:'🥢',fitzpatrick_scale:false,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:'⚽',fitzpatrick_scale:false,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:'🏀',fitzpatrick_scale:false,category:"activity"},football:{keywords:["sports","balls","NFL"],char:'🏈',fitzpatrick_scale:false,category:"activity"},baseball:{keywords:["sports","balls"],char:'⚾',fitzpatrick_scale:false,category:"activity"},softball:{keywords:["sports","balls"],char:'🥎',fitzpatrick_scale:false,category:"activity"},tennis:{keywords:["sports","balls","green"],char:'🎾',fitzpatrick_scale:false,category:"activity"},volleyball:{keywords:["sports","balls"],char:'🏐',fitzpatrick_scale:false,category:"activity"},rugby_football:{keywords:["sports","team"],char:'🏉',fitzpatrick_scale:false,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:'🥏',fitzpatrick_scale:false,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:'🎱',fitzpatrick_scale:false,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:'⛳',fitzpatrick_scale:false,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:'🏌️‍♀️',fitzpatrick_scale:false,category:"activity"},golfing_man:{keywords:["sports","business"],char:'🏌',fitzpatrick_scale:true,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:'🏓',fitzpatrick_scale:false,category:"activity"},badminton:{keywords:["sports"],char:'🏸',fitzpatrick_scale:false,category:"activity"},goal_net:{keywords:["sports"],char:'🥅',fitzpatrick_scale:false,category:"activity"},ice_hockey:{keywords:["sports"],char:'🏒',fitzpatrick_scale:false,category:"activity"},field_hockey:{keywords:["sports"],char:'🏑',fitzpatrick_scale:false,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:'🥍',fitzpatrick_scale:false,category:"activity"},cricket:{keywords:["sports"],char:'🏏',fitzpatrick_scale:false,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:'🎿',fitzpatrick_scale:false,category:"activity"},skier:{keywords:["sports","winter","snow"],char:'⛷',fitzpatrick_scale:false,category:"activity"},snowboarder:{keywords:["sports","winter"],char:'🏂',fitzpatrick_scale:true,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:'🤺',fitzpatrick_scale:false,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:'🤼‍♀️',fitzpatrick_scale:false,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:'🤼‍♂️',fitzpatrick_scale:false,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:'🤸‍♀️',fitzpatrick_scale:true,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:'🤸‍♂️',fitzpatrick_scale:true,category:"activity"},woman_playing_handball:{keywords:["sports"],char:'🤾‍♀️',fitzpatrick_scale:true,category:"activity"},man_playing_handball:{keywords:["sports"],char:'🤾‍♂️',fitzpatrick_scale:true,category:"activity"},ice_skate:{keywords:["sports"],char:'⛸',fitzpatrick_scale:false,category:"activity"},curling_stone:{keywords:["sports"],char:'🥌',fitzpatrick_scale:false,category:"activity"},skateboard:{keywords:["board"],char:'🛹',fitzpatrick_scale:false,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:'🛷',fitzpatrick_scale:false,category:"activity"},bow_and_arrow:{keywords:["sports"],char:'🏹',fitzpatrick_scale:false,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:'🎣',fitzpatrick_scale:false,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:'🥊',fitzpatrick_scale:false,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:'🥋',fitzpatrick_scale:false,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:'🚣‍♀️',fitzpatrick_scale:true,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:'🚣',fitzpatrick_scale:true,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:'🧗‍♀️',fitzpatrick_scale:true,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:'🧗‍♂️',fitzpatrick_scale:true,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:'🏊‍♀️',fitzpatrick_scale:true,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:'🏊',fitzpatrick_scale:true,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:'🤽‍♀️',fitzpatrick_scale:true,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:'🤽‍♂️',fitzpatrick_scale:true,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:'🧘‍♀️',fitzpatrick_scale:true,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:'🧘‍♂️',fitzpatrick_scale:true,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:'🏄‍♀️',fitzpatrick_scale:true,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:'🏄',fitzpatrick_scale:true,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:'🛀',fitzpatrick_scale:true,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:'⛹️‍♀️',fitzpatrick_scale:true,category:"activity"},basketball_man:{keywords:["sports","human"],char:'⛹',fitzpatrick_scale:true,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:'🏋️‍♀️',fitzpatrick_scale:true,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:'🏋',fitzpatrick_scale:true,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:'🚴‍♀️',fitzpatrick_scale:true,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:'🚴',fitzpatrick_scale:true,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:'🚵‍♀️',fitzpatrick_scale:true,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:'🚵',fitzpatrick_scale:true,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:'🏇',fitzpatrick_scale:true,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:'🕴',fitzpatrick_scale:true,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:'🏆',fitzpatrick_scale:false,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:'🎽',fitzpatrick_scale:false,category:"activity"},medal_sports:{keywords:["award","winning"],char:'🏅',fitzpatrick_scale:false,category:"activity"},medal_military:{keywords:["award","winning","army"],char:'🎖',fitzpatrick_scale:false,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:'🥇',fitzpatrick_scale:false,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:'🥈',fitzpatrick_scale:false,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:'🥉',fitzpatrick_scale:false,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:'🎗',fitzpatrick_scale:false,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:'🏵',fitzpatrick_scale:false,category:"activity"},ticket:{keywords:["event","concert","pass"],char:'🎫',fitzpatrick_scale:false,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:'🎟',fitzpatrick_scale:false,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:'🎭',fitzpatrick_scale:false,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:'🎨',fitzpatrick_scale:false,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:'🎪',fitzpatrick_scale:false,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:'🤹‍♀️',fitzpatrick_scale:true,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:'🤹‍♂️',fitzpatrick_scale:true,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:'🎤',fitzpatrick_scale:false,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:'🎧',fitzpatrick_scale:false,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:'🎼',fitzpatrick_scale:false,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:'🎹',fitzpatrick_scale:false,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:'🥁',fitzpatrick_scale:false,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:'🎷',fitzpatrick_scale:false,category:"activity"},trumpet:{keywords:["music","brass"],char:'🎺',fitzpatrick_scale:false,category:"activity"},guitar:{keywords:["music","instrument"],char:'🎸',fitzpatrick_scale:false,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:'🎻',fitzpatrick_scale:false,category:"activity"},clapper:{keywords:["movie","film","record"],char:'🎬',fitzpatrick_scale:false,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:'🎮',fitzpatrick_scale:false,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:'👾',fitzpatrick_scale:false,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:'🎯',fitzpatrick_scale:false,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:'🎲',fitzpatrick_scale:false,category:"activity"},chess_pawn:{keywords:["expendable"],char:"♟",fitzpatrick_scale:false,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:'🎰',fitzpatrick_scale:false,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:'🧩',fitzpatrick_scale:false,category:"activity"},bowling:{keywords:["sports","fun","play"],char:'🎳',fitzpatrick_scale:false,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:'🚗',fitzpatrick_scale:false,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:'🚕',fitzpatrick_scale:false,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:'🚙',fitzpatrick_scale:false,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:'🚌',fitzpatrick_scale:false,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:'🚎',fitzpatrick_scale:false,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:'🏎',fitzpatrick_scale:false,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:'🚓',fitzpatrick_scale:false,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:'🚑',fitzpatrick_scale:false,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:'🚒',fitzpatrick_scale:false,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:'🚐',fitzpatrick_scale:false,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:'🚚',fitzpatrick_scale:false,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:'🚛',fitzpatrick_scale:false,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:'🚜',fitzpatrick_scale:false,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:'🛴',fitzpatrick_scale:false,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:'🏍',fitzpatrick_scale:false,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:'🚲',fitzpatrick_scale:false,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:'🛵',fitzpatrick_scale:false,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:'🚨',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:'🚔',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:'🚍',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:'🚘',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:'🚖',fitzpatrick_scale:false,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:'🚡',fitzpatrick_scale:false,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:'🚠',fitzpatrick_scale:false,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:'🚟',fitzpatrick_scale:false,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:'🚃',fitzpatrick_scale:false,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:'🚋',fitzpatrick_scale:false,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:'🚝',fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:'🚄',fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:'🚅',fitzpatrick_scale:false,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:'🚈',fitzpatrick_scale:false,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:'🚞',fitzpatrick_scale:false,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:'🚂',fitzpatrick_scale:false,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:'🚆',fitzpatrick_scale:false,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:'🚇',fitzpatrick_scale:false,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:'🚊',fitzpatrick_scale:false,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:'🚉',fitzpatrick_scale:false,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:'🛸',fitzpatrick_scale:false,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:'🚁',fitzpatrick_scale:false,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:'🛩',fitzpatrick_scale:false,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:'✈️',fitzpatrick_scale:false,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:'🛫',fitzpatrick_scale:false,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:'🛬',fitzpatrick_scale:false,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:'⛵',fitzpatrick_scale:false,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:'🛥',fitzpatrick_scale:false,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:'🚤',fitzpatrick_scale:false,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:'⛴',fitzpatrick_scale:false,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:'🛳',fitzpatrick_scale:false,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:'🚀',fitzpatrick_scale:false,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:'🛰',fitzpatrick_scale:false,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:'💺',fitzpatrick_scale:false,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:'🛶',fitzpatrick_scale:false,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:'⚓',fitzpatrick_scale:false,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:'🚧',fitzpatrick_scale:false,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:'⛽',fitzpatrick_scale:false,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:'🚏',fitzpatrick_scale:false,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:'🚦',fitzpatrick_scale:false,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:'🚥',fitzpatrick_scale:false,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:'🏁',fitzpatrick_scale:false,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:'🚢',fitzpatrick_scale:false,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:'🎡',fitzpatrick_scale:false,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:'🎢',fitzpatrick_scale:false,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:'🎠',fitzpatrick_scale:false,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:'🏗',fitzpatrick_scale:false,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:'🌁',fitzpatrick_scale:false,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:'🗼',fitzpatrick_scale:false,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:'🏭',fitzpatrick_scale:false,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:'⛲',fitzpatrick_scale:false,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:'🎑',fitzpatrick_scale:false,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:'⛰',fitzpatrick_scale:false,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:'🏔',fitzpatrick_scale:false,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:'🗻',fitzpatrick_scale:false,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:'🌋',fitzpatrick_scale:false,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:'🗾',fitzpatrick_scale:false,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:'🏕',fitzpatrick_scale:false,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:'⛺',fitzpatrick_scale:false,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:'🏞',fitzpatrick_scale:false,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:'🛣',fitzpatrick_scale:false,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:'🛤',fitzpatrick_scale:false,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:'🌅',fitzpatrick_scale:false,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:'🌄',fitzpatrick_scale:false,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:'🏜',fitzpatrick_scale:false,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:'🏖',fitzpatrick_scale:false,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:'🏝',fitzpatrick_scale:false,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:'🌇',fitzpatrick_scale:false,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:'🌆',fitzpatrick_scale:false,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:'🏙',fitzpatrick_scale:false,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:'🌃',fitzpatrick_scale:false,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:'🌉',fitzpatrick_scale:false,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:'🌌',fitzpatrick_scale:false,category:"travel_and_places"},stars:{keywords:["night","photo"],char:'🌠',fitzpatrick_scale:false,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:'🎇',fitzpatrick_scale:false,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:'🎆',fitzpatrick_scale:false,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:'🌈',fitzpatrick_scale:false,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:'🏘',fitzpatrick_scale:false,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:'🏰',fitzpatrick_scale:false,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:'🏯',fitzpatrick_scale:false,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:'🏟',fitzpatrick_scale:false,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:'🗽',fitzpatrick_scale:false,category:"travel_and_places"},house:{keywords:["building","home"],char:'🏠',fitzpatrick_scale:false,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:'🏡',fitzpatrick_scale:false,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:'🏚',fitzpatrick_scale:false,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:'🏢',fitzpatrick_scale:false,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:'🏬',fitzpatrick_scale:false,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:'🏣',fitzpatrick_scale:false,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:'🏤',fitzpatrick_scale:false,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:'🏥',fitzpatrick_scale:false,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:'🏦',fitzpatrick_scale:false,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:'🏨',fitzpatrick_scale:false,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:'🏪',fitzpatrick_scale:false,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:'🏫',fitzpatrick_scale:false,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:'🏩',fitzpatrick_scale:false,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:'💒',fitzpatrick_scale:false,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:'🏛',fitzpatrick_scale:false,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:'⛪',fitzpatrick_scale:false,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:'🕌',fitzpatrick_scale:false,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:'🕍',fitzpatrick_scale:false,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:'🕋',fitzpatrick_scale:false,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:'⛩',fitzpatrick_scale:false,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:'⌚',fitzpatrick_scale:false,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:'📱',fitzpatrick_scale:false,category:"objects"},calling:{keywords:["iphone","incoming"],char:'📲',fitzpatrick_scale:false,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:'💻',fitzpatrick_scale:false,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:'⌨',fitzpatrick_scale:false,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:'🖥',fitzpatrick_scale:false,category:"objects"},printer:{keywords:["paper","ink"],char:'🖨',fitzpatrick_scale:false,category:"objects"},computer_mouse:{keywords:["click"],char:'🖱',fitzpatrick_scale:false,category:"objects"},trackball:{keywords:["technology","trackpad"],char:'🖲',fitzpatrick_scale:false,category:"objects"},joystick:{keywords:["game","play"],char:'🕹',fitzpatrick_scale:false,category:"objects"},clamp:{keywords:["tool"],char:'🗜',fitzpatrick_scale:false,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:'💽',fitzpatrick_scale:false,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:'💾',fitzpatrick_scale:false,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:'💿',fitzpatrick_scale:false,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:'📀',fitzpatrick_scale:false,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:'📼',fitzpatrick_scale:false,category:"objects"},camera:{keywords:["gadgets","photography"],char:'📷',fitzpatrick_scale:false,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:'📸',fitzpatrick_scale:false,category:"objects"},video_camera:{keywords:["film","record"],char:'📹',fitzpatrick_scale:false,category:"objects"},movie_camera:{keywords:["film","record"],char:'🎥',fitzpatrick_scale:false,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:'📽',fitzpatrick_scale:false,category:"objects"},film_strip:{keywords:["movie"],char:'🎞',fitzpatrick_scale:false,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:'📞',fitzpatrick_scale:false,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:'☎️',fitzpatrick_scale:false,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:'📟',fitzpatrick_scale:false,category:"objects"},fax:{keywords:["communication","technology"],char:'📠',fitzpatrick_scale:false,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:'📺',fitzpatrick_scale:false,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:'📻',fitzpatrick_scale:false,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:'🎙',fitzpatrick_scale:false,category:"objects"},level_slider:{keywords:["scale"],char:'🎚',fitzpatrick_scale:false,category:"objects"},control_knobs:{keywords:["dial"],char:'🎛',fitzpatrick_scale:false,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:'🧭',fitzpatrick_scale:false,category:"objects"},stopwatch:{keywords:["time","deadline"],char:'⏱',fitzpatrick_scale:false,category:"objects"},timer_clock:{keywords:["alarm"],char:'⏲',fitzpatrick_scale:false,category:"objects"},alarm_clock:{keywords:["time","wake"],char:'⏰',fitzpatrick_scale:false,category:"objects"},mantelpiece_clock:{keywords:["time"],char:'🕰',fitzpatrick_scale:false,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:'⏳',fitzpatrick_scale:false,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:'⌛',fitzpatrick_scale:false,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:'📡',fitzpatrick_scale:false,category:"objects"},battery:{keywords:["power","energy","sustain"],char:'🔋',fitzpatrick_scale:false,category:"objects"},electric_plug:{keywords:["charger","power"],char:'🔌',fitzpatrick_scale:false,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:'💡',fitzpatrick_scale:false,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:'🔦',fitzpatrick_scale:false,category:"objects"},candle:{keywords:["fire","wax"],char:'🕯',fitzpatrick_scale:false,category:"objects"},fire_extinguisher:{keywords:["quench"],char:'🧯',fitzpatrick_scale:false,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:'🗑',fitzpatrick_scale:false,category:"objects"},oil_drum:{keywords:["barrell"],char:'🛢',fitzpatrick_scale:false,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:'💸',fitzpatrick_scale:false,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:'💵',fitzpatrick_scale:false,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:'💴',fitzpatrick_scale:false,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:'💶',fitzpatrick_scale:false,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:'💷',fitzpatrick_scale:false,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:'💰',fitzpatrick_scale:false,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:'💳',fitzpatrick_scale:false,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:'💎',fitzpatrick_scale:false,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:'⚖',fitzpatrick_scale:false,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:'🧰',fitzpatrick_scale:false,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:'🔧',fitzpatrick_scale:false,category:"objects"},hammer:{keywords:["tools","build","create"],char:'🔨',fitzpatrick_scale:false,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:'⚒',fitzpatrick_scale:false,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:'🛠',fitzpatrick_scale:false,category:"objects"},pick:{keywords:["tools","dig"],char:'⛏',fitzpatrick_scale:false,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:'🔩',fitzpatrick_scale:false,category:"objects"},gear:{keywords:["cog"],char:'⚙',fitzpatrick_scale:false,category:"objects"},brick:{keywords:["bricks"],char:'🧱',fitzpatrick_scale:false,category:"objects"},chains:{keywords:["lock","arrest"],char:'⛓',fitzpatrick_scale:false,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:'🧲',fitzpatrick_scale:false,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:'🔫',fitzpatrick_scale:false,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:'💣',fitzpatrick_scale:false,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:'🧨',fitzpatrick_scale:false,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:'🔪',fitzpatrick_scale:false,category:"objects"},dagger:{keywords:["weapon"],char:'🗡',fitzpatrick_scale:false,category:"objects"},crossed_swords:{keywords:["weapon"],char:'⚔',fitzpatrick_scale:false,category:"objects"},shield:{keywords:["protection","security"],char:'🛡',fitzpatrick_scale:false,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:'🚬',fitzpatrick_scale:false,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:'☠',fitzpatrick_scale:false,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:'⚰',fitzpatrick_scale:false,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:'⚱',fitzpatrick_scale:false,category:"objects"},amphora:{keywords:["vase","jar"],char:'🏺',fitzpatrick_scale:false,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:'🔮',fitzpatrick_scale:false,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:'📿',fitzpatrick_scale:false,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:'🧿',fitzpatrick_scale:false,category:"objects"},barber:{keywords:["hair","salon","style"],char:'💈',fitzpatrick_scale:false,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:'⚗',fitzpatrick_scale:false,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:'🔭',fitzpatrick_scale:false,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:'🔬',fitzpatrick_scale:false,category:"objects"},hole:{keywords:["embarrassing"],char:'🕳',fitzpatrick_scale:false,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:'💊',fitzpatrick_scale:false,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:'💉',fitzpatrick_scale:false,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:'🧬',fitzpatrick_scale:false,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:'🦠',fitzpatrick_scale:false,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:'🧫',fitzpatrick_scale:false,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:'🧪',fitzpatrick_scale:false,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:'🌡',fitzpatrick_scale:false,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:'🧹',fitzpatrick_scale:false,category:"objects"},basket:{keywords:["laundry"],char:'🧺',fitzpatrick_scale:false,category:"objects"},toilet_paper:{keywords:["roll"],char:'🧻',fitzpatrick_scale:false,category:"objects"},label:{keywords:["sale","tag"],char:'🏷',fitzpatrick_scale:false,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:'🔖',fitzpatrick_scale:false,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:'🚽',fitzpatrick_scale:false,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:'🚿',fitzpatrick_scale:false,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:'🛁',fitzpatrick_scale:false,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:'🧼',fitzpatrick_scale:false,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:'🧽',fitzpatrick_scale:false,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:'🧴',fitzpatrick_scale:false,category:"objects"},key:{keywords:["lock","door","password"],char:'🔑',fitzpatrick_scale:false,category:"objects"},old_key:{keywords:["lock","door","password"],char:'🗝',fitzpatrick_scale:false,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:'🛋',fitzpatrick_scale:false,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:'🛌',fitzpatrick_scale:true,category:"objects"},bed:{keywords:["sleep","rest"],char:'🛏',fitzpatrick_scale:false,category:"objects"},door:{keywords:["house","entry","exit"],char:'🚪',fitzpatrick_scale:false,category:"objects"},bellhop_bell:{keywords:["service"],char:'🛎',fitzpatrick_scale:false,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:'🧸',fitzpatrick_scale:false,category:"objects"},framed_picture:{keywords:["photography"],char:'🖼',fitzpatrick_scale:false,category:"objects"},world_map:{keywords:["location","direction"],char:'🗺',fitzpatrick_scale:false,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:'⛱',fitzpatrick_scale:false,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:'🗿',fitzpatrick_scale:false,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:'🛍',fitzpatrick_scale:false,category:"objects"},shopping_cart:{keywords:["trolley"],char:'🛒',fitzpatrick_scale:false,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:'🎈',fitzpatrick_scale:false,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:'🎏',fitzpatrick_scale:false,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:'🎀',fitzpatrick_scale:false,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:'🎁',fitzpatrick_scale:false,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:'🎊',fitzpatrick_scale:false,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:'🎉',fitzpatrick_scale:false,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:'🎎',fitzpatrick_scale:false,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:'🎐',fitzpatrick_scale:false,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:'🎌',fitzpatrick_scale:false,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:'🏮',fitzpatrick_scale:false,category:"objects"},red_envelope:{keywords:["gift"],char:'🧧',fitzpatrick_scale:false,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:'✉️',fitzpatrick_scale:false,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:'📩',fitzpatrick_scale:false,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:'📨',fitzpatrick_scale:false,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:'📧',fitzpatrick_scale:false,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:'💌',fitzpatrick_scale:false,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:'📮',fitzpatrick_scale:false,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:'📪',fitzpatrick_scale:false,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:'📫',fitzpatrick_scale:false,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:'📬',fitzpatrick_scale:false,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:'📭',fitzpatrick_scale:false,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:'📦',fitzpatrick_scale:false,category:"objects"},postal_horn:{keywords:["instrument","music"],char:'📯',fitzpatrick_scale:false,category:"objects"},inbox_tray:{keywords:["email","documents"],char:'📥',fitzpatrick_scale:false,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:'📤',fitzpatrick_scale:false,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:'📜',fitzpatrick_scale:false,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:'📃',fitzpatrick_scale:false,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:'📑',fitzpatrick_scale:false,category:"objects"},receipt:{keywords:["accounting","expenses"],char:'🧾',fitzpatrick_scale:false,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:'📊',fitzpatrick_scale:false,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:'📈',fitzpatrick_scale:false,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:'📉',fitzpatrick_scale:false,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:'📄',fitzpatrick_scale:false,category:"objects"},date:{keywords:["calendar","schedule"],char:'📅',fitzpatrick_scale:false,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:'📆',fitzpatrick_scale:false,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:'🗓',fitzpatrick_scale:false,category:"objects"},card_index:{keywords:["business","stationery"],char:'📇',fitzpatrick_scale:false,category:"objects"},card_file_box:{keywords:["business","stationery"],char:'🗃',fitzpatrick_scale:false,category:"objects"},ballot_box:{keywords:["election","vote"],char:'🗳',fitzpatrick_scale:false,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:'🗄',fitzpatrick_scale:false,category:"objects"},clipboard:{keywords:["stationery","documents"],char:'📋',fitzpatrick_scale:false,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:'🗒',fitzpatrick_scale:false,category:"objects"},file_folder:{keywords:["documents","business","office"],char:'📁',fitzpatrick_scale:false,category:"objects"},open_file_folder:{keywords:["documents","load"],char:'📂',fitzpatrick_scale:false,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:'🗂',fitzpatrick_scale:false,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:'🗞',fitzpatrick_scale:false,category:"objects"},newspaper:{keywords:["press","headline"],char:'📰',fitzpatrick_scale:false,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:'📓',fitzpatrick_scale:false,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:'📕',fitzpatrick_scale:false,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:'📗',fitzpatrick_scale:false,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:'📘',fitzpatrick_scale:false,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:'📙',fitzpatrick_scale:false,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:'📔',fitzpatrick_scale:false,category:"objects"},ledger:{keywords:["notes","paper"],char:'📒',fitzpatrick_scale:false,category:"objects"},books:{keywords:["literature","library","study"],char:'📚',fitzpatrick_scale:false,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:'📖',fitzpatrick_scale:false,category:"objects"},safety_pin:{keywords:["diaper"],char:'🧷',fitzpatrick_scale:false,category:"objects"},link:{keywords:["rings","url"],char:'🔗',fitzpatrick_scale:false,category:"objects"},paperclip:{keywords:["documents","stationery"],char:'📎',fitzpatrick_scale:false,category:"objects"},paperclips:{keywords:["documents","stationery"],char:'🖇',fitzpatrick_scale:false,category:"objects"},scissors:{keywords:["stationery","cut"],char:'✂️',fitzpatrick_scale:false,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:'📐',fitzpatrick_scale:false,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:'📏',fitzpatrick_scale:false,category:"objects"},abacus:{keywords:["calculation"],char:'🧮',fitzpatrick_scale:false,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:'📌',fitzpatrick_scale:false,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:'📍',fitzpatrick_scale:false,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:'🚩',fitzpatrick_scale:false,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:'🏳',fitzpatrick_scale:false,category:"objects"},black_flag:{keywords:["pirate"],char:'🏴',fitzpatrick_scale:false,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:'🏳️‍🌈',fitzpatrick_scale:false,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:'🔐',fitzpatrick_scale:false,category:"objects"},lock:{keywords:["security","password","padlock"],char:'🔒',fitzpatrick_scale:false,category:"objects"},unlock:{keywords:["privacy","security"],char:'🔓',fitzpatrick_scale:false,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:'🔏',fitzpatrick_scale:false,category:"objects"},pen:{keywords:["stationery","writing","write"],char:'🖊',fitzpatrick_scale:false,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:'🖋',fitzpatrick_scale:false,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:'✒️',fitzpatrick_scale:false,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:'📝',fitzpatrick_scale:false,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:'✏️',fitzpatrick_scale:false,category:"objects"},crayon:{keywords:["drawing","creativity"],char:'🖍',fitzpatrick_scale:false,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:'🖌',fitzpatrick_scale:false,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:'🔍',fitzpatrick_scale:false,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:'🔎',fitzpatrick_scale:false,category:"objects"},heart:{keywords:["love","like","valentines"],char:'❤️',fitzpatrick_scale:false,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:'🧡',fitzpatrick_scale:false,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:'💛',fitzpatrick_scale:false,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:'💚',fitzpatrick_scale:false,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:'💙',fitzpatrick_scale:false,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:'💜',fitzpatrick_scale:false,category:"symbols"},black_heart:{keywords:["evil"],char:'🖤',fitzpatrick_scale:false,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:'💔',fitzpatrick_scale:false,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:'❣',fitzpatrick_scale:false,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:'💕',fitzpatrick_scale:false,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:'💞',fitzpatrick_scale:false,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:'💓',fitzpatrick_scale:false,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:'💗',fitzpatrick_scale:false,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:'💖',fitzpatrick_scale:false,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:'💘',fitzpatrick_scale:false,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:'💝',fitzpatrick_scale:false,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:'💟',fitzpatrick_scale:false,category:"symbols"},peace_symbol:{keywords:["hippie"],char:'☮',fitzpatrick_scale:false,category:"symbols"},latin_cross:{keywords:["christianity"],char:'✝',fitzpatrick_scale:false,category:"symbols"},star_and_crescent:{keywords:["islam"],char:'☪',fitzpatrick_scale:false,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'🕉',fitzpatrick_scale:false,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'☸',fitzpatrick_scale:false,category:"symbols"},star_of_david:{keywords:["judaism"],char:'✡',fitzpatrick_scale:false,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:'🔯',fitzpatrick_scale:false,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:'🕎',fitzpatrick_scale:false,category:"symbols"},yin_yang:{keywords:["balance"],char:'☯',fitzpatrick_scale:false,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:'☦',fitzpatrick_scale:false,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:'🛐',fitzpatrick_scale:false,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:'⛎',fitzpatrick_scale:false,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:'♈',fitzpatrick_scale:false,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:'♉',fitzpatrick_scale:false,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:'♊',fitzpatrick_scale:false,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:'♋',fitzpatrick_scale:false,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:'♌',fitzpatrick_scale:false,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:'♍',fitzpatrick_scale:false,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:'♎',fitzpatrick_scale:false,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:'♏',fitzpatrick_scale:false,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:'♐',fitzpatrick_scale:false,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:'♑',fitzpatrick_scale:false,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:'♒',fitzpatrick_scale:false,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:'♓',fitzpatrick_scale:false,category:"symbols"},id:{keywords:["purple-square","words"],char:'🆔',fitzpatrick_scale:false,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:'⚛',fitzpatrick_scale:false,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:'🈳',fitzpatrick_scale:false,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:'🈹',fitzpatrick_scale:false,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:'☢',fitzpatrick_scale:false,category:"symbols"},biohazard:{keywords:["danger"],char:'☣',fitzpatrick_scale:false,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:'📴',fitzpatrick_scale:false,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:'📳',fitzpatrick_scale:false,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:'🈶',fitzpatrick_scale:false,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:'🈚',fitzpatrick_scale:false,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:'🈸',fitzpatrick_scale:false,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:'🈺',fitzpatrick_scale:false,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:'🈷️',fitzpatrick_scale:false,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:'✴️',fitzpatrick_scale:false,category:"symbols"},vs:{keywords:["words","orange-square"],char:'🆚',fitzpatrick_scale:false,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:'🉑',fitzpatrick_scale:false,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:'💮',fitzpatrick_scale:false,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:'🉐',fitzpatrick_scale:false,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:'㊙️',fitzpatrick_scale:false,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:'㊗️',fitzpatrick_scale:false,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:'🈴',fitzpatrick_scale:false,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:'🈵',fitzpatrick_scale:false,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:'🈲',fitzpatrick_scale:false,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:'🅰️',fitzpatrick_scale:false,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:'🅱️',fitzpatrick_scale:false,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:'🆎',fitzpatrick_scale:false,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:'🆑',fitzpatrick_scale:false,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:'🅾️',fitzpatrick_scale:false,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:'🆘',fitzpatrick_scale:false,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:'⛔',fitzpatrick_scale:false,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:'📛',fitzpatrick_scale:false,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:'🚫',fitzpatrick_scale:false,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:'❌',fitzpatrick_scale:false,category:"symbols"},o:{keywords:["circle","round"],char:'⭕',fitzpatrick_scale:false,category:"symbols"},stop_sign:{keywords:["stop"],char:'🛑',fitzpatrick_scale:false,category:"symbols"},anger:{keywords:["angry","mad"],char:'💢',fitzpatrick_scale:false,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:'♨️',fitzpatrick_scale:false,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:'🚷',fitzpatrick_scale:false,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:'🚯',fitzpatrick_scale:false,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:'🚳',fitzpatrick_scale:false,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:'🚱',fitzpatrick_scale:false,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:'🔞',fitzpatrick_scale:false,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:'📵',fitzpatrick_scale:false,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:'❗',fitzpatrick_scale:false,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:'❕',fitzpatrick_scale:false,category:"symbols"},question:{keywords:["doubt","confused"],char:'❓',fitzpatrick_scale:false,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:'❔',fitzpatrick_scale:false,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:'‼️',fitzpatrick_scale:false,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:'⁉️',fitzpatrick_scale:false,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:'🔅',fitzpatrick_scale:false,category:"symbols"},high_brightness:{keywords:["sun","light"],char:'🔆',fitzpatrick_scale:false,category:"symbols"},trident:{keywords:["weapon","spear"],char:'🔱',fitzpatrick_scale:false,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:'⚜',fitzpatrick_scale:false,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:'〽️',fitzpatrick_scale:false,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:'⚠️',fitzpatrick_scale:false,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:'🚸',fitzpatrick_scale:false,category:"symbols"},beginner:{keywords:["badge","shield"],char:'🔰',fitzpatrick_scale:false,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:'♻️',fitzpatrick_scale:false,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:'🈯',fitzpatrick_scale:false,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:'💹',fitzpatrick_scale:false,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:'❇️',fitzpatrick_scale:false,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:'✳️',fitzpatrick_scale:false,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:'❎',fitzpatrick_scale:false,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:'✅',fitzpatrick_scale:false,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:'💠',fitzpatrick_scale:false,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:'🌀',fitzpatrick_scale:false,category:"symbols"},loop:{keywords:["tape","cassette"],char:'➿',fitzpatrick_scale:false,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:'🌐',fitzpatrick_scale:false,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:'Ⓜ️',fitzpatrick_scale:false,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:'🏧',fitzpatrick_scale:false,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:'🈂️',fitzpatrick_scale:false,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:'🛂',fitzpatrick_scale:false,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:'🛃',fitzpatrick_scale:false,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:'🛄',fitzpatrick_scale:false,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:'🛅',fitzpatrick_scale:false,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:'♿',fitzpatrick_scale:false,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:'🚭',fitzpatrick_scale:false,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:'🚾',fitzpatrick_scale:false,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:'🅿️',fitzpatrick_scale:false,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:'🚰',fitzpatrick_scale:false,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:'🚹',fitzpatrick_scale:false,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:'🚺',fitzpatrick_scale:false,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:'🚼',fitzpatrick_scale:false,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:'🚻',fitzpatrick_scale:false,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:'🚮',fitzpatrick_scale:false,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:'🎦',fitzpatrick_scale:false,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:'📶',fitzpatrick_scale:false,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:'🈁',fitzpatrick_scale:false,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:'🆖',fitzpatrick_scale:false,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:'🆗',fitzpatrick_scale:false,category:"symbols"},up:{keywords:["blue-square","above","high"],char:'🆙',fitzpatrick_scale:false,category:"symbols"},cool:{keywords:["words","blue-square"],char:'🆒',fitzpatrick_scale:false,category:"symbols"},new:{keywords:["blue-square","words","start"],char:'🆕',fitzpatrick_scale:false,category:"symbols"},free:{keywords:["blue-square","words"],char:'🆓',fitzpatrick_scale:false,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:'0️⃣',fitzpatrick_scale:false,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:'1️⃣',fitzpatrick_scale:false,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:'2️⃣',fitzpatrick_scale:false,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:'3️⃣',fitzpatrick_scale:false,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:'4️⃣',fitzpatrick_scale:false,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:'5️⃣',fitzpatrick_scale:false,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:'6️⃣',fitzpatrick_scale:false,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:'7️⃣',fitzpatrick_scale:false,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:'8️⃣',fitzpatrick_scale:false,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:'9️⃣',fitzpatrick_scale:false,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:'🔟',fitzpatrick_scale:false,category:"symbols"},asterisk:{keywords:["star","keycap"],char:'*⃣',fitzpatrick_scale:false,category:"symbols"},eject_button:{keywords:["blue-square"],char:'⏏️',fitzpatrick_scale:false,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:'▶️',fitzpatrick_scale:false,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:'⏸',fitzpatrick_scale:false,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:'⏭',fitzpatrick_scale:false,category:"symbols"},stop_button:{keywords:["blue-square"],char:'⏹',fitzpatrick_scale:false,category:"symbols"},record_button:{keywords:["blue-square"],char:'⏺',fitzpatrick_scale:false,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:'⏯',fitzpatrick_scale:false,category:"symbols"},previous_track_button:{keywords:["backward"],char:'⏮',fitzpatrick_scale:false,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:'⏩',fitzpatrick_scale:false,category:"symbols"},rewind:{keywords:["play","blue-square"],char:'⏪',fitzpatrick_scale:false,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:'🔀',fitzpatrick_scale:false,category:"symbols"},repeat:{keywords:["loop","record"],char:'🔁',fitzpatrick_scale:false,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:'🔂',fitzpatrick_scale:false,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:'◀️',fitzpatrick_scale:false,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:'🔼',fitzpatrick_scale:false,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:'🔽',fitzpatrick_scale:false,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:'⏫',fitzpatrick_scale:false,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:'⏬',fitzpatrick_scale:false,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:'➡️',fitzpatrick_scale:false,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:'⬅️',fitzpatrick_scale:false,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:'⬆️',fitzpatrick_scale:false,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:'⬇️',fitzpatrick_scale:false,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:'↗️',fitzpatrick_scale:false,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:'↘️',fitzpatrick_scale:false,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:'↙️',fitzpatrick_scale:false,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:'↖️',fitzpatrick_scale:false,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:'↕️',fitzpatrick_scale:false,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:'↔️',fitzpatrick_scale:false,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:'🔄',fitzpatrick_scale:false,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:'↪️',fitzpatrick_scale:false,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:'↩️',fitzpatrick_scale:false,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:'⤴️',fitzpatrick_scale:false,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:'⤵️',fitzpatrick_scale:false,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:'#️⃣',fitzpatrick_scale:false,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:'ℹ️',fitzpatrick_scale:false,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:'🔤',fitzpatrick_scale:false,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:'🔡',fitzpatrick_scale:false,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:'🔠',fitzpatrick_scale:false,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:'🔣',fitzpatrick_scale:false,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:'🎵',fitzpatrick_scale:false,category:"symbols"},notes:{keywords:["music","score"],char:'🎶',fitzpatrick_scale:false,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:'〰️',fitzpatrick_scale:false,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:'➰',fitzpatrick_scale:false,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:'✔️',fitzpatrick_scale:false,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:'🔃',fitzpatrick_scale:false,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:'➕',fitzpatrick_scale:false,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:'➖',fitzpatrick_scale:false,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:'➗',fitzpatrick_scale:false,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:'✖️',fitzpatrick_scale:false,category:"symbols"},infinity:{keywords:["forever"],char:'♾',fitzpatrick_scale:false,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:'💲',fitzpatrick_scale:false,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:'💱',fitzpatrick_scale:false,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:'©️',fitzpatrick_scale:false,category:"symbols"},registered:{keywords:["alphabet","circle"],char:'®️',fitzpatrick_scale:false,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:'™️',fitzpatrick_scale:false,category:"symbols"},end:{keywords:["words","arrow"],char:'🔚',fitzpatrick_scale:false,category:"symbols"},back:{keywords:["arrow","words","return"],char:'🔙',fitzpatrick_scale:false,category:"symbols"},on:{keywords:["arrow","words"],char:'🔛',fitzpatrick_scale:false,category:"symbols"},top:{keywords:["words","blue-square"],char:'🔝',fitzpatrick_scale:false,category:"symbols"},soon:{keywords:["arrow","words"],char:'🔜',fitzpatrick_scale:false,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:'☑️',fitzpatrick_scale:false,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:'🔘',fitzpatrick_scale:false,category:"symbols"},white_circle:{keywords:["shape","round"],char:'⚪',fitzpatrick_scale:false,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:'⚫',fitzpatrick_scale:false,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:'🔴',fitzpatrick_scale:false,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:'🔵',fitzpatrick_scale:false,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:'🔸',fitzpatrick_scale:false,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:'🔹',fitzpatrick_scale:false,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:'🔶',fitzpatrick_scale:false,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:'🔷',fitzpatrick_scale:false,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:'🔺',fitzpatrick_scale:false,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:'▪️',fitzpatrick_scale:false,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:'▫️',fitzpatrick_scale:false,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:'⬛',fitzpatrick_scale:false,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:'⬜',fitzpatrick_scale:false,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:'🔻',fitzpatrick_scale:false,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:'◼️',fitzpatrick_scale:false,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:'◻️',fitzpatrick_scale:false,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:'◾',fitzpatrick_scale:false,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:'◽',fitzpatrick_scale:false,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:'🔲',fitzpatrick_scale:false,category:"symbols"},white_square_button:{keywords:["shape","input"],char:'🔳',fitzpatrick_scale:false,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:'🔈',fitzpatrick_scale:false,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:'🔉',fitzpatrick_scale:false,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:'🔊',fitzpatrick_scale:false,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:'🔇',fitzpatrick_scale:false,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:'📣',fitzpatrick_scale:false,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:'📢',fitzpatrick_scale:false,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:'🔔',fitzpatrick_scale:false,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:'🔕',fitzpatrick_scale:false,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:'🃏',fitzpatrick_scale:false,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:'🀄',fitzpatrick_scale:false,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:'♠️',fitzpatrick_scale:false,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:'♣️',fitzpatrick_scale:false,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:'♥️',fitzpatrick_scale:false,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:'♦️',fitzpatrick_scale:false,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:'🎴',fitzpatrick_scale:false,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:'💭',fitzpatrick_scale:false,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:'🗯',fitzpatrick_scale:false,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:'💬',fitzpatrick_scale:false,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:'🗨',fitzpatrick_scale:false,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:'🕐',fitzpatrick_scale:false,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:'🕑',fitzpatrick_scale:false,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:'🕒',fitzpatrick_scale:false,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:'🕓',fitzpatrick_scale:false,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:'🕔',fitzpatrick_scale:false,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:'🕕',fitzpatrick_scale:false,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:'🕖',fitzpatrick_scale:false,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:'🕗',fitzpatrick_scale:false,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:'🕘',fitzpatrick_scale:false,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:'🕙',fitzpatrick_scale:false,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:'🕚',fitzpatrick_scale:false,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:'🕛',fitzpatrick_scale:false,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:'🕜',fitzpatrick_scale:false,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:'🕝',fitzpatrick_scale:false,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:'🕞',fitzpatrick_scale:false,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:'🕟',fitzpatrick_scale:false,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:'🕠',fitzpatrick_scale:false,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:'🕡',fitzpatrick_scale:false,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:'🕢',fitzpatrick_scale:false,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:'🕣',fitzpatrick_scale:false,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:'🕤',fitzpatrick_scale:false,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:'🕥',fitzpatrick_scale:false,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:'🕦',fitzpatrick_scale:false,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:'🕧',fitzpatrick_scale:false,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:'🇦🇫',fitzpatrick_scale:false,category:"flags"},aland_islands:{keywords:["Åland","islands","flag","nation","country","banner"],char:'🇦🇽',fitzpatrick_scale:false,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:'🇦🇱',fitzpatrick_scale:false,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:'🇩🇿',fitzpatrick_scale:false,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:'🇦🇸',fitzpatrick_scale:false,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:'🇦🇩',fitzpatrick_scale:false,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:'🇦🇴',fitzpatrick_scale:false,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:'🇦🇮',fitzpatrick_scale:false,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:'🇦🇶',fitzpatrick_scale:false,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:'🇦🇬',fitzpatrick_scale:false,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:'🇦🇷',fitzpatrick_scale:false,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:'🇦🇲',fitzpatrick_scale:false,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:'🇦🇼',fitzpatrick_scale:false,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:'🇦🇺',fitzpatrick_scale:false,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:'🇦🇹',fitzpatrick_scale:false,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:'🇦🇿',fitzpatrick_scale:false,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:'🇧🇸',fitzpatrick_scale:false,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:'🇧🇭',fitzpatrick_scale:false,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:'🇧🇩',fitzpatrick_scale:false,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:'🇧🇧',fitzpatrick_scale:false,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:'🇧🇾',fitzpatrick_scale:false,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:'🇧🇪',fitzpatrick_scale:false,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:'🇧🇿',fitzpatrick_scale:false,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:'🇧🇯',fitzpatrick_scale:false,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:'🇧🇲',fitzpatrick_scale:false,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:'🇧🇹',fitzpatrick_scale:false,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:'🇧🇴',fitzpatrick_scale:false,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:'🇧🇶',fitzpatrick_scale:false,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:'🇧🇦',fitzpatrick_scale:false,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:'🇧🇼',fitzpatrick_scale:false,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:'🇧🇷',fitzpatrick_scale:false,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:'🇮🇴',fitzpatrick_scale:false,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:'🇻🇬',fitzpatrick_scale:false,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:'🇧🇳',fitzpatrick_scale:false,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:'🇧🇬',fitzpatrick_scale:false,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:'🇧🇫',fitzpatrick_scale:false,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:'🇧🇮',fitzpatrick_scale:false,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:'🇨🇻',fitzpatrick_scale:false,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:'🇰🇭',fitzpatrick_scale:false,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:'🇨🇲',fitzpatrick_scale:false,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:'🇨🇦',fitzpatrick_scale:false,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:'🇮🇨',fitzpatrick_scale:false,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:'🇰🇾',fitzpatrick_scale:false,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:'🇨🇫',fitzpatrick_scale:false,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:'🇹🇩',fitzpatrick_scale:false,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:'🇨🇱',fitzpatrick_scale:false,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:'🇨🇳',fitzpatrick_scale:false,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:'🇨🇽',fitzpatrick_scale:false,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:'🇨🇨',fitzpatrick_scale:false,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:'🇨🇴',fitzpatrick_scale:false,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:'🇰🇲',fitzpatrick_scale:false,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:'🇨🇬',fitzpatrick_scale:false,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:'🇨🇩',fitzpatrick_scale:false,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:'🇨🇰',fitzpatrick_scale:false,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:'🇨🇷',fitzpatrick_scale:false,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:'🇭🇷',fitzpatrick_scale:false,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:'🇨🇺',fitzpatrick_scale:false,category:"flags"},curacao:{keywords:["curaçao","flag","nation","country","banner"],char:'🇨🇼',fitzpatrick_scale:false,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:'🇨🇾',fitzpatrick_scale:false,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:'🇨🇿',fitzpatrick_scale:false,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:'🇩🇰',fitzpatrick_scale:false,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:'🇩🇯',fitzpatrick_scale:false,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:'🇩🇲',fitzpatrick_scale:false,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:'🇩🇴',fitzpatrick_scale:false,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:'🇪🇨',fitzpatrick_scale:false,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:'🇪🇬',fitzpatrick_scale:false,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:'🇸🇻',fitzpatrick_scale:false,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:'🇬🇶',fitzpatrick_scale:false,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:'🇪🇷',fitzpatrick_scale:false,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:'🇪🇪',fitzpatrick_scale:false,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:'🇪🇹',fitzpatrick_scale:false,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:'🇪🇺',fitzpatrick_scale:false,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:'🇫🇰',fitzpatrick_scale:false,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:'🇫🇴',fitzpatrick_scale:false,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:'🇫🇯',fitzpatrick_scale:false,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:'🇫🇮',fitzpatrick_scale:false,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:'🇫🇷',fitzpatrick_scale:false,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:'🇬🇫',fitzpatrick_scale:false,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:'🇵🇫',fitzpatrick_scale:false,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:'🇹🇫',fitzpatrick_scale:false,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:'🇬🇦',fitzpatrick_scale:false,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:'🇬🇲',fitzpatrick_scale:false,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:'🇬🇪',fitzpatrick_scale:false,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:'🇩🇪',fitzpatrick_scale:false,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:'🇬🇭',fitzpatrick_scale:false,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:'🇬🇮',fitzpatrick_scale:false,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:'🇬🇷',fitzpatrick_scale:false,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:'🇬🇱',fitzpatrick_scale:false,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:'🇬🇩',fitzpatrick_scale:false,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:'🇬🇵',fitzpatrick_scale:false,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:'🇬🇺',fitzpatrick_scale:false,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:'🇬🇹',fitzpatrick_scale:false,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:'🇬🇬',fitzpatrick_scale:false,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:'🇬🇳',fitzpatrick_scale:false,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:'🇬🇼',fitzpatrick_scale:false,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:'🇬🇾',fitzpatrick_scale:false,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:'🇭🇹',fitzpatrick_scale:false,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:'🇭🇳',fitzpatrick_scale:false,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:'🇭🇰',fitzpatrick_scale:false,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:'🇭🇺',fitzpatrick_scale:false,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:'🇮🇸',fitzpatrick_scale:false,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:'🇮🇳',fitzpatrick_scale:false,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:'🇮🇩',fitzpatrick_scale:false,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:'🇮🇷',fitzpatrick_scale:false,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:'🇮🇶',fitzpatrick_scale:false,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:'🇮🇪',fitzpatrick_scale:false,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:'🇮🇲',fitzpatrick_scale:false,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:'🇮🇱',fitzpatrick_scale:false,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:'🇮🇹',fitzpatrick_scale:false,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:'🇨🇮',fitzpatrick_scale:false,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:'🇯🇲',fitzpatrick_scale:false,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:'🇯🇵',fitzpatrick_scale:false,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:'🇯🇪',fitzpatrick_scale:false,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:'🇯🇴',fitzpatrick_scale:false,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:'🇰🇿',fitzpatrick_scale:false,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:'🇰🇪',fitzpatrick_scale:false,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:'🇰🇮',fitzpatrick_scale:false,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:'🇽🇰',fitzpatrick_scale:false,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:'🇰🇼',fitzpatrick_scale:false,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:'🇰🇬',fitzpatrick_scale:false,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:'🇱🇦',fitzpatrick_scale:false,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:'🇱🇻',fitzpatrick_scale:false,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:'🇱🇧',fitzpatrick_scale:false,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:'🇱🇸',fitzpatrick_scale:false,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:'🇱🇷',fitzpatrick_scale:false,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:'🇱🇾',fitzpatrick_scale:false,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:'🇱🇮',fitzpatrick_scale:false,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:'🇱🇹',fitzpatrick_scale:false,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:'🇱🇺',fitzpatrick_scale:false,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:'🇲🇴',fitzpatrick_scale:false,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:'🇲🇰',fitzpatrick_scale:false,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:'🇲🇬',fitzpatrick_scale:false,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:'🇲🇼',fitzpatrick_scale:false,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:'🇲🇾',fitzpatrick_scale:false,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:'🇲🇻',fitzpatrick_scale:false,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:'🇲🇱',fitzpatrick_scale:false,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:'🇲🇹',fitzpatrick_scale:false,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:'🇲🇭',fitzpatrick_scale:false,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:'🇲🇶',fitzpatrick_scale:false,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:'🇲🇷',fitzpatrick_scale:false,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:'🇲🇺',fitzpatrick_scale:false,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:'🇾🇹',fitzpatrick_scale:false,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:'🇲🇽',fitzpatrick_scale:false,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:'🇫🇲',fitzpatrick_scale:false,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:'🇲🇩',fitzpatrick_scale:false,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:'🇲🇨',fitzpatrick_scale:false,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:'🇲🇳',fitzpatrick_scale:false,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:'🇲🇪',fitzpatrick_scale:false,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:'🇲🇸',fitzpatrick_scale:false,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:'🇲🇦',fitzpatrick_scale:false,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:'🇲🇿',fitzpatrick_scale:false,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:'🇲🇲',fitzpatrick_scale:false,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:'🇳🇦',fitzpatrick_scale:false,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:'🇳🇷',fitzpatrick_scale:false,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:'🇳🇵',fitzpatrick_scale:false,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:'🇳🇱',fitzpatrick_scale:false,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:'🇳🇨',fitzpatrick_scale:false,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:'🇳🇿',fitzpatrick_scale:false,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:'🇳🇮',fitzpatrick_scale:false,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:'🇳🇪',fitzpatrick_scale:false,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:'🇳🇬',fitzpatrick_scale:false,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:'🇳🇺',fitzpatrick_scale:false,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:'🇳🇫',fitzpatrick_scale:false,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:'🇲🇵',fitzpatrick_scale:false,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:'🇰🇵',fitzpatrick_scale:false,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:'🇳🇴',fitzpatrick_scale:false,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:'🇴🇲',fitzpatrick_scale:false,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:'🇵🇰',fitzpatrick_scale:false,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:'🇵🇼',fitzpatrick_scale:false,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:'🇵🇸',fitzpatrick_scale:false,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:'🇵🇦',fitzpatrick_scale:false,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:'🇵🇬',fitzpatrick_scale:false,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:'🇵🇾',fitzpatrick_scale:false,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:'🇵🇪',fitzpatrick_scale:false,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:'🇵🇭',fitzpatrick_scale:false,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:'🇵🇳',fitzpatrick_scale:false,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:'🇵🇱',fitzpatrick_scale:false,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:'🇵🇹',fitzpatrick_scale:false,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:'🇵🇷',fitzpatrick_scale:false,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:'🇶🇦',fitzpatrick_scale:false,category:"flags"},reunion:{keywords:["réunion","flag","nation","country","banner"],char:'🇷🇪',fitzpatrick_scale:false,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:'🇷🇴',fitzpatrick_scale:false,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:'🇷🇺',fitzpatrick_scale:false,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:'🇷🇼',fitzpatrick_scale:false,category:"flags"},st_barthelemy:{keywords:["saint","barthélemy","flag","nation","country","banner"],char:'🇧🇱',fitzpatrick_scale:false,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:'🇸🇭',fitzpatrick_scale:false,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:'🇰🇳',fitzpatrick_scale:false,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:'🇱🇨',fitzpatrick_scale:false,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:'🇵🇲',fitzpatrick_scale:false,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:'🇻🇨',fitzpatrick_scale:false,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:'🇼🇸',fitzpatrick_scale:false,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:'🇸🇲',fitzpatrick_scale:false,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:'🇸🇹',fitzpatrick_scale:false,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:'🇸🇦',fitzpatrick_scale:false,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:'🇸🇳',fitzpatrick_scale:false,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:'🇷🇸',fitzpatrick_scale:false,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:'🇸🇨',fitzpatrick_scale:false,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:'🇸🇱',fitzpatrick_scale:false,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:'🇸🇬',fitzpatrick_scale:false,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:'🇸🇽',fitzpatrick_scale:false,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:'🇸🇰',fitzpatrick_scale:false,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:'🇸🇮',fitzpatrick_scale:false,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:'🇸🇧',fitzpatrick_scale:false,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:'🇸🇴',fitzpatrick_scale:false,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:'🇿🇦',fitzpatrick_scale:false,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:'🇬🇸',fitzpatrick_scale:false,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:'🇰🇷',fitzpatrick_scale:false,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:'🇸🇸',fitzpatrick_scale:false,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:'🇪🇸',fitzpatrick_scale:false,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:'🇱🇰',fitzpatrick_scale:false,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:'🇸🇩',fitzpatrick_scale:false,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:'🇸🇷',fitzpatrick_scale:false,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:'🇸🇿',fitzpatrick_scale:false,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:'🇸🇪',fitzpatrick_scale:false,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:'🇨🇭',fitzpatrick_scale:false,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:'🇸🇾',fitzpatrick_scale:false,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:'🇹🇼',fitzpatrick_scale:false,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:'🇹🇯',fitzpatrick_scale:false,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:'🇹🇿',fitzpatrick_scale:false,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:'🇹🇭',fitzpatrick_scale:false,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:'🇹🇱',fitzpatrick_scale:false,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:'🇹🇬',fitzpatrick_scale:false,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:'🇹🇰',fitzpatrick_scale:false,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:'🇹🇴',fitzpatrick_scale:false,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:'🇹🇹',fitzpatrick_scale:false,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:'🇹🇳',fitzpatrick_scale:false,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:'🇹🇷',fitzpatrick_scale:false,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:'🇹🇲',fitzpatrick_scale:false,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:'🇹🇨',fitzpatrick_scale:false,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:'🇹🇻',fitzpatrick_scale:false,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:'🇺🇬',fitzpatrick_scale:false,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:'🇺🇦',fitzpatrick_scale:false,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:'🇦🇪',fitzpatrick_scale:false,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:'🇬🇧',fitzpatrick_scale:false,category:"flags"},england:{keywords:["flag","english"],char:'🏴󠁧󠁢󠁥󠁮󠁧󠁿',fitzpatrick_scale:false,category:"flags"},scotland:{keywords:["flag","scottish"],char:'🏴󠁧󠁢󠁳󠁣󠁴󠁿',fitzpatrick_scale:false,category:"flags"},wales:{keywords:["flag","welsh"],char:'🏴󠁧󠁢󠁷󠁬󠁳󠁿',fitzpatrick_scale:false,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:'🇺🇸',fitzpatrick_scale:false,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:'🇻🇮',fitzpatrick_scale:false,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:'🇺🇾',fitzpatrick_scale:false,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:'🇺🇿',fitzpatrick_scale:false,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:'🇻🇺',fitzpatrick_scale:false,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:'🇻🇦',fitzpatrick_scale:false,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:'🇻🇪',fitzpatrick_scale:false,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:'🇻🇳',fitzpatrick_scale:false,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:'🇼🇫',fitzpatrick_scale:false,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:'🇪🇭',fitzpatrick_scale:false,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:'🇾🇪',fitzpatrick_scale:false,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:'🇿🇲',fitzpatrick_scale:false,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:'🇿🇼',fitzpatrick_scale:false,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:'🇺🇳',fitzpatrick_scale:false,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:'🏴‍☠️',fitzpatrick_scale:false,category:"flags"}}); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojiimages.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojiimages.min.js new file mode 100644 index 0000000000..37f3bcf83f --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojiimages.min.js @@ -0,0 +1,3 @@ +// Source: npm package: emojilib +// Images provided by twemoji: https://github.com/twitter/twemoji +window.tinymce.Resource.add("tinymce.plugins.emoticons",{100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:'\u{1f4af}',fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:'\u{1f522}',fitzpatrick_scale:!1,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:'\u{1f600}',fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:'\u{1f62c}',fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:'\u{1f601}',fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:'\u{1f602}',fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:'\u{1f923}',fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:'\u{1f973}',fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:'\u{1f603}',fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:'\u{1f604}',fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:'\u{1f605}',fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:'\u{1f606}',fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:'\u{1f607}',fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:'\u{1f609}',fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:'\u{1f60a}',fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:'\u{1f642}',fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:'\u{1f643}',fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:'\u263a\ufe0f',fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:'\u{1f60b}',fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:'\u{1f60c}',fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:'\u{1f60d}',fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:'\u{1f970}',fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'\u{1f618}',fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:'\u{1f617}',fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:'\u{1f619}',fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'\u{1f61a}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:'\u{1f61c}',fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],char:'\u{1f92a}',fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:'\u{1f928}',fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:'\u{1f9d0}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:'\u{1f61d}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:'\u{1f61b}',fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:'\u{1f911}',fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:'\u{1f913}',fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:'\u{1f60e}',fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:'\u{1f929}',fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],char:'\u{1f921}',fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:'\u{1f920}',fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],char:'\u{1f917}',fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:'\u{1f60f}',fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:'\u{1f636}',fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:'\u{1f610}',fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:'\u{1f611}',fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:'\u{1f612}',fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:'\u{1f644}',fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:'\u{1f914}',fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:'\u{1f925}',fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:'\u{1f92d}',fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:'\u{1f92b}',fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:'\u{1f92c}',fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:'\u{1f92f}',fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:'\u{1f633}',fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:'\u{1f61e}',fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:'\u{1f61f}',fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:'\u{1f620}',fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:'\u{1f621}',fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:'\u{1f614}',fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:'\u{1f615}',fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:'\u{1f641}',fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:'\u2639',fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:'\u{1f623}',fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:'\u{1f616}',fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:'\u{1f62b}',fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:'\u{1f629}',fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],char:'\u{1f97a}',fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:'\u{1f624}',fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:'\u{1f62e}',fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:'\u{1f631}',fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:'\u{1f628}',fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:'\u{1f630}',fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],char:'\u{1f62f}',fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],char:'\u{1f626}',fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:'\u{1f627}',fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:'\u{1f622}',fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:'\u{1f625}',fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],char:'\u{1f924}',fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:'\u{1f62a}',fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:'\u{1f613}',fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:'\u{1f975}',fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:'\u{1f976}',fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:'\u{1f62d}',fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:'\u{1f635}',fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:'\u{1f632}',fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:'\u{1f910}',fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:'\u{1f922}',fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:'\u{1f927}',fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],char:'\u{1f92e}',fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:'\u{1f637}',fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:'\u{1f912}',fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:'\u{1f915}',fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:'\u{1f974}',fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:'\u{1f634}',fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:'\u{1f4a4}',fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:'\u{1f4a9}',fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],char:'\u{1f608}',fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],char:'\u{1f47f}',fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:'\u{1f479}',fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:'\u{1f47a}',fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:'\u{1f480}',fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:'\u{1f47b}',fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:'\u{1f47d}',fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],char:'\u{1f916}',fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:'\u{1f63a}',fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:'\u{1f638}',fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:'\u{1f639}',fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:'\u{1f63b}',fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:'\u{1f63c}',fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:'\u{1f63d}',fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:'\u{1f640}',fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:'\u{1f63f}',fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],char:'\u{1f63e}',fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:'\u{1f932}',fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:'\u{1f64c}',fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:'\u{1f44f}',fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:'\u{1f44b}',fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:'\u{1f919}',fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:'\u{1f44d}',fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:'\u{1f44e}',fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:'\u{1f44a}',fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:'\u270a',fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],char:'\u{1f91b}',fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],char:'\u{1f91c}',fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:'\u270c',fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:'\u{1f44c}',fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:'\u270b',fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:'\u{1f91a}',fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:'\u{1f450}',fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:'\u{1f4aa}',fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:'\u{1f64f}',fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],char:'\u{1f9b6}',fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],char:'\u{1f9b5}',fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],char:'\u{1f91d}',fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:'\u261d',fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:'\u{1f446}',fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:'\u{1f447}',fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:'\u{1f448}',fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:'\u{1f449}',fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:'\u{1f595}',fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:'\u{1f590}',fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:'\u{1f91f}',fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:'\u{1f918}',fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:'\u{1f91e}',fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:'\u{1f596}',fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:'\u270d',fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],char:'\u{1f933}',fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:'\u{1f485}',fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],char:'\u{1f444}',fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],char:'\u{1f9b7}',fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],char:'\u{1f445}',fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:'\u{1f442}',fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],char:'\u{1f443}',fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:'\u{1f441}',fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:'\u{1f440}',fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],char:'\u{1f9e0}',fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:'\u{1f464}',fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:'\u{1f465}',fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:'\u{1f5e3}',fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:'\u{1f476}',fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],char:'\u{1f9d2}',fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:'\u{1f466}',fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],char:'\u{1f467}',fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],char:'\u{1f9d1}',fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:'\u{1f468}',fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],char:'\u{1f469}',fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:'\u{1f471}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:'\u{1f471}',fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:'\u{1f9d4}',fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:'\u{1f9d3}',fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:'\u{1f474}',fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:'\u{1f475}',fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:'\u{1f472}',fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:'\u{1f9d5}',fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:'\u{1f473}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:'\u{1f473}',fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:'\u{1f46e}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:'\u{1f46e}',fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:'\u{1f477}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:'\u{1f477}',fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:'\u{1f482}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:'\u{1f482}',fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:'\u{1f575}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],char:'\u{1f575}',fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:'\u{1f469}\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:'\u{1f468}\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:'\u{1f469}\u200d\u{1f33e}',fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:'\u{1f468}\u200d\u{1f33e}',fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:'\u{1f469}\u200d\u{1f373}',fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],char:'\u{1f468}\u200d\u{1f373}',fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:'\u{1f469}\u200d\u{1f393}',fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],char:'\u{1f468}\u200d\u{1f393}',fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:'\u{1f469}\u200d\u{1f3a4}',fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:'\u{1f468}\u200d\u{1f3a4}',fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:'\u{1f469}\u200d\u{1f3eb}',fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:'\u{1f468}\u200d\u{1f3eb}',fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:'\u{1f469}\u200d\u{1f3ed}',fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:'\u{1f468}\u200d\u{1f3ed}',fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:'\u{1f469}\u200d\u{1f4bb}',fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:'\u{1f468}\u200d\u{1f4bb}',fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:'\u{1f469}\u200d\u{1f4bc}',fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:'\u{1f468}\u200d\u{1f4bc}',fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:'\u{1f469}\u200d\u{1f527}',fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:'\u{1f468}\u200d\u{1f527}',fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:'\u{1f469}\u200d\u{1f52c}',fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:'\u{1f468}\u200d\u{1f52c}',fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:'\u{1f469}\u200d\u{1f3a8}',fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],char:'\u{1f468}\u200d\u{1f3a8}',fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:'\u{1f469}\u200d\u{1f692}',fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:'\u{1f468}\u200d\u{1f692}',fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:'\u{1f469}\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:'\u{1f468}\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:'\u{1f469}\u200d\u{1f680}',fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:'\u{1f468}\u200d\u{1f680}',fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:'\u{1f469}\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:'\u{1f468}\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:'\u{1f9b8}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:'\u{1f9b8}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:'\u{1f9b9}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:'\u{1f9b9}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:'\u{1f936}',fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:'\u{1f385}',fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:'\u{1f9d9}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:'\u{1f9d9}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],char:'\u{1f9dd}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],char:'\u{1f9dd}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],char:'\u{1f9db}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:'\u{1f9db}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:'\u{1f9df}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:'\u{1f9df}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],char:'\u{1f9de}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],char:'\u{1f9de}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:'\u{1f9dc}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],char:'\u{1f9dc}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],char:'\u{1f9da}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],char:'\u{1f9da}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],char:'\u{1f47c}',fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],char:'\u{1f930}',fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:'\u{1f931}',fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:'\u{1f478}',fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:'\u{1f934}',fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:'\u{1f470}',fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:'\u{1f935}',fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:'\u{1f3c3}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:'\u{1f3c3}',fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:'\u{1f6b6}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],char:'\u{1f6b6}',fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:'\u{1f483}',fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:'\u{1f57a}',fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:'\u{1f46f}',fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:'\u{1f46f}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:'\u{1f46b}',fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:'\u{1f46c}',fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:'\u{1f46d}',fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:'\u{1f647}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],char:'\u{1f647}',fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:'\u{1f926}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:'\u{1f926}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:'\u{1f937}',fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:'\u{1f937}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:'\u{1f481}',fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:'\u{1f481}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:'\u{1f645}',fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:'\u{1f645}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:'\u{1f646}',fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:'\u{1f646}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:'\u{1f64b}',fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:'\u{1f64b}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:'\u{1f64e}',fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],char:'\u{1f64e}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:'\u{1f64d}',fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:'\u{1f64d}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:'\u{1f487}',fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],char:'\u{1f487}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:'\u{1f486}',fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:'\u{1f486}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:'\u{1f9d6}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:'\u{1f9d6}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f491}',fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f469}',fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f468}',fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f48f}',fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}',fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:'\u{1f46a}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:'\u{1f469}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:'\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:'\u{1f468}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:'\u{1f468}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:'\u{1f9f6}',fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:'\u{1f9f5}',fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],char:'\u{1f9e5}',fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:'\u{1f97c}',fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:'\u{1f45a}',fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:'\u{1f455}',fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],char:'\u{1f456}',fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:'\u{1f454}',fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:'\u{1f457}',fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:'\u{1f459}',fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:'\u{1f458}',fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:'\u{1f484}',fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:'\u{1f48b}',fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:'\u{1f463}',fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:'\u{1f97f}',fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:'\u{1f460}',fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:'\u{1f461}',fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],char:'\u{1f462}',fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],char:'\u{1f45e}',fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:'\u{1f45f}',fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:'\u{1f97e}',fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],char:'\u{1f9e6}',fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:'\u{1f9e4}',fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:'\u{1f9e3}',fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:'\u{1f452}',fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:'\u{1f3a9}',fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],char:'\u{1f9e2}',fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:'\u26d1',fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:'\u{1f393}',fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:'\u{1f451}',fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:'\u{1f392}',fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],char:'\u{1f9f3}',fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:'\u{1f45d}',fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:'\u{1f45b}',fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:'\u{1f45c}',fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:'\u{1f4bc}',fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:'\u{1f453}',fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:'\u{1f576}',fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:'\u{1f97d}',fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:'\u{1f48d}',fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:'\u{1f302}',fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:'\u{1f436}',fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:'\u{1f431}',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:'\u{1f42d}',fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:'\u{1f439}',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:'\u{1f430}',fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:'\u{1f98a}',fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:'\u{1f43b}',fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:'\u{1f43c}',fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:'\u{1f428}',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:'\u{1f42f}',fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:'\u{1f981}',fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:'\u{1f42e}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:'\u{1f437}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:'\u{1f43d}',fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:'\u{1f438}',fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:'\u{1f991}',fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:'\u{1f419}',fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:'\u{1f990}',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:'\u{1f435}',fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:'\u{1f98d}',fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:'\u{1f648}',fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:'\u{1f649}',fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:'\u{1f64a}',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:'\u{1f412}',fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:'\u{1f414}',fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:'\u{1f427}',fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:'\u{1f426}',fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:'\u{1f424}',fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:'\u{1f423}',fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:'\u{1f425}',fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:'\u{1f986}',fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:'\u{1f985}',fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:'\u{1f989}',fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:'\u{1f987}',fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:'\u{1f43a}',fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:'\u{1f417}',fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:'\u{1f434}',fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:'\u{1f984}',fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:'\u{1f41d}',fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:'\u{1f41b}',fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:'\u{1f98b}',fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:'\u{1f40c}',fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:'\u{1f41e}',fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:'\u{1f41c}',fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:'\u{1f997}',fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:'\u{1f577}',fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:'\u{1f982}',fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:'\u{1f980}',fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:'\u{1f40d}',fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:'\u{1f98e}',fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:'\u{1f996}',fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:'\u{1f995}',fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:'\u{1f422}',fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:'\u{1f420}',fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:'\u{1f41f}',fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:'\u{1f421}',fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:'\u{1f42c}',fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:'\u{1f988}',fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:'\u{1f433}',fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:'\u{1f40b}',fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:'\u{1f40a}',fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:'\u{1f406}',fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:'\u{1f993}',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:'\u{1f405}',fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:'\u{1f403}',fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:'\u{1f402}',fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:'\u{1f404}',fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:'\u{1f98c}',fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:'\u{1f42a}',fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:'\u{1f42b}',fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:'\u{1f992}',fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:'\u{1f418}',fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:'\u{1f98f}',fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:'\u{1f410}',fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:'\u{1f40f}',fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:'\u{1f411}',fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:'\u{1f40e}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:'\u{1f416}',fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:'\u{1f400}',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:'\u{1f401}',fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:'\u{1f413}',fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:'\u{1f983}',fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:'\u{1f54a}',fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:'\u{1f415}',fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:'\u{1f429}',fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:'\u{1f408}',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:'\u{1f407}',fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:'\u{1f43f}',fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:'\u{1f994}',fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:'\u{1f99d}',fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:'\u{1f999}',fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:'\u{1f99b}',fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:'\u{1f998}',fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:'\u{1f9a1}',fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:'\u{1f9a2}',fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:'\u{1f99a}',fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:'\u{1f99c}',fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:'\u{1f99e}',fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:'\u{1f99f}',fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:'\u{1f43e}',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:'\u{1f409}',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:'\u{1f432}',fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:'\u{1f335}',fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:'\u{1f384}',fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:'\u{1f332}',fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:'\u{1f333}',fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:'\u{1f334}',fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:'\u{1f331}',fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:'\u{1f33f}',fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:'\u2618',fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:'\u{1f340}',fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:'\u{1f38d}',fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:'\u{1f38b}',fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:'\u{1f343}',fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:'\u{1f342}',fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:'\u{1f341}',fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:'\u{1f33e}',fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:'\u{1f33a}',fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:'\u{1f33b}',fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:'\u{1f339}',fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:'\u{1f940}',fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:'\u{1f337}',fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:'\u{1f33c}',fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:'\u{1f338}',fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:'\u{1f490}',fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:'\u{1f344}',fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:'\u{1f330}',fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:'\u{1f383}',fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:'\u{1f41a}',fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:'\u{1f578}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:'\u{1f30e}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:'\u{1f30d}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:'\u{1f30f}',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:'\u{1f315}',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:'\u{1f316}',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f317}',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f318}',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f311}',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f312}',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f313}',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:'\u{1f314}',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31a}',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31d}',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31b}',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31c}',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:'\u{1f31e}',fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:'\u{1f319}',fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:'\u2b50',fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:'\u{1f31f}',fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:'\u{1f4ab}',fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:'\u2728',fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],char:'\u2604',fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:'\u2600\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:'\u{1f324}',fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:'\u26c5',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:'\u{1f325}',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:'\u{1f326}',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:'\u2601\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:'\u{1f327}',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:'\u26c8',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:'\u{1f329}',fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:'\u26a1',fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:'\u{1f525}',fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:'\u{1f4a5}',fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:'\u2744\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:'\u{1f328}',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:'\u26c4',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:'\u2603',fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:'\u{1f32c}',fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:'\u{1f4a8}',fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:'\u{1f32a}',fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],char:'\u{1f32b}',fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:'\u2602',fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:'\u2614',fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:'\u{1f4a7}',fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:'\u{1f4a6}',fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:'\u{1f30a}',fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:'\u{1f34f}',fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:'\u{1f34e}',fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:'\u{1f350}',fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:'\u{1f34a}',fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:'\u{1f34b}',fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:'\u{1f34c}',fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:'\u{1f349}',fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:'\u{1f347}',fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:'\u{1f353}',fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:'\u{1f348}',fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:'\u{1f352}',fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:'\u{1f351}',fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:'\u{1f34d}',fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:'\u{1f965}',fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:'\u{1f95d}',fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:'\u{1f96d}',fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:'\u{1f951}',fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:'\u{1f966}',fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:'\u{1f345}',fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:'\u{1f346}',fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:'\u{1f952}',fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:'\u{1f955}',fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:'\u{1f336}',fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:'\u{1f954}',fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:'\u{1f33d}',fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:'\u{1f96c}',fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:'\u{1f360}',fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:'\u{1f95c}',fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:'\u{1f36f}',fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:'\u{1f950}',fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:'\u{1f35e}',fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:'\u{1f956}',fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:'\u{1f96f}',fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:'\u{1f968}',fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:'\u{1f9c0}',fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:'\u{1f95a}',fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:'\u{1f953}',fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:'\u{1f969}',fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:'\u{1f95e}',fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:'\u{1f357}',fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:'\u{1f356}',fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],char:'\u{1f9b4}',fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:'\u{1f364}',fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:'\u{1f373}',fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:'\u{1f354}',fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:'\u{1f35f}',fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:'\u{1f959}',fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:'\u{1f32d}',fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],char:'\u{1f355}',fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:'\u{1f96a}',fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:'\u{1f96b}',fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:'\u{1f35d}',fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:'\u{1f32e}',fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:'\u{1f32f}',fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:'\u{1f957}',fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:'\u{1f958}',fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:'\u{1f35c}',fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:'\u{1f372}',fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:'\u{1f365}',fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:'\u{1f960}',fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:'\u{1f363}',fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:'\u{1f371}',fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:'\u{1f35b}',fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:'\u{1f359}',fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:'\u{1f35a}',fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:'\u{1f358}',fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:'\u{1f362}',fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:'\u{1f361}',fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:'\u{1f367}',fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:'\u{1f368}',fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:'\u{1f366}',fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:'\u{1f967}',fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:'\u{1f370}',fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:'\u{1f9c1}',fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:'\u{1f96e}',fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:'\u{1f382}',fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:'\u{1f36e}',fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:'\u{1f36c}',fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:'\u{1f36d}',fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:'\u{1f36b}',fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:'\u{1f37f}',fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:'\u{1f95f}',fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:'\u{1f369}',fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:'\u{1f36a}',fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:'\u{1f95b}',fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'\u{1f37a}',fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'\u{1f37b}',fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:'\u{1f942}',fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:'\u{1f377}',fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:'\u{1f943}',fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:'\u{1f378}',fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:'\u{1f379}',fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:'\u{1f37e}',fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:'\u{1f376}',fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:'\u{1f375}',fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:'\u{1f964}',fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:'\u2615',fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:'\u{1f37c}',fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:'\u{1f9c2}',fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:'\u{1f944}',fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:'\u{1f374}',fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:'\u{1f37d}',fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:'\u{1f963}',fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:'\u{1f961}',fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],char:'\u{1f962}',fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:'\u26bd',fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:'\u{1f3c0}',fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],char:'\u{1f3c8}',fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],char:'\u26be',fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],char:'\u{1f94e}',fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],char:'\u{1f3be}',fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],char:'\u{1f3d0}',fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],char:'\u{1f3c9}',fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:'\u{1f94f}',fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:'\u{1f3b1}',fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:'\u26f3',fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:'\u{1f3cc}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],char:'\u{1f3cc}',fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:'\u{1f3d3}',fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],char:'\u{1f3f8}',fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],char:'\u{1f945}',fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],char:'\u{1f3d2}',fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],char:'\u{1f3d1}',fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:'\u{1f94d}',fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],char:'\u{1f3cf}',fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:'\u{1f3bf}',fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],char:'\u26f7',fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],char:'\u{1f3c2}',fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:'\u{1f93a}',fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:'\u{1f93c}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:'\u{1f93c}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:'\u{1f938}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:'\u{1f938}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],char:'\u{1f93e}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],char:'\u{1f93e}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],char:'\u26f8',fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],char:'\u{1f94c}',fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],char:'\u{1f6f9}',fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:'\u{1f6f7}',fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],char:'\u{1f3f9}',fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:'\u{1f3a3}',fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:'\u{1f94a}',fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:'\u{1f94b}',fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:'\u{1f6a3}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:'\u{1f6a3}',fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:'\u{1f9d7}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:'\u{1f9d7}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:'\u{1f3ca}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:'\u{1f3ca}',fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:'\u{1f93d}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:'\u{1f93d}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:'\u{1f9d8}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:'\u{1f9d8}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:'\u{1f3c4}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:'\u{1f3c4}',fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:'\u{1f6c0}',fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:'\u26f9\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],char:'\u26f9',fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:'\u{1f3cb}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:'\u{1f3cb}',fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:'\u{1f6b4}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:'\u{1f6b4}',fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:'\u{1f6b5}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:'\u{1f6b5}',fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:'\u{1f3c7}',fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:'\u{1f574}',fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:'\u{1f3c6}',fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:'\u{1f3bd}',fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],char:'\u{1f3c5}',fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],char:'\u{1f396}',fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:'\u{1f947}',fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:'\u{1f948}',fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:'\u{1f949}',fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:'\u{1f397}',fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:'\u{1f3f5}',fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],char:'\u{1f3ab}',fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:'\u{1f39f}',fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:'\u{1f3ad}',fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:'\u{1f3a8}',fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:'\u{1f3aa}',fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:'\u{1f939}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:'\u{1f939}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:'\u{1f3a4}',fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:'\u{1f3a7}',fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:'\u{1f3bc}',fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:'\u{1f3b9}',fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:'\u{1f941}',fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:'\u{1f3b7}',fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],char:'\u{1f3ba}',fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],char:'\u{1f3b8}',fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:'\u{1f3bb}',fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],char:'\u{1f3ac}',fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:'\u{1f3ae}',fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:'\u{1f47e}',fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:'\u{1f3af}',fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:'\u{1f3b2}',fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],char:"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:'\u{1f3b0}',fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:'\u{1f9e9}',fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],char:'\u{1f3b3}',fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:'\u{1f697}',fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:'\u{1f695}',fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:'\u{1f699}',fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:'\u{1f68c}',fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:'\u{1f68e}',fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:'\u{1f3ce}',fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:'\u{1f693}',fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:'\u{1f691}',fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:'\u{1f692}',fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:'\u{1f690}',fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:'\u{1f69a}',fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:'\u{1f69b}',fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:'\u{1f69c}',fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:'\u{1f6f4}',fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:'\u{1f3cd}',fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:'\u{1f6b2}',fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:'\u{1f6f5}',fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:'\u{1f6a8}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:'\u{1f694}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:'\u{1f68d}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:'\u{1f698}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:'\u{1f696}',fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:'\u{1f6a1}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:'\u{1f6a0}',fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:'\u{1f69f}',fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:'\u{1f683}',fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:'\u{1f68b}',fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:'\u{1f69d}',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:'\u{1f684}',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:'\u{1f685}',fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:'\u{1f688}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:'\u{1f69e}',fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:'\u{1f682}',fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:'\u{1f686}',fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:'\u{1f687}',fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:'\u{1f68a}',fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:'\u{1f689}',fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:'\u{1f6f8}',fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:'\u{1f681}',fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:'\u{1f6e9}',fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:'\u2708\ufe0f',fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:'\u{1f6eb}',fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:'\u{1f6ec}',fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:'\u26f5',fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:'\u{1f6e5}',fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:'\u{1f6a4}',fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:'\u26f4',fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:'\u{1f6f3}',fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:'\u{1f680}',fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:'\u{1f6f0}',fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:'\u{1f4ba}',fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:'\u{1f6f6}',fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:'\u2693',fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:'\u{1f6a7}',fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:'\u26fd',fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:'\u{1f68f}',fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:'\u{1f6a6}',fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:'\u{1f6a5}',fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:'\u{1f3c1}',fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:'\u{1f6a2}',fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:'\u{1f3a1}',fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:'\u{1f3a2}',fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:'\u{1f3a0}',fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:'\u{1f3d7}',fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:'\u{1f301}',fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:'\u{1f5fc}',fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:'\u{1f3ed}',fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:'\u26f2',fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:'\u{1f391}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:'\u26f0',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:'\u{1f3d4}',fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:'\u{1f5fb}',fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:'\u{1f30b}',fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:'\u{1f5fe}',fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:'\u{1f3d5}',fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:'\u26fa',fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:'\u{1f3de}',fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:'\u{1f6e3}',fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:'\u{1f6e4}',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:'\u{1f305}',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:'\u{1f304}',fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:'\u{1f3dc}',fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:'\u{1f3d6}',fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:'\u{1f3dd}',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:'\u{1f307}',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:'\u{1f306}',fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:'\u{1f3d9}',fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:'\u{1f303}',fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:'\u{1f309}',fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:'\u{1f30c}',fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],char:'\u{1f320}',fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:'\u{1f387}',fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:'\u{1f386}',fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:'\u{1f308}',fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:'\u{1f3d8}',fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:'\u{1f3f0}',fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:'\u{1f3ef}',fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:'\u{1f3df}',fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:'\u{1f5fd}',fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],char:'\u{1f3e0}',fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:'\u{1f3e1}',fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:'\u{1f3da}',fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:'\u{1f3e2}',fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:'\u{1f3ec}',fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:'\u{1f3e3}',fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:'\u{1f3e4}',fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:'\u{1f3e5}',fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:'\u{1f3e6}',fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:'\u{1f3e8}',fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:'\u{1f3ea}',fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:'\u{1f3eb}',fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:'\u{1f3e9}',fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:'\u{1f492}',fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:'\u{1f3db}',fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:'\u26ea',fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:'\u{1f54c}',fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:'\u{1f54d}',fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:'\u{1f54b}',fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:'\u26e9',fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:'\u231a',fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:'\u{1f4f1}',fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],char:'\u{1f4f2}',fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:'\u{1f4bb}',fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:'\u2328',fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:'\u{1f5a5}',fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],char:'\u{1f5a8}',fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],char:'\u{1f5b1}',fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],char:'\u{1f5b2}',fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],char:'\u{1f579}',fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],char:'\u{1f5dc}',fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:'\u{1f4bd}',fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:'\u{1f4be}',fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:'\u{1f4bf}',fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:'\u{1f4c0}',fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:'\u{1f4fc}',fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],char:'\u{1f4f7}',fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:'\u{1f4f8}',fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],char:'\u{1f4f9}',fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],char:'\u{1f3a5}',fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:'\u{1f4fd}',fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],char:'\u{1f39e}',fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:'\u{1f4de}',fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:'\u260e\ufe0f',fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:'\u{1f4df}',fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],char:'\u{1f4e0}',fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:'\u{1f4fa}',fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:'\u{1f4fb}',fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:'\u{1f399}',fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],char:'\u{1f39a}',fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],char:'\u{1f39b}',fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:'\u{1f9ed}',fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],char:'\u23f1',fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],char:'\u23f2',fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],char:'\u23f0',fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],char:'\u{1f570}',fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:'\u23f3',fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:'\u231b',fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:'\u{1f4e1}',fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],char:'\u{1f50b}',fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],char:'\u{1f50c}',fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:'\u{1f4a1}',fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:'\u{1f526}',fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],char:'\u{1f56f}',fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],char:'\u{1f9ef}',fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:'\u{1f5d1}',fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],char:'\u{1f6e2}',fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:'\u{1f4b8}',fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:'\u{1f4b5}',fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:'\u{1f4b4}',fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:'\u{1f4b6}',fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:'\u{1f4b7}',fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:'\u{1f4b0}',fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:'\u{1f4b3}',fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:'\u{1f48e}',fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:'\u2696',fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:'\u{1f9f0}',fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:'\u{1f527}',fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],char:'\u{1f528}',fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:'\u2692',fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:'\u{1f6e0}',fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],char:'\u26cf',fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:'\u{1f529}',fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],char:'\u2699',fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],char:'\u{1f9f1}',fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],char:'\u26d3',fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:'\u{1f9f2}',fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:'\u{1f52b}',fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:'\u{1f4a3}',fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:'\u{1f9e8}',fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:'\u{1f52a}',fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],char:'\u{1f5e1}',fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],char:'\u2694',fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],char:'\u{1f6e1}',fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:'\u{1f6ac}',fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:'\u2620',fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:'\u26b0',fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:'\u26b1',fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],char:'\u{1f3fa}',fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:'\u{1f52e}',fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:'\u{1f4ff}',fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:'\u{1f9ff}',fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],char:'\u{1f488}',fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:'\u2697',fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:'\u{1f52d}',fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:'\u{1f52c}',fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],char:'\u{1f573}',fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:'\u{1f48a}',fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:'\u{1f489}',fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:'\u{1f9ec}',fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:'\u{1f9a0}',fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:'\u{1f9eb}',fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:'\u{1f9ea}',fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:'\u{1f321}',fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:'\u{1f9f9}',fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],char:'\u{1f9fa}',fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],char:'\u{1f9fb}',fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],char:'\u{1f3f7}',fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:'\u{1f516}',fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:'\u{1f6bd}',fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:'\u{1f6bf}',fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:'\u{1f6c1}',fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:'\u{1f9fc}',fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:'\u{1f9fd}',fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:'\u{1f9f4}',fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],char:'\u{1f511}',fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],char:'\u{1f5dd}',fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:'\u{1f6cb}',fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:'\u{1f6cc}',fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],char:'\u{1f6cf}',fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],char:'\u{1f6aa}',fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],char:'\u{1f6ce}',fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:'\u{1f9f8}',fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],char:'\u{1f5bc}',fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],char:'\u{1f5fa}',fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:'\u26f1',fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:'\u{1f5ff}',fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:'\u{1f6cd}',fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],char:'\u{1f6d2}',fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:'\u{1f388}',fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:'\u{1f38f}',fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:'\u{1f380}',fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:'\u{1f381}',fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:'\u{1f38a}',fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:'\u{1f389}',fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:'\u{1f38e}',fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:'\u{1f390}',fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:'\u{1f38c}',fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:'\u{1f3ee}',fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],char:'\u{1f9e7}',fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:'\u2709\ufe0f',fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:'\u{1f4e9}',fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:'\u{1f4e8}',fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:'\u{1f4e7}',fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:'\u{1f48c}',fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:'\u{1f4ee}',fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:'\u{1f4ea}',fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:'\u{1f4eb}',fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:'\u{1f4ec}',fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:'\u{1f4ed}',fitzpatrick_scale:!1,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:'\u{1f4e6}',fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],char:'\u{1f4ef}',fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],char:'\u{1f4e5}',fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:'\u{1f4e4}',fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:'\u{1f4dc}',fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:'\u{1f4c3}',fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:'\u{1f4d1}',fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],char:'\u{1f9fe}',fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:'\u{1f4ca}',fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:'\u{1f4c8}',fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:'\u{1f4c9}',fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:'\u{1f4c4}',fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],char:'\u{1f4c5}',fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:'\u{1f4c6}',fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:'\u{1f5d3}',fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],char:'\u{1f4c7}',fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],char:'\u{1f5c3}',fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],char:'\u{1f5f3}',fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:'\u{1f5c4}',fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],char:'\u{1f4cb}',fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:'\u{1f5d2}',fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],char:'\u{1f4c1}',fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],char:'\u{1f4c2}',fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:'\u{1f5c2}',fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:'\u{1f5de}',fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],char:'\u{1f4f0}',fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:'\u{1f4d3}',fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:'\u{1f4d5}',fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:'\u{1f4d7}',fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:'\u{1f4d8}',fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:'\u{1f4d9}',fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:'\u{1f4d4}',fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],char:'\u{1f4d2}',fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],char:'\u{1f4da}',fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:'\u{1f4d6}',fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],char:'\u{1f9f7}',fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],char:'\u{1f517}',fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],char:'\u{1f4ce}',fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],char:'\u{1f587}',fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],char:'\u2702\ufe0f',fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:'\u{1f4d0}',fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:'\u{1f4cf}',fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],char:'\u{1f9ee}',fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:'\u{1f4cc}',fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:'\u{1f4cd}',fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:'\u{1f6a9}',fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:'\u{1f3f3}',fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],char:'\u{1f3f4}',fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:'\u{1f3f3}\ufe0f\u200d\u{1f308}',fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:'\u{1f510}',fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],char:'\u{1f512}',fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],char:'\u{1f513}',fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:'\u{1f50f}',fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],char:'\u{1f58a}',fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:'\u{1f58b}',fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:'\u2712\ufe0f',fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:'\u{1f4dd}',fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:'\u270f\ufe0f',fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],char:'\u{1f58d}',fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:'\u{1f58c}',fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:'\u{1f50d}',fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:'\u{1f50e}',fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],char:'\u2764\ufe0f',fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f9e1}',fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49b}',fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49a}',fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f499}',fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49c}',fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],char:'\u{1f5a4}',fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:'\u{1f494}',fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:'\u2763',fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:'\u{1f495}',fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:'\u{1f49e}',fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:'\u{1f493}',fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:'\u{1f497}',fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f496}',fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:'\u{1f498}',fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:'\u{1f49d}',fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:'\u{1f49f}',fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],char:'\u262e',fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],char:'\u271d',fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],char:'\u262a',fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'\u{1f549}',fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'\u2638',fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],char:'\u2721',fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:'\u{1f52f}',fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:'\u{1f54e}',fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],char:'\u262f',fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:'\u2626',fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:'\u{1f6d0}',fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:'\u26ce',fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u2648',fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:'\u2649',fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264a',fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264b',fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u264c',fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264d',fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u264e',fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:'\u264f',fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u2650',fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u2651',fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u2652',fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:'\u2653',fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],char:'\u{1f194}',fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:'\u269b',fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:'\u{1f233}',fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:'\u{1f239}',fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:'\u2622',fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],char:'\u2623',fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:'\u{1f4f4}',fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:'\u{1f4f3}',fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:'\u{1f236}',fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:'\u{1f21a}',fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:'\u{1f238}',fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:'\u{1f23a}',fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:'\u{1f237}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:'\u2734\ufe0f',fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],char:'\u{1f19a}',fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:'\u{1f251}',fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:'\u{1f4ae}',fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:'\u{1f250}',fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:'\u3299\ufe0f',fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:'\u3297\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:'\u{1f234}',fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:'\u{1f235}',fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:'\u{1f232}',fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:'\u{1f170}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:'\u{1f171}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:'\u{1f18e}',fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:'\u{1f191}',fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:'\u{1f17e}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:'\u{1f198}',fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:'\u26d4',fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:'\u{1f4db}',fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:'\u{1f6ab}',fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:'\u274c',fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],char:'\u2b55',fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],char:'\u{1f6d1}',fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],char:'\u{1f4a2}',fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:'\u2668\ufe0f',fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:'\u{1f6b7}',fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:'\u{1f6af}',fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:'\u{1f6b3}',fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:'\u{1f6b1}',fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:'\u{1f51e}',fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:'\u{1f4f5}',fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:'\u2757',fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:'\u2755',fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],char:'\u2753',fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:'\u2754',fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:'\u203c\ufe0f',fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:'\u2049\ufe0f',fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:'\u{1f505}',fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],char:'\u{1f506}',fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],char:'\u{1f531}',fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:'\u269c',fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:'\u303d\ufe0f',fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:'\u26a0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:'\u{1f6b8}',fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],char:'\u{1f530}',fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:'\u267b\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:'\u{1f22f}',fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:'\u{1f4b9}',fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:'\u2747\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:'\u2733\ufe0f',fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:'\u274e',fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:'\u2705',fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:'\u{1f4a0}',fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:'\u{1f300}',fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],char:'\u27bf',fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:'\u{1f310}',fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:'\u24c2\ufe0f',fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:'\u{1f3e7}',fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:'\u{1f202}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:'\u{1f6c2}',fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:'\u{1f6c3}',fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:'\u{1f6c4}',fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:'\u{1f6c5}',fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:'\u267f',fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:'\u{1f6ad}',fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:'\u{1f6be}',fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:'\u{1f17f}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:'\u{1f6b0}',fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:'\u{1f6b9}',fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:'\u{1f6ba}',fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:'\u{1f6bc}',fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:'\u{1f6bb}',fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:'\u{1f6ae}',fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:'\u{1f3a6}',fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:'\u{1f4f6}',fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:'\u{1f201}',fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:'\u{1f196}',fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:'\u{1f197}',fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],char:'\u{1f199}',fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],char:'\u{1f192}',fitzpatrick_scale:!1,category:"symbols"},new:{keywords:["blue-square","words","start"],char:'\u{1f195}',fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],char:'\u{1f193}',fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:'0\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:'1\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:'2\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:'3\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:'4\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:'5\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:'6\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:'7\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:'8\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:'9\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:'\u{1f51f}',fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],char:'*\u20e3',fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],char:'\u23cf\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:'\u25b6\ufe0f',fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:'\u23f8',fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:'\u23ed',fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],char:'\u23f9',fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],char:'\u23fa',fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:'\u23ef',fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],char:'\u23ee',fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:'\u23e9',fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],char:'\u23ea',fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:'\u{1f500}',fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],char:'\u{1f501}',fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:'\u{1f502}',fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:'\u25c0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:'\u{1f53c}',fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:'\u{1f53d}',fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:'\u23eb',fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:'\u23ec',fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:'\u27a1\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:'\u2b05\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:'\u2b06\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:'\u2b07\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:'\u2197\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:'\u2198\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:'\u2199\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:'\u2196\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:'\u2195\ufe0f',fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:'\u2194\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:'\u{1f504}',fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:'\u21aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:'\u21a9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:'\u2934\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:'\u2935\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:'#\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:'\u2139\ufe0f',fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:'\u{1f524}',fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:'\u{1f521}',fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:'\u{1f520}',fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:'\u{1f523}',fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:'\u{1f3b5}',fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],char:'\u{1f3b6}',fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:'\u3030\ufe0f',fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:'\u27b0',fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:'\u2714\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:'\u{1f503}',fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:'\u2795',fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:'\u2796',fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:'\u2797',fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:'\u2716\ufe0f',fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],char:'\u267e',fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:'\u{1f4b2}',fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:'\u{1f4b1}',fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:'\xa9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],char:'\xae\ufe0f',fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:'\u2122\ufe0f',fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],char:'\u{1f51a}',fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],char:'\u{1f519}',fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],char:'\u{1f51b}',fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],char:'\u{1f51d}',fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],char:'\u{1f51c}',fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:'\u2611\ufe0f',fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:'\u{1f518}',fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],char:'\u26aa',fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:'\u26ab',fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:'\u{1f534}',fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:'\u{1f535}',fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f538}',fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f539}',fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f536}',fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f537}',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:'\u{1f53a}',fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:'\u25aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:'\u25ab\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:'\u2b1b',fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:'\u2b1c',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:'\u{1f53b}',fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:'\u25fc\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:'\u25fb\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:'\u25fe',fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:'\u25fd',fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:'\u{1f532}',fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],char:'\u{1f533}',fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:'\u{1f508}',fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:'\u{1f509}',fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:'\u{1f50a}',fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:'\u{1f507}',fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:'\u{1f4e3}',fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:'\u{1f4e2}',fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:'\u{1f514}',fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:'\u{1f515}',fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:'\u{1f0cf}',fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:'\u{1f004}',fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:'\u2660\ufe0f',fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:'\u2663\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:'\u2665\ufe0f',fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:'\u2666\ufe0f',fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:'\u{1f3b4}',fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:'\u{1f4ad}',fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:'\u{1f5ef}',fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:'\u{1f4ac}',fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:'\u{1f5e8}',fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:'\u{1f550}',fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:'\u{1f551}',fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:'\u{1f552}',fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:'\u{1f553}',fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:'\u{1f554}',fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:'\u{1f555}',fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:'\u{1f556}',fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:'\u{1f557}',fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:'\u{1f558}',fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:'\u{1f559}',fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:'\u{1f55a}',fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:'\u{1f55b}',fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:'\u{1f55c}',fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:'\u{1f55d}',fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:'\u{1f55e}',fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:'\u{1f55f}',fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:'\u{1f560}',fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:'\u{1f561}',fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:'\u{1f562}',fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:'\u{1f563}',fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:'\u{1f564}',fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:'\u{1f565}',fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:'\u{1f566}',fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:'\u{1f567}',fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:'\u{1f1e8}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:'\u{1f1ea}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:'\u{1f1eb}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:'\u{1f1e9}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:'\u{1f1ef}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:'\u{1f1fd}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:'\u{1f1fe}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:'\u{1f1f0}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:'\u{1f1f4}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:'\u{1f1f6}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:'\u{1f1fc}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:'\u{1f1f0}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:'\u{1f1ec}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0065}\u{e006e}\u{e0067}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0073}\u{e0063}\u{e0074}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0077}\u{e006c}\u{e0073}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:'\u{1f1fc}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:'\u{1f1fe}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:'\u{1f1fa}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:'\u{1f3f4}\u200d\u2620\ufe0f',fitzpatrick_scale:!1,category:"flags"}}); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojis.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojis.js new file mode 100644 index 0000000000..88455e9a47 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojis.js @@ -0,0 +1 @@ +window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:"😀",fitzpatrick_scale:false,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:"😬",fitzpatrick_scale:false,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:"😁",fitzpatrick_scale:false,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:"😂",fitzpatrick_scale:false,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:"🤣",fitzpatrick_scale:false,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:"🥳",fitzpatrick_scale:false,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:"😃",fitzpatrick_scale:false,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:"😄",fitzpatrick_scale:false,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:"😅",fitzpatrick_scale:false,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:"😆",fitzpatrick_scale:false,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:"😇",fitzpatrick_scale:false,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:"😉",fitzpatrick_scale:false,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:"😊",fitzpatrick_scale:false,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:"🙂",fitzpatrick_scale:false,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:"🙃",fitzpatrick_scale:false,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:"☺️",fitzpatrick_scale:false,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:"😋",fitzpatrick_scale:false,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:"😌",fitzpatrick_scale:false,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:"😍",fitzpatrick_scale:false,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:"🥰",fitzpatrick_scale:false,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"😘",fitzpatrick_scale:false,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:"😗",fitzpatrick_scale:false,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:"😙",fitzpatrick_scale:false,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"😚",fitzpatrick_scale:false,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:"😜",fitzpatrick_scale:false,category:"people"},zany:{keywords:["face","goofy","crazy"],char:"🤪",fitzpatrick_scale:false,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:"🤨",fitzpatrick_scale:false,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:"🧐",fitzpatrick_scale:false,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:"😝",fitzpatrick_scale:false,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:"😛",fitzpatrick_scale:false,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:"🤑",fitzpatrick_scale:false,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:"🤓",fitzpatrick_scale:false,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:"😎",fitzpatrick_scale:false,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:"🤩",fitzpatrick_scale:false,category:"people"},clown_face:{keywords:["face"],char:"🤡",fitzpatrick_scale:false,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:"🤠",fitzpatrick_scale:false,category:"people"},hugs:{keywords:["face","smile","hug"],char:"🤗",fitzpatrick_scale:false,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:"😏",fitzpatrick_scale:false,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:"😶",fitzpatrick_scale:false,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:"😐",fitzpatrick_scale:false,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:"😑",fitzpatrick_scale:false,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:"😒",fitzpatrick_scale:false,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:"🙄",fitzpatrick_scale:false,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:"🤔",fitzpatrick_scale:false,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:"🤥",fitzpatrick_scale:false,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:"🤭",fitzpatrick_scale:false,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:"🤫",fitzpatrick_scale:false,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:"🤬",fitzpatrick_scale:false,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:"🤯",fitzpatrick_scale:false,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:"😳",fitzpatrick_scale:false,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:"😞",fitzpatrick_scale:false,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:"😟",fitzpatrick_scale:false,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:"😠",fitzpatrick_scale:false,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:"😡",fitzpatrick_scale:false,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:"😔",fitzpatrick_scale:false,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:"😕",fitzpatrick_scale:false,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:"🙁",fitzpatrick_scale:false,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:"☹",fitzpatrick_scale:false,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:"😣",fitzpatrick_scale:false,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:"😖",fitzpatrick_scale:false,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:"😫",fitzpatrick_scale:false,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:"😩",fitzpatrick_scale:false,category:"people"},pleading:{keywords:["face","begging","mercy"],char:"🥺",fitzpatrick_scale:false,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:"😤",fitzpatrick_scale:false,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:"😮",fitzpatrick_scale:false,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:"😱",fitzpatrick_scale:false,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:"😨",fitzpatrick_scale:false,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:"😰",fitzpatrick_scale:false,category:"people"},hushed:{keywords:["face","woo","shh"],char:"😯",fitzpatrick_scale:false,category:"people"},frowning:{keywords:["face","aw","what"],char:"😦",fitzpatrick_scale:false,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:"😧",fitzpatrick_scale:false,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:"😢",fitzpatrick_scale:false,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:"😥",fitzpatrick_scale:false,category:"people"},drooling_face:{keywords:["face"],char:"🤤",fitzpatrick_scale:false,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:"😪",fitzpatrick_scale:false,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:"😓",fitzpatrick_scale:false,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:"🥵",fitzpatrick_scale:false,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:"🥶",fitzpatrick_scale:false,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:"😭",fitzpatrick_scale:false,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:"😵",fitzpatrick_scale:false,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:"😲",fitzpatrick_scale:false,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:"🤐",fitzpatrick_scale:false,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:"🤢",fitzpatrick_scale:false,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:"🤧",fitzpatrick_scale:false,category:"people"},vomiting:{keywords:["face","sick"],char:"🤮",fitzpatrick_scale:false,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:"😷",fitzpatrick_scale:false,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:"🤒",fitzpatrick_scale:false,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:"🤕",fitzpatrick_scale:false,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:"🥴",fitzpatrick_scale:false,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:"😴",fitzpatrick_scale:false,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:"💤",fitzpatrick_scale:false,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:"💩",fitzpatrick_scale:false,category:"people"},smiling_imp:{keywords:["devil","horns"],char:"😈",fitzpatrick_scale:false,category:"people"},imp:{keywords:["devil","angry","horns"],char:"👿",fitzpatrick_scale:false,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:"👹",fitzpatrick_scale:false,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:"👺",fitzpatrick_scale:false,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:"💀",fitzpatrick_scale:false,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:"👻",fitzpatrick_scale:false,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:"👽",fitzpatrick_scale:false,category:"people"},robot:{keywords:["computer","machine","bot"],char:"🤖",fitzpatrick_scale:false,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:"😺",fitzpatrick_scale:false,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:"😸",fitzpatrick_scale:false,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:"😹",fitzpatrick_scale:false,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:"😻",fitzpatrick_scale:false,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:"😼",fitzpatrick_scale:false,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:"😽",fitzpatrick_scale:false,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:"🙀",fitzpatrick_scale:false,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:"😿",fitzpatrick_scale:false,category:"people"},pouting_cat:{keywords:["animal","cats"],char:"😾",fitzpatrick_scale:false,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:"🤲",fitzpatrick_scale:true,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:"🙌",fitzpatrick_scale:true,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:"👏",fitzpatrick_scale:true,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:"👋",fitzpatrick_scale:true,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:"🤙",fitzpatrick_scale:true,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:"👍",fitzpatrick_scale:true,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:"👎",fitzpatrick_scale:true,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:"👊",fitzpatrick_scale:true,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:"✊",fitzpatrick_scale:true,category:"people"},fist_left:{keywords:["hand","fistbump"],char:"🤛",fitzpatrick_scale:true,category:"people"},fist_right:{keywords:["hand","fistbump"],char:"🤜",fitzpatrick_scale:true,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:"✌",fitzpatrick_scale:true,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:"👌",fitzpatrick_scale:true,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:"✋",fitzpatrick_scale:true,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:"🤚",fitzpatrick_scale:true,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:"👐",fitzpatrick_scale:true,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:"💪",fitzpatrick_scale:true,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:"🙏",fitzpatrick_scale:true,category:"people"},foot:{keywords:["kick","stomp"],char:"🦶",fitzpatrick_scale:true,category:"people"},leg:{keywords:["kick","limb"],char:"🦵",fitzpatrick_scale:true,category:"people"},handshake:{keywords:["agreement","shake"],char:"🤝",fitzpatrick_scale:false,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:"☝",fitzpatrick_scale:true,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:"👆",fitzpatrick_scale:true,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:"👇",fitzpatrick_scale:true,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:"👈",fitzpatrick_scale:true,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:"👉",fitzpatrick_scale:true,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:"🖕",fitzpatrick_scale:true,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:"🖐",fitzpatrick_scale:true,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:"🤟",fitzpatrick_scale:true,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:"🤘",fitzpatrick_scale:true,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:"🤞",fitzpatrick_scale:true,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:"🖖",fitzpatrick_scale:true,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:"✍",fitzpatrick_scale:true,category:"people"},selfie:{keywords:["camera","phone"],char:"🤳",fitzpatrick_scale:true,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:"💅",fitzpatrick_scale:true,category:"people"},lips:{keywords:["mouth","kiss"],char:"👄",fitzpatrick_scale:false,category:"people"},tooth:{keywords:["teeth","dentist"],char:"🦷",fitzpatrick_scale:false,category:"people"},tongue:{keywords:["mouth","playful"],char:"👅",fitzpatrick_scale:false,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:"👂",fitzpatrick_scale:true,category:"people"},nose:{keywords:["smell","sniff"],char:"👃",fitzpatrick_scale:true,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:"👁",fitzpatrick_scale:false,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:"👀",fitzpatrick_scale:false,category:"people"},brain:{keywords:["smart","intelligent"],char:"🧠",fitzpatrick_scale:false,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:"👤",fitzpatrick_scale:false,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:"👥",fitzpatrick_scale:false,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:"🗣",fitzpatrick_scale:false,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:"👶",fitzpatrick_scale:true,category:"people"},child:{keywords:["gender-neutral","young"],char:"🧒",fitzpatrick_scale:true,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:"👦",fitzpatrick_scale:true,category:"people"},girl:{keywords:["female","woman","teenager"],char:"👧",fitzpatrick_scale:true,category:"people"},adult:{keywords:["gender-neutral","person"],char:"🧑",fitzpatrick_scale:true,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:"👨",fitzpatrick_scale:true,category:"people"},woman:{keywords:["female","girls","lady"],char:"👩",fitzpatrick_scale:true,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:"👱‍♀️",fitzpatrick_scale:true,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:"👱",fitzpatrick_scale:true,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:"🧔",fitzpatrick_scale:true,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:"🧓",fitzpatrick_scale:true,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:"👴",fitzpatrick_scale:true,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:"👵",fitzpatrick_scale:true,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:"👲",fitzpatrick_scale:true,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:"🧕",fitzpatrick_scale:true,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:"👳‍♀️",fitzpatrick_scale:true,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:"👳",fitzpatrick_scale:true,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:"👮‍♀️",fitzpatrick_scale:true,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:"👮",fitzpatrick_scale:true,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:"👷‍♀️",fitzpatrick_scale:true,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:"👷",fitzpatrick_scale:true,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:"💂‍♀️",fitzpatrick_scale:true,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:"💂",fitzpatrick_scale:true,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:"🕵️‍♀️",fitzpatrick_scale:true,category:"people"},male_detective:{keywords:["human","spy","detective"],char:"🕵",fitzpatrick_scale:true,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:"👩‍⚕️",fitzpatrick_scale:true,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:"👨‍⚕️",fitzpatrick_scale:true,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:"👩‍🌾",fitzpatrick_scale:true,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:"👨‍🌾",fitzpatrick_scale:true,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:"👩‍🍳",fitzpatrick_scale:true,category:"people"},man_cook:{keywords:["chef","man","human"],char:"👨‍🍳",fitzpatrick_scale:true,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:"👩‍🎓",fitzpatrick_scale:true,category:"people"},man_student:{keywords:["graduate","man","human"],char:"👨‍🎓",fitzpatrick_scale:true,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:"👩‍🎤",fitzpatrick_scale:true,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:"👨‍🎤",fitzpatrick_scale:true,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:"👩‍🏫",fitzpatrick_scale:true,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:"👨‍🏫",fitzpatrick_scale:true,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:"👩‍🏭",fitzpatrick_scale:true,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:"👨‍🏭",fitzpatrick_scale:true,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:"👩‍💻",fitzpatrick_scale:true,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:"👨‍💻",fitzpatrick_scale:true,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:"👩‍💼",fitzpatrick_scale:true,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:"👨‍💼",fitzpatrick_scale:true,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:"👩‍🔧",fitzpatrick_scale:true,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:"👨‍🔧",fitzpatrick_scale:true,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:"👩‍🔬",fitzpatrick_scale:true,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:"👨‍🔬",fitzpatrick_scale:true,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:"👩‍🎨",fitzpatrick_scale:true,category:"people"},man_artist:{keywords:["painter","man","human"],char:"👨‍🎨",fitzpatrick_scale:true,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:"👩‍🚒",fitzpatrick_scale:true,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:"👨‍🚒",fitzpatrick_scale:true,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:"👩‍✈️",fitzpatrick_scale:true,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:"👨‍✈️",fitzpatrick_scale:true,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:"👩‍🚀",fitzpatrick_scale:true,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:"👨‍🚀",fitzpatrick_scale:true,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:"👩‍⚖️",fitzpatrick_scale:true,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:"👨‍⚖️",fitzpatrick_scale:true,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:"🦸‍♀️",fitzpatrick_scale:true,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:"🦸‍♂️",fitzpatrick_scale:true,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:"🦹‍♀️",fitzpatrick_scale:true,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:"🦹‍♂️",fitzpatrick_scale:true,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:"🤶",fitzpatrick_scale:true,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:"🎅",fitzpatrick_scale:true,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:"🧙‍♀️",fitzpatrick_scale:true,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:"🧙‍♂️",fitzpatrick_scale:true,category:"people"},woman_elf:{keywords:["woman","female"],char:"🧝‍♀️",fitzpatrick_scale:true,category:"people"},man_elf:{keywords:["man","male"],char:"🧝‍♂️",fitzpatrick_scale:true,category:"people"},woman_vampire:{keywords:["woman","female"],char:"🧛‍♀️",fitzpatrick_scale:true,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:"🧛‍♂️",fitzpatrick_scale:true,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:"🧟‍♀️",fitzpatrick_scale:false,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:"🧟‍♂️",fitzpatrick_scale:false,category:"people"},woman_genie:{keywords:["woman","female"],char:"🧞‍♀️",fitzpatrick_scale:false,category:"people"},man_genie:{keywords:["man","male"],char:"🧞‍♂️",fitzpatrick_scale:false,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:"🧜‍♀️",fitzpatrick_scale:true,category:"people"},merman:{keywords:["man","male","triton"],char:"🧜‍♂️",fitzpatrick_scale:true,category:"people"},woman_fairy:{keywords:["woman","female"],char:"🧚‍♀️",fitzpatrick_scale:true,category:"people"},man_fairy:{keywords:["man","male"],char:"🧚‍♂️",fitzpatrick_scale:true,category:"people"},angel:{keywords:["heaven","wings","halo"],char:"👼",fitzpatrick_scale:true,category:"people"},pregnant_woman:{keywords:["baby"],char:"🤰",fitzpatrick_scale:true,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:"🤱",fitzpatrick_scale:true,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:"👸",fitzpatrick_scale:true,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:"🤴",fitzpatrick_scale:true,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:"👰",fitzpatrick_scale:true,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:"🤵",fitzpatrick_scale:true,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:"🏃‍♀️",fitzpatrick_scale:true,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:"🏃",fitzpatrick_scale:true,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:"🚶‍♀️",fitzpatrick_scale:true,category:"people"},walking_man:{keywords:["human","feet","steps"],char:"🚶",fitzpatrick_scale:true,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:"💃",fitzpatrick_scale:true,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:"🕺",fitzpatrick_scale:true,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:"👯",fitzpatrick_scale:false,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:"👯‍♂️",fitzpatrick_scale:false,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:"👫",fitzpatrick_scale:false,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:"👬",fitzpatrick_scale:false,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:"👭",fitzpatrick_scale:false,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:"🙇‍♀️",fitzpatrick_scale:true,category:"people"},bowing_man:{keywords:["man","male","boy"],char:"🙇",fitzpatrick_scale:true,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:"🤦‍♂️",fitzpatrick_scale:true,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:"🤦‍♀️",fitzpatrick_scale:true,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:"🤷",fitzpatrick_scale:true,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:"🤷‍♂️",fitzpatrick_scale:true,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:"💁",fitzpatrick_scale:true,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:"💁‍♂️",fitzpatrick_scale:true,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:"🙅",fitzpatrick_scale:true,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:"🙅‍♂️",fitzpatrick_scale:true,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:"🙆",fitzpatrick_scale:true,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:"🙆‍♂️",fitzpatrick_scale:true,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:"🙋",fitzpatrick_scale:true,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:"🙋‍♂️",fitzpatrick_scale:true,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:"🙎",fitzpatrick_scale:true,category:"people"},pouting_man:{keywords:["male","boy","man"],char:"🙎‍♂️",fitzpatrick_scale:true,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:"🙍",fitzpatrick_scale:true,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:"🙍‍♂️",fitzpatrick_scale:true,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:"💇",fitzpatrick_scale:true,category:"people"},haircut_man:{keywords:["male","boy","man"],char:"💇‍♂️",fitzpatrick_scale:true,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:"💆",fitzpatrick_scale:true,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:"💆‍♂️",fitzpatrick_scale:true,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:"🧖‍♀️",fitzpatrick_scale:true,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:"🧖‍♂️",fitzpatrick_scale:true,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"💑",fitzpatrick_scale:false,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"👩‍❤️‍👩",fitzpatrick_scale:false,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"👨‍❤️‍👨",fitzpatrick_scale:false,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"💏",fitzpatrick_scale:false,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"👩‍❤️‍💋‍👩",fitzpatrick_scale:false,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:"👨‍❤️‍💋‍👨",fitzpatrick_scale:false,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:"👪",fitzpatrick_scale:false,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:"👨‍👩‍👧",fitzpatrick_scale:false,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧",fitzpatrick_scale:false,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:"👩‍👦",fitzpatrick_scale:false,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:"👩‍👧",fitzpatrick_scale:false,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:"👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:"👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:"👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:"👨‍👦",fitzpatrick_scale:false,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:"👨‍👧",fitzpatrick_scale:false,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:"👨‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:"👨‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:"👨‍👧‍👧",fitzpatrick_scale:false,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:"🧶",fitzpatrick_scale:false,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:"🧵",fitzpatrick_scale:false,category:"people"},coat:{keywords:["jacket"],char:"🧥",fitzpatrick_scale:false,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:"🥼",fitzpatrick_scale:false,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:"👚",fitzpatrick_scale:false,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:"👕",fitzpatrick_scale:false,category:"people"},jeans:{keywords:["fashion","shopping"],char:"👖",fitzpatrick_scale:false,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:"👔",fitzpatrick_scale:false,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:"👗",fitzpatrick_scale:false,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:"👙",fitzpatrick_scale:false,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:"👘",fitzpatrick_scale:false,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:"💄",fitzpatrick_scale:false,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:"💋",fitzpatrick_scale:false,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:"👣",fitzpatrick_scale:false,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:"🥿",fitzpatrick_scale:false,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:"👠",fitzpatrick_scale:false,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:"👡",fitzpatrick_scale:false,category:"people"},boot:{keywords:["shoes","fashion"],char:"👢",fitzpatrick_scale:false,category:"people"},mans_shoe:{keywords:["fashion","male"],char:"👞",fitzpatrick_scale:false,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:"👟",fitzpatrick_scale:false,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:"🥾",fitzpatrick_scale:false,category:"people"},socks:{keywords:["stockings","clothes"],char:"🧦",fitzpatrick_scale:false,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:"🧤",fitzpatrick_scale:false,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:"🧣",fitzpatrick_scale:false,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:"👒",fitzpatrick_scale:false,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:"🎩",fitzpatrick_scale:false,category:"people"},billed_hat:{keywords:["cap","baseball"],char:"🧢",fitzpatrick_scale:false,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:"⛑",fitzpatrick_scale:false,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:"🎓",fitzpatrick_scale:false,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:"👑",fitzpatrick_scale:false,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:"🎒",fitzpatrick_scale:false,category:"people"},luggage:{keywords:["packing","travel"],char:"🧳",fitzpatrick_scale:false,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:"👝",fitzpatrick_scale:false,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:"👛",fitzpatrick_scale:false,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:"👜",fitzpatrick_scale:false,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:"💼",fitzpatrick_scale:false,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:"👓",fitzpatrick_scale:false,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:"🕶",fitzpatrick_scale:false,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:"🥽",fitzpatrick_scale:false,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:"💍",fitzpatrick_scale:false,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:"🌂",fitzpatrick_scale:false,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:"🐶",fitzpatrick_scale:false,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:"🐱",fitzpatrick_scale:false,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:"🐭",fitzpatrick_scale:false,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:"🐹",fitzpatrick_scale:false,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:"🐰",fitzpatrick_scale:false,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:"🦊",fitzpatrick_scale:false,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:"🐻",fitzpatrick_scale:false,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:"🐼",fitzpatrick_scale:false,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:"🐨",fitzpatrick_scale:false,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:"🐯",fitzpatrick_scale:false,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:"🦁",fitzpatrick_scale:false,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:"🐮",fitzpatrick_scale:false,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:"🐷",fitzpatrick_scale:false,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:"🐽",fitzpatrick_scale:false,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:"🐸",fitzpatrick_scale:false,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:"🦑",fitzpatrick_scale:false,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:"🐙",fitzpatrick_scale:false,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:"🦐",fitzpatrick_scale:false,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:"🐵",fitzpatrick_scale:false,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:"🦍",fitzpatrick_scale:false,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:"🙈",fitzpatrick_scale:false,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:"🙉",fitzpatrick_scale:false,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:"🙊",fitzpatrick_scale:false,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:"🐒",fitzpatrick_scale:false,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:"🐔",fitzpatrick_scale:false,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:"🐧",fitzpatrick_scale:false,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:"🐦",fitzpatrick_scale:false,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:"🐤",fitzpatrick_scale:false,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:"🐣",fitzpatrick_scale:false,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:"🐥",fitzpatrick_scale:false,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:"🦆",fitzpatrick_scale:false,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:"🦅",fitzpatrick_scale:false,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:"🦉",fitzpatrick_scale:false,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:"🦇",fitzpatrick_scale:false,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:"🐺",fitzpatrick_scale:false,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:"🐗",fitzpatrick_scale:false,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:"🐴",fitzpatrick_scale:false,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:"🦄",fitzpatrick_scale:false,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:"🐝",fitzpatrick_scale:false,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:"🐛",fitzpatrick_scale:false,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:"🦋",fitzpatrick_scale:false,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:"🐌",fitzpatrick_scale:false,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:"🐞",fitzpatrick_scale:false,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:"🐜",fitzpatrick_scale:false,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:"🦗",fitzpatrick_scale:false,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:"🕷",fitzpatrick_scale:false,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:"🦂",fitzpatrick_scale:false,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:"🦀",fitzpatrick_scale:false,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:"🐍",fitzpatrick_scale:false,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:"🦎",fitzpatrick_scale:false,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:"🦖",fitzpatrick_scale:false,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:"🦕",fitzpatrick_scale:false,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:"🐢",fitzpatrick_scale:false,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:"🐠",fitzpatrick_scale:false,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:"🐟",fitzpatrick_scale:false,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:"🐡",fitzpatrick_scale:false,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:"🐬",fitzpatrick_scale:false,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:"🦈",fitzpatrick_scale:false,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:"🐳",fitzpatrick_scale:false,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:"🐋",fitzpatrick_scale:false,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:"🐊",fitzpatrick_scale:false,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:"🐆",fitzpatrick_scale:false,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:"🦓",fitzpatrick_scale:false,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:"🐅",fitzpatrick_scale:false,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:"🐃",fitzpatrick_scale:false,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:"🐂",fitzpatrick_scale:false,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:"🐄",fitzpatrick_scale:false,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:"🦌",fitzpatrick_scale:false,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:"🐪",fitzpatrick_scale:false,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:"🐫",fitzpatrick_scale:false,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:"🦒",fitzpatrick_scale:false,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:"🐘",fitzpatrick_scale:false,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:"🦏",fitzpatrick_scale:false,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:"🐐",fitzpatrick_scale:false,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:"🐏",fitzpatrick_scale:false,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:"🐑",fitzpatrick_scale:false,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:"🐎",fitzpatrick_scale:false,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:"🐖",fitzpatrick_scale:false,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:"🐀",fitzpatrick_scale:false,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:"🐁",fitzpatrick_scale:false,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:"🐓",fitzpatrick_scale:false,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:"🦃",fitzpatrick_scale:false,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:"🕊",fitzpatrick_scale:false,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:"🐕",fitzpatrick_scale:false,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:"🐩",fitzpatrick_scale:false,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:"🐈",fitzpatrick_scale:false,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:"🐇",fitzpatrick_scale:false,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:"🐿",fitzpatrick_scale:false,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:"🦔",fitzpatrick_scale:false,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:"🦝",fitzpatrick_scale:false,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:"🦙",fitzpatrick_scale:false,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:"🦛",fitzpatrick_scale:false,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:"🦘",fitzpatrick_scale:false,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:"🦡",fitzpatrick_scale:false,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:"🦢",fitzpatrick_scale:false,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:"🦚",fitzpatrick_scale:false,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:"🦜",fitzpatrick_scale:false,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:"🦞",fitzpatrick_scale:false,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:"🦟",fitzpatrick_scale:false,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:"🐾",fitzpatrick_scale:false,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:"🐉",fitzpatrick_scale:false,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:"🐲",fitzpatrick_scale:false,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:"🌵",fitzpatrick_scale:false,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:"🎄",fitzpatrick_scale:false,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:"🌲",fitzpatrick_scale:false,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:"🌳",fitzpatrick_scale:false,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:"🌴",fitzpatrick_scale:false,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:"🌱",fitzpatrick_scale:false,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:"🌿",fitzpatrick_scale:false,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:"☘",fitzpatrick_scale:false,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:"🍀",fitzpatrick_scale:false,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:"🎍",fitzpatrick_scale:false,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:"🎋",fitzpatrick_scale:false,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:"🍃",fitzpatrick_scale:false,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:"🍂",fitzpatrick_scale:false,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:"🍁",fitzpatrick_scale:false,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:"🌾",fitzpatrick_scale:false,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:"🌺",fitzpatrick_scale:false,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:"🌻",fitzpatrick_scale:false,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:"🌹",fitzpatrick_scale:false,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:"🥀",fitzpatrick_scale:false,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:"🌷",fitzpatrick_scale:false,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:"🌼",fitzpatrick_scale:false,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:"🌸",fitzpatrick_scale:false,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:"💐",fitzpatrick_scale:false,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:"🍄",fitzpatrick_scale:false,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:"🌰",fitzpatrick_scale:false,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:"🎃",fitzpatrick_scale:false,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:"🐚",fitzpatrick_scale:false,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:"🕸",fitzpatrick_scale:false,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:"🌎",fitzpatrick_scale:false,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:"🌍",fitzpatrick_scale:false,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:"🌏",fitzpatrick_scale:false,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:"🌕",fitzpatrick_scale:false,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:"🌖",fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌗",fitzpatrick_scale:false,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌘",fitzpatrick_scale:false,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌑",fitzpatrick_scale:false,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌒",fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌓",fitzpatrick_scale:false,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:"🌔",fitzpatrick_scale:false,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌚",fitzpatrick_scale:false,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌝",fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌛",fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌜",fitzpatrick_scale:false,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:"🌞",fitzpatrick_scale:false,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:"🌙",fitzpatrick_scale:false,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:"⭐",fitzpatrick_scale:false,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:"🌟",fitzpatrick_scale:false,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:"💫",fitzpatrick_scale:false,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:"✨",fitzpatrick_scale:false,category:"animals_and_nature"},comet:{keywords:["space"],char:"☄",fitzpatrick_scale:false,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:"☀️",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:"🌤",fitzpatrick_scale:false,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:"⛅",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:"🌥",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:"🌦",fitzpatrick_scale:false,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:"☁️",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:"🌧",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:"⛈",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:"🌩",fitzpatrick_scale:false,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:"⚡",fitzpatrick_scale:false,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:"🔥",fitzpatrick_scale:false,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:"💥",fitzpatrick_scale:false,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:"❄️",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:"🌨",fitzpatrick_scale:false,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:"⛄",fitzpatrick_scale:false,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:"☃",fitzpatrick_scale:false,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:"🌬",fitzpatrick_scale:false,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:"💨",fitzpatrick_scale:false,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:"🌪",fitzpatrick_scale:false,category:"animals_and_nature"},fog:{keywords:["weather"],char:"🌫",fitzpatrick_scale:false,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:"☂",fitzpatrick_scale:false,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:"☔",fitzpatrick_scale:false,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:"💧",fitzpatrick_scale:false,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:"💦",fitzpatrick_scale:false,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:"🌊",fitzpatrick_scale:false,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:"🍏",fitzpatrick_scale:false,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:"🍎",fitzpatrick_scale:false,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:"🍐",fitzpatrick_scale:false,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:"🍊",fitzpatrick_scale:false,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:"🍋",fitzpatrick_scale:false,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:"🍌",fitzpatrick_scale:false,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:"🍉",fitzpatrick_scale:false,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:"🍇",fitzpatrick_scale:false,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:"🍓",fitzpatrick_scale:false,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:"🍈",fitzpatrick_scale:false,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:"🍒",fitzpatrick_scale:false,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:"🍑",fitzpatrick_scale:false,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:"🍍",fitzpatrick_scale:false,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:"🥥",fitzpatrick_scale:false,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:"🥝",fitzpatrick_scale:false,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:"🥭",fitzpatrick_scale:false,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:"🥑",fitzpatrick_scale:false,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:"🥦",fitzpatrick_scale:false,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:"🍅",fitzpatrick_scale:false,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:"🍆",fitzpatrick_scale:false,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:"🥒",fitzpatrick_scale:false,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:"🥕",fitzpatrick_scale:false,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:"🌶",fitzpatrick_scale:false,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:"🥔",fitzpatrick_scale:false,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:"🌽",fitzpatrick_scale:false,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:"🥬",fitzpatrick_scale:false,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:"🍠",fitzpatrick_scale:false,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:"🥜",fitzpatrick_scale:false,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:"🍯",fitzpatrick_scale:false,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:"🥐",fitzpatrick_scale:false,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:"🍞",fitzpatrick_scale:false,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:"🥖",fitzpatrick_scale:false,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:"🥯",fitzpatrick_scale:false,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:"🥨",fitzpatrick_scale:false,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:"🧀",fitzpatrick_scale:false,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:"🥚",fitzpatrick_scale:false,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:"🥓",fitzpatrick_scale:false,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:"🥩",fitzpatrick_scale:false,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:"🥞",fitzpatrick_scale:false,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:"🍗",fitzpatrick_scale:false,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:"🍖",fitzpatrick_scale:false,category:"food_and_drink"},bone:{keywords:["skeleton"],char:"🦴",fitzpatrick_scale:false,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:"🍤",fitzpatrick_scale:false,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:"🍳",fitzpatrick_scale:false,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:"🍔",fitzpatrick_scale:false,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:"🍟",fitzpatrick_scale:false,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:"🥙",fitzpatrick_scale:false,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:"🌭",fitzpatrick_scale:false,category:"food_and_drink"},pizza:{keywords:["food","party"],char:"🍕",fitzpatrick_scale:false,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:"🥪",fitzpatrick_scale:false,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:"🥫",fitzpatrick_scale:false,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:"🍝",fitzpatrick_scale:false,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:"🌮",fitzpatrick_scale:false,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:"🌯",fitzpatrick_scale:false,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:"🥗",fitzpatrick_scale:false,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:"🥘",fitzpatrick_scale:false,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:"🍜",fitzpatrick_scale:false,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:"🍲",fitzpatrick_scale:false,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:"🍥",fitzpatrick_scale:false,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:"🥠",fitzpatrick_scale:false,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:"🍣",fitzpatrick_scale:false,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:"🍱",fitzpatrick_scale:false,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:"🍛",fitzpatrick_scale:false,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:"🍙",fitzpatrick_scale:false,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:"🍚",fitzpatrick_scale:false,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:"🍘",fitzpatrick_scale:false,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:"🍢",fitzpatrick_scale:false,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:"🍡",fitzpatrick_scale:false,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:"🍧",fitzpatrick_scale:false,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:"🍨",fitzpatrick_scale:false,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:"🍦",fitzpatrick_scale:false,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:"🥧",fitzpatrick_scale:false,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:"🍰",fitzpatrick_scale:false,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:"🧁",fitzpatrick_scale:false,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:"🥮",fitzpatrick_scale:false,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:"🎂",fitzpatrick_scale:false,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:"🍮",fitzpatrick_scale:false,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:"🍬",fitzpatrick_scale:false,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:"🍭",fitzpatrick_scale:false,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:"🍫",fitzpatrick_scale:false,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:"🍿",fitzpatrick_scale:false,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:"🥟",fitzpatrick_scale:false,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:"🍩",fitzpatrick_scale:false,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:"🍪",fitzpatrick_scale:false,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:"🥛",fitzpatrick_scale:false,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"🍺",fitzpatrick_scale:false,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"🍻",fitzpatrick_scale:false,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:"🥂",fitzpatrick_scale:false,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:"🍷",fitzpatrick_scale:false,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:"🥃",fitzpatrick_scale:false,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:"🍸",fitzpatrick_scale:false,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:"🍹",fitzpatrick_scale:false,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:"🍾",fitzpatrick_scale:false,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:"🍶",fitzpatrick_scale:false,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:"🍵",fitzpatrick_scale:false,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:"🥤",fitzpatrick_scale:false,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:"☕",fitzpatrick_scale:false,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:"🍼",fitzpatrick_scale:false,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:"🧂",fitzpatrick_scale:false,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:"🥄",fitzpatrick_scale:false,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:"🍴",fitzpatrick_scale:false,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:"🍽",fitzpatrick_scale:false,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:"🥣",fitzpatrick_scale:false,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:"🥡",fitzpatrick_scale:false,category:"food_and_drink"},chopsticks:{keywords:["food"],char:"🥢",fitzpatrick_scale:false,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:"⚽",fitzpatrick_scale:false,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:"🏀",fitzpatrick_scale:false,category:"activity"},football:{keywords:["sports","balls","NFL"],char:"🏈",fitzpatrick_scale:false,category:"activity"},baseball:{keywords:["sports","balls"],char:"⚾",fitzpatrick_scale:false,category:"activity"},softball:{keywords:["sports","balls"],char:"🥎",fitzpatrick_scale:false,category:"activity"},tennis:{keywords:["sports","balls","green"],char:"🎾",fitzpatrick_scale:false,category:"activity"},volleyball:{keywords:["sports","balls"],char:"🏐",fitzpatrick_scale:false,category:"activity"},rugby_football:{keywords:["sports","team"],char:"🏉",fitzpatrick_scale:false,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:"🥏",fitzpatrick_scale:false,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:"🎱",fitzpatrick_scale:false,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:"⛳",fitzpatrick_scale:false,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:"🏌️‍♀️",fitzpatrick_scale:false,category:"activity"},golfing_man:{keywords:["sports","business"],char:"🏌",fitzpatrick_scale:true,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:"🏓",fitzpatrick_scale:false,category:"activity"},badminton:{keywords:["sports"],char:"🏸",fitzpatrick_scale:false,category:"activity"},goal_net:{keywords:["sports"],char:"🥅",fitzpatrick_scale:false,category:"activity"},ice_hockey:{keywords:["sports"],char:"🏒",fitzpatrick_scale:false,category:"activity"},field_hockey:{keywords:["sports"],char:"🏑",fitzpatrick_scale:false,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:"🥍",fitzpatrick_scale:false,category:"activity"},cricket:{keywords:["sports"],char:"🏏",fitzpatrick_scale:false,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:"🎿",fitzpatrick_scale:false,category:"activity"},skier:{keywords:["sports","winter","snow"],char:"⛷",fitzpatrick_scale:false,category:"activity"},snowboarder:{keywords:["sports","winter"],char:"🏂",fitzpatrick_scale:true,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:"🤺",fitzpatrick_scale:false,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:"🤼‍♀️",fitzpatrick_scale:false,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:"🤼‍♂️",fitzpatrick_scale:false,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:"🤸‍♀️",fitzpatrick_scale:true,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:"🤸‍♂️",fitzpatrick_scale:true,category:"activity"},woman_playing_handball:{keywords:["sports"],char:"🤾‍♀️",fitzpatrick_scale:true,category:"activity"},man_playing_handball:{keywords:["sports"],char:"🤾‍♂️",fitzpatrick_scale:true,category:"activity"},ice_skate:{keywords:["sports"],char:"⛸",fitzpatrick_scale:false,category:"activity"},curling_stone:{keywords:["sports"],char:"🥌",fitzpatrick_scale:false,category:"activity"},skateboard:{keywords:["board"],char:"🛹",fitzpatrick_scale:false,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:"🛷",fitzpatrick_scale:false,category:"activity"},bow_and_arrow:{keywords:["sports"],char:"🏹",fitzpatrick_scale:false,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:"🎣",fitzpatrick_scale:false,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:"🥊",fitzpatrick_scale:false,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:"🥋",fitzpatrick_scale:false,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:"🚣‍♀️",fitzpatrick_scale:true,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:"🚣",fitzpatrick_scale:true,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:"🧗‍♀️",fitzpatrick_scale:true,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:"🧗‍♂️",fitzpatrick_scale:true,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:"🏊‍♀️",fitzpatrick_scale:true,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:"🏊",fitzpatrick_scale:true,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:"🤽‍♀️",fitzpatrick_scale:true,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:"🤽‍♂️",fitzpatrick_scale:true,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:"🧘‍♀️",fitzpatrick_scale:true,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:"🧘‍♂️",fitzpatrick_scale:true,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:"🏄‍♀️",fitzpatrick_scale:true,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:"🏄",fitzpatrick_scale:true,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:"🛀",fitzpatrick_scale:true,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:"⛹️‍♀️",fitzpatrick_scale:true,category:"activity"},basketball_man:{keywords:["sports","human"],char:"⛹",fitzpatrick_scale:true,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:"🏋️‍♀️",fitzpatrick_scale:true,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:"🏋",fitzpatrick_scale:true,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:"🚴‍♀️",fitzpatrick_scale:true,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:"🚴",fitzpatrick_scale:true,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:"🚵‍♀️",fitzpatrick_scale:true,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:"🚵",fitzpatrick_scale:true,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:"🏇",fitzpatrick_scale:true,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:"🕴",fitzpatrick_scale:true,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:"🏆",fitzpatrick_scale:false,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:"🎽",fitzpatrick_scale:false,category:"activity"},medal_sports:{keywords:["award","winning"],char:"🏅",fitzpatrick_scale:false,category:"activity"},medal_military:{keywords:["award","winning","army"],char:"🎖",fitzpatrick_scale:false,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:"🥇",fitzpatrick_scale:false,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:"🥈",fitzpatrick_scale:false,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:"🥉",fitzpatrick_scale:false,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:"🎗",fitzpatrick_scale:false,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:"🏵",fitzpatrick_scale:false,category:"activity"},ticket:{keywords:["event","concert","pass"],char:"🎫",fitzpatrick_scale:false,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:"🎟",fitzpatrick_scale:false,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:"🎭",fitzpatrick_scale:false,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:"🎨",fitzpatrick_scale:false,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:"🎪",fitzpatrick_scale:false,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:"🤹‍♀️",fitzpatrick_scale:true,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:"🤹‍♂️",fitzpatrick_scale:true,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:"🎤",fitzpatrick_scale:false,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:"🎧",fitzpatrick_scale:false,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:"🎼",fitzpatrick_scale:false,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:"🎹",fitzpatrick_scale:false,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:"🥁",fitzpatrick_scale:false,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:"🎷",fitzpatrick_scale:false,category:"activity"},trumpet:{keywords:["music","brass"],char:"🎺",fitzpatrick_scale:false,category:"activity"},guitar:{keywords:["music","instrument"],char:"🎸",fitzpatrick_scale:false,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:"🎻",fitzpatrick_scale:false,category:"activity"},clapper:{keywords:["movie","film","record"],char:"🎬",fitzpatrick_scale:false,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:"🎮",fitzpatrick_scale:false,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:"👾",fitzpatrick_scale:false,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:"🎯",fitzpatrick_scale:false,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:"🎲",fitzpatrick_scale:false,category:"activity"},chess_pawn:{keywords:["expendable"],char:"♟",fitzpatrick_scale:false,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:"🎰",fitzpatrick_scale:false,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:"🧩",fitzpatrick_scale:false,category:"activity"},bowling:{keywords:["sports","fun","play"],char:"🎳",fitzpatrick_scale:false,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:"🚗",fitzpatrick_scale:false,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:"🚕",fitzpatrick_scale:false,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:"🚙",fitzpatrick_scale:false,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:"🚌",fitzpatrick_scale:false,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:"🚎",fitzpatrick_scale:false,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:"🏎",fitzpatrick_scale:false,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:"🚓",fitzpatrick_scale:false,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:"🚑",fitzpatrick_scale:false,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:"🚒",fitzpatrick_scale:false,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:"🚐",fitzpatrick_scale:false,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:"🚚",fitzpatrick_scale:false,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:"🚛",fitzpatrick_scale:false,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:"🚜",fitzpatrick_scale:false,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:"🛴",fitzpatrick_scale:false,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:"🏍",fitzpatrick_scale:false,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:"🚲",fitzpatrick_scale:false,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:"🛵",fitzpatrick_scale:false,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:"🚨",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:"🚔",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:"🚍",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:"🚘",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:"🚖",fitzpatrick_scale:false,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:"🚡",fitzpatrick_scale:false,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:"🚠",fitzpatrick_scale:false,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:"🚟",fitzpatrick_scale:false,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:"🚃",fitzpatrick_scale:false,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:"🚋",fitzpatrick_scale:false,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:"🚝",fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:"🚄",fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:"🚅",fitzpatrick_scale:false,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:"🚈",fitzpatrick_scale:false,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:"🚞",fitzpatrick_scale:false,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:"🚂",fitzpatrick_scale:false,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:"🚆",fitzpatrick_scale:false,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:"🚇",fitzpatrick_scale:false,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:"🚊",fitzpatrick_scale:false,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:"🚉",fitzpatrick_scale:false,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:"🛸",fitzpatrick_scale:false,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:"🚁",fitzpatrick_scale:false,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:"🛩",fitzpatrick_scale:false,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:"✈️",fitzpatrick_scale:false,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:"🛫",fitzpatrick_scale:false,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:"🛬",fitzpatrick_scale:false,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:"⛵",fitzpatrick_scale:false,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:"🛥",fitzpatrick_scale:false,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:"🚤",fitzpatrick_scale:false,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:"⛴",fitzpatrick_scale:false,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:"🛳",fitzpatrick_scale:false,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:"🚀",fitzpatrick_scale:false,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:"🛰",fitzpatrick_scale:false,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:"💺",fitzpatrick_scale:false,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:"🛶",fitzpatrick_scale:false,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:"⚓",fitzpatrick_scale:false,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:"🚧",fitzpatrick_scale:false,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:"⛽",fitzpatrick_scale:false,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:"🚏",fitzpatrick_scale:false,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:"🚦",fitzpatrick_scale:false,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:"🚥",fitzpatrick_scale:false,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:"🏁",fitzpatrick_scale:false,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:"🚢",fitzpatrick_scale:false,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:"🎡",fitzpatrick_scale:false,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:"🎢",fitzpatrick_scale:false,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:"🎠",fitzpatrick_scale:false,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:"🏗",fitzpatrick_scale:false,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:"🌁",fitzpatrick_scale:false,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:"🗼",fitzpatrick_scale:false,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:"🏭",fitzpatrick_scale:false,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:"⛲",fitzpatrick_scale:false,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:"🎑",fitzpatrick_scale:false,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:"⛰",fitzpatrick_scale:false,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:"🏔",fitzpatrick_scale:false,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:"🗻",fitzpatrick_scale:false,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:"🌋",fitzpatrick_scale:false,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:"🗾",fitzpatrick_scale:false,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:"🏕",fitzpatrick_scale:false,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:"⛺",fitzpatrick_scale:false,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:"🏞",fitzpatrick_scale:false,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:"🛣",fitzpatrick_scale:false,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:"🛤",fitzpatrick_scale:false,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:"🌅",fitzpatrick_scale:false,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:"🌄",fitzpatrick_scale:false,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:"🏜",fitzpatrick_scale:false,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:"🏖",fitzpatrick_scale:false,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:"🏝",fitzpatrick_scale:false,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:"🌇",fitzpatrick_scale:false,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:"🌆",fitzpatrick_scale:false,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:"🏙",fitzpatrick_scale:false,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:"🌃",fitzpatrick_scale:false,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:"🌉",fitzpatrick_scale:false,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:"🌌",fitzpatrick_scale:false,category:"travel_and_places"},stars:{keywords:["night","photo"],char:"🌠",fitzpatrick_scale:false,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:"🎇",fitzpatrick_scale:false,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:"🎆",fitzpatrick_scale:false,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:"🌈",fitzpatrick_scale:false,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:"🏘",fitzpatrick_scale:false,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:"🏰",fitzpatrick_scale:false,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:"🏯",fitzpatrick_scale:false,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:"🏟",fitzpatrick_scale:false,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:"🗽",fitzpatrick_scale:false,category:"travel_and_places"},house:{keywords:["building","home"],char:"🏠",fitzpatrick_scale:false,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:"🏡",fitzpatrick_scale:false,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:"🏚",fitzpatrick_scale:false,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:"🏢",fitzpatrick_scale:false,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:"🏬",fitzpatrick_scale:false,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:"🏣",fitzpatrick_scale:false,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:"🏤",fitzpatrick_scale:false,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:"🏥",fitzpatrick_scale:false,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:"🏦",fitzpatrick_scale:false,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:"🏨",fitzpatrick_scale:false,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:"🏪",fitzpatrick_scale:false,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:"🏫",fitzpatrick_scale:false,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:"🏩",fitzpatrick_scale:false,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:"💒",fitzpatrick_scale:false,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:"🏛",fitzpatrick_scale:false,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:"⛪",fitzpatrick_scale:false,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:"🕌",fitzpatrick_scale:false,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:"🕍",fitzpatrick_scale:false,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:"🕋",fitzpatrick_scale:false,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:"⛩",fitzpatrick_scale:false,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:"⌚",fitzpatrick_scale:false,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:"📱",fitzpatrick_scale:false,category:"objects"},calling:{keywords:["iphone","incoming"],char:"📲",fitzpatrick_scale:false,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:"💻",fitzpatrick_scale:false,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:"⌨",fitzpatrick_scale:false,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:"🖥",fitzpatrick_scale:false,category:"objects"},printer:{keywords:["paper","ink"],char:"🖨",fitzpatrick_scale:false,category:"objects"},computer_mouse:{keywords:["click"],char:"🖱",fitzpatrick_scale:false,category:"objects"},trackball:{keywords:["technology","trackpad"],char:"🖲",fitzpatrick_scale:false,category:"objects"},joystick:{keywords:["game","play"],char:"🕹",fitzpatrick_scale:false,category:"objects"},clamp:{keywords:["tool"],char:"🗜",fitzpatrick_scale:false,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:"💽",fitzpatrick_scale:false,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:"💾",fitzpatrick_scale:false,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:"💿",fitzpatrick_scale:false,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:"📀",fitzpatrick_scale:false,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:"📼",fitzpatrick_scale:false,category:"objects"},camera:{keywords:["gadgets","photography"],char:"📷",fitzpatrick_scale:false,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:"📸",fitzpatrick_scale:false,category:"objects"},video_camera:{keywords:["film","record"],char:"📹",fitzpatrick_scale:false,category:"objects"},movie_camera:{keywords:["film","record"],char:"🎥",fitzpatrick_scale:false,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:"📽",fitzpatrick_scale:false,category:"objects"},film_strip:{keywords:["movie"],char:"🎞",fitzpatrick_scale:false,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:"📞",fitzpatrick_scale:false,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:"☎️",fitzpatrick_scale:false,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:"📟",fitzpatrick_scale:false,category:"objects"},fax:{keywords:["communication","technology"],char:"📠",fitzpatrick_scale:false,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:"📺",fitzpatrick_scale:false,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:"📻",fitzpatrick_scale:false,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:"🎙",fitzpatrick_scale:false,category:"objects"},level_slider:{keywords:["scale"],char:"🎚",fitzpatrick_scale:false,category:"objects"},control_knobs:{keywords:["dial"],char:"🎛",fitzpatrick_scale:false,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:"🧭",fitzpatrick_scale:false,category:"objects"},stopwatch:{keywords:["time","deadline"],char:"⏱",fitzpatrick_scale:false,category:"objects"},timer_clock:{keywords:["alarm"],char:"⏲",fitzpatrick_scale:false,category:"objects"},alarm_clock:{keywords:["time","wake"],char:"⏰",fitzpatrick_scale:false,category:"objects"},mantelpiece_clock:{keywords:["time"],char:"🕰",fitzpatrick_scale:false,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:"⏳",fitzpatrick_scale:false,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:"⌛",fitzpatrick_scale:false,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:"📡",fitzpatrick_scale:false,category:"objects"},battery:{keywords:["power","energy","sustain"],char:"🔋",fitzpatrick_scale:false,category:"objects"},electric_plug:{keywords:["charger","power"],char:"🔌",fitzpatrick_scale:false,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:"💡",fitzpatrick_scale:false,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:"🔦",fitzpatrick_scale:false,category:"objects"},candle:{keywords:["fire","wax"],char:"🕯",fitzpatrick_scale:false,category:"objects"},fire_extinguisher:{keywords:["quench"],char:"🧯",fitzpatrick_scale:false,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:"🗑",fitzpatrick_scale:false,category:"objects"},oil_drum:{keywords:["barrell"],char:"🛢",fitzpatrick_scale:false,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:"💸",fitzpatrick_scale:false,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:"💵",fitzpatrick_scale:false,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:"💴",fitzpatrick_scale:false,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:"💶",fitzpatrick_scale:false,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:"💷",fitzpatrick_scale:false,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:"💰",fitzpatrick_scale:false,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:"💳",fitzpatrick_scale:false,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:"💎",fitzpatrick_scale:false,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:"⚖",fitzpatrick_scale:false,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:"🧰",fitzpatrick_scale:false,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:"🔧",fitzpatrick_scale:false,category:"objects"},hammer:{keywords:["tools","build","create"],char:"🔨",fitzpatrick_scale:false,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:"⚒",fitzpatrick_scale:false,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:"🛠",fitzpatrick_scale:false,category:"objects"},pick:{keywords:["tools","dig"],char:"⛏",fitzpatrick_scale:false,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:"🔩",fitzpatrick_scale:false,category:"objects"},gear:{keywords:["cog"],char:"⚙",fitzpatrick_scale:false,category:"objects"},brick:{keywords:["bricks"],char:"🧱",fitzpatrick_scale:false,category:"objects"},chains:{keywords:["lock","arrest"],char:"⛓",fitzpatrick_scale:false,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:"🧲",fitzpatrick_scale:false,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:"🔫",fitzpatrick_scale:false,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:"💣",fitzpatrick_scale:false,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:"🧨",fitzpatrick_scale:false,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:"🔪",fitzpatrick_scale:false,category:"objects"},dagger:{keywords:["weapon"],char:"🗡",fitzpatrick_scale:false,category:"objects"},crossed_swords:{keywords:["weapon"],char:"⚔",fitzpatrick_scale:false,category:"objects"},shield:{keywords:["protection","security"],char:"🛡",fitzpatrick_scale:false,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:"🚬",fitzpatrick_scale:false,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:"☠",fitzpatrick_scale:false,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:"⚰",fitzpatrick_scale:false,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:"⚱",fitzpatrick_scale:false,category:"objects"},amphora:{keywords:["vase","jar"],char:"🏺",fitzpatrick_scale:false,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:"🔮",fitzpatrick_scale:false,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:"📿",fitzpatrick_scale:false,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:"🧿",fitzpatrick_scale:false,category:"objects"},barber:{keywords:["hair","salon","style"],char:"💈",fitzpatrick_scale:false,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:"⚗",fitzpatrick_scale:false,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:"🔭",fitzpatrick_scale:false,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:"🔬",fitzpatrick_scale:false,category:"objects"},hole:{keywords:["embarrassing"],char:"🕳",fitzpatrick_scale:false,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:"💊",fitzpatrick_scale:false,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:"💉",fitzpatrick_scale:false,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:"🧬",fitzpatrick_scale:false,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:"🦠",fitzpatrick_scale:false,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:"🧫",fitzpatrick_scale:false,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:"🧪",fitzpatrick_scale:false,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:"🌡",fitzpatrick_scale:false,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:"🧹",fitzpatrick_scale:false,category:"objects"},basket:{keywords:["laundry"],char:"🧺",fitzpatrick_scale:false,category:"objects"},toilet_paper:{keywords:["roll"],char:"🧻",fitzpatrick_scale:false,category:"objects"},label:{keywords:["sale","tag"],char:"🏷",fitzpatrick_scale:false,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:"🔖",fitzpatrick_scale:false,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:"🚽",fitzpatrick_scale:false,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:"🚿",fitzpatrick_scale:false,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:"🛁",fitzpatrick_scale:false,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:"🧼",fitzpatrick_scale:false,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:"🧽",fitzpatrick_scale:false,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:"🧴",fitzpatrick_scale:false,category:"objects"},key:{keywords:["lock","door","password"],char:"🔑",fitzpatrick_scale:false,category:"objects"},old_key:{keywords:["lock","door","password"],char:"🗝",fitzpatrick_scale:false,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:"🛋",fitzpatrick_scale:false,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:"🛌",fitzpatrick_scale:true,category:"objects"},bed:{keywords:["sleep","rest"],char:"🛏",fitzpatrick_scale:false,category:"objects"},door:{keywords:["house","entry","exit"],char:"🚪",fitzpatrick_scale:false,category:"objects"},bellhop_bell:{keywords:["service"],char:"🛎",fitzpatrick_scale:false,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:"🧸",fitzpatrick_scale:false,category:"objects"},framed_picture:{keywords:["photography"],char:"🖼",fitzpatrick_scale:false,category:"objects"},world_map:{keywords:["location","direction"],char:"🗺",fitzpatrick_scale:false,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:"⛱",fitzpatrick_scale:false,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:"🗿",fitzpatrick_scale:false,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:"🛍",fitzpatrick_scale:false,category:"objects"},shopping_cart:{keywords:["trolley"],char:"🛒",fitzpatrick_scale:false,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:"🎈",fitzpatrick_scale:false,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:"🎏",fitzpatrick_scale:false,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:"🎀",fitzpatrick_scale:false,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:"🎁",fitzpatrick_scale:false,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:"🎊",fitzpatrick_scale:false,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:"🎉",fitzpatrick_scale:false,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:"🎎",fitzpatrick_scale:false,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:"🎐",fitzpatrick_scale:false,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:"🎌",fitzpatrick_scale:false,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:"🏮",fitzpatrick_scale:false,category:"objects"},red_envelope:{keywords:["gift"],char:"🧧",fitzpatrick_scale:false,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:"✉️",fitzpatrick_scale:false,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:"📩",fitzpatrick_scale:false,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:"📨",fitzpatrick_scale:false,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:"📧",fitzpatrick_scale:false,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:"💌",fitzpatrick_scale:false,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:"📮",fitzpatrick_scale:false,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:"📪",fitzpatrick_scale:false,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:"📫",fitzpatrick_scale:false,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:"📬",fitzpatrick_scale:false,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:"📭",fitzpatrick_scale:false,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:"📦",fitzpatrick_scale:false,category:"objects"},postal_horn:{keywords:["instrument","music"],char:"📯",fitzpatrick_scale:false,category:"objects"},inbox_tray:{keywords:["email","documents"],char:"📥",fitzpatrick_scale:false,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:"📤",fitzpatrick_scale:false,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:"📜",fitzpatrick_scale:false,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:"📃",fitzpatrick_scale:false,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:"📑",fitzpatrick_scale:false,category:"objects"},receipt:{keywords:["accounting","expenses"],char:"🧾",fitzpatrick_scale:false,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:"📊",fitzpatrick_scale:false,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:"📈",fitzpatrick_scale:false,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:"📉",fitzpatrick_scale:false,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:"📄",fitzpatrick_scale:false,category:"objects"},date:{keywords:["calendar","schedule"],char:"📅",fitzpatrick_scale:false,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:"📆",fitzpatrick_scale:false,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:"🗓",fitzpatrick_scale:false,category:"objects"},card_index:{keywords:["business","stationery"],char:"📇",fitzpatrick_scale:false,category:"objects"},card_file_box:{keywords:["business","stationery"],char:"🗃",fitzpatrick_scale:false,category:"objects"},ballot_box:{keywords:["election","vote"],char:"🗳",fitzpatrick_scale:false,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:"🗄",fitzpatrick_scale:false,category:"objects"},clipboard:{keywords:["stationery","documents"],char:"📋",fitzpatrick_scale:false,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:"🗒",fitzpatrick_scale:false,category:"objects"},file_folder:{keywords:["documents","business","office"],char:"📁",fitzpatrick_scale:false,category:"objects"},open_file_folder:{keywords:["documents","load"],char:"📂",fitzpatrick_scale:false,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:"🗂",fitzpatrick_scale:false,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:"🗞",fitzpatrick_scale:false,category:"objects"},newspaper:{keywords:["press","headline"],char:"📰",fitzpatrick_scale:false,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:"📓",fitzpatrick_scale:false,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:"📕",fitzpatrick_scale:false,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:"📗",fitzpatrick_scale:false,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:"📘",fitzpatrick_scale:false,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:"📙",fitzpatrick_scale:false,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:"📔",fitzpatrick_scale:false,category:"objects"},ledger:{keywords:["notes","paper"],char:"📒",fitzpatrick_scale:false,category:"objects"},books:{keywords:["literature","library","study"],char:"📚",fitzpatrick_scale:false,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:"📖",fitzpatrick_scale:false,category:"objects"},safety_pin:{keywords:["diaper"],char:"🧷",fitzpatrick_scale:false,category:"objects"},link:{keywords:["rings","url"],char:"🔗",fitzpatrick_scale:false,category:"objects"},paperclip:{keywords:["documents","stationery"],char:"📎",fitzpatrick_scale:false,category:"objects"},paperclips:{keywords:["documents","stationery"],char:"🖇",fitzpatrick_scale:false,category:"objects"},scissors:{keywords:["stationery","cut"],char:"✂️",fitzpatrick_scale:false,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:"📐",fitzpatrick_scale:false,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:"📏",fitzpatrick_scale:false,category:"objects"},abacus:{keywords:["calculation"],char:"🧮",fitzpatrick_scale:false,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:"📌",fitzpatrick_scale:false,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:"📍",fitzpatrick_scale:false,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:"🚩",fitzpatrick_scale:false,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:"🏳",fitzpatrick_scale:false,category:"objects"},black_flag:{keywords:["pirate"],char:"🏴",fitzpatrick_scale:false,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:"🏳️‍🌈",fitzpatrick_scale:false,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:"🔐",fitzpatrick_scale:false,category:"objects"},lock:{keywords:["security","password","padlock"],char:"🔒",fitzpatrick_scale:false,category:"objects"},unlock:{keywords:["privacy","security"],char:"🔓",fitzpatrick_scale:false,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:"🔏",fitzpatrick_scale:false,category:"objects"},pen:{keywords:["stationery","writing","write"],char:"🖊",fitzpatrick_scale:false,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:"🖋",fitzpatrick_scale:false,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:"✒️",fitzpatrick_scale:false,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:"📝",fitzpatrick_scale:false,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:"✏️",fitzpatrick_scale:false,category:"objects"},crayon:{keywords:["drawing","creativity"],char:"🖍",fitzpatrick_scale:false,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:"🖌",fitzpatrick_scale:false,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:"🔍",fitzpatrick_scale:false,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:"🔎",fitzpatrick_scale:false,category:"objects"},heart:{keywords:["love","like","valentines"],char:"❤️",fitzpatrick_scale:false,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:"🧡",fitzpatrick_scale:false,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:"💛",fitzpatrick_scale:false,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:"💚",fitzpatrick_scale:false,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:"💙",fitzpatrick_scale:false,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:"💜",fitzpatrick_scale:false,category:"symbols"},black_heart:{keywords:["evil"],char:"🖤",fitzpatrick_scale:false,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:"💔",fitzpatrick_scale:false,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:"❣",fitzpatrick_scale:false,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:"💕",fitzpatrick_scale:false,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:"💞",fitzpatrick_scale:false,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:"💓",fitzpatrick_scale:false,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:"💗",fitzpatrick_scale:false,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:"💖",fitzpatrick_scale:false,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:"💘",fitzpatrick_scale:false,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:"💝",fitzpatrick_scale:false,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:"💟",fitzpatrick_scale:false,category:"symbols"},peace_symbol:{keywords:["hippie"],char:"☮",fitzpatrick_scale:false,category:"symbols"},latin_cross:{keywords:["christianity"],char:"✝",fitzpatrick_scale:false,category:"symbols"},star_and_crescent:{keywords:["islam"],char:"☪",fitzpatrick_scale:false,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"🕉",fitzpatrick_scale:false,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"☸",fitzpatrick_scale:false,category:"symbols"},star_of_david:{keywords:["judaism"],char:"✡",fitzpatrick_scale:false,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:"🔯",fitzpatrick_scale:false,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:"🕎",fitzpatrick_scale:false,category:"symbols"},yin_yang:{keywords:["balance"],char:"☯",fitzpatrick_scale:false,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:"☦",fitzpatrick_scale:false,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:"🛐",fitzpatrick_scale:false,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:"⛎",fitzpatrick_scale:false,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:"♈",fitzpatrick_scale:false,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:"♉",fitzpatrick_scale:false,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:"♊",fitzpatrick_scale:false,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:"♋",fitzpatrick_scale:false,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:"♌",fitzpatrick_scale:false,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:"♍",fitzpatrick_scale:false,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:"♎",fitzpatrick_scale:false,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:"♏",fitzpatrick_scale:false,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:"♐",fitzpatrick_scale:false,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:"♑",fitzpatrick_scale:false,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:"♒",fitzpatrick_scale:false,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:"♓",fitzpatrick_scale:false,category:"symbols"},id:{keywords:["purple-square","words"],char:"🆔",fitzpatrick_scale:false,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:"⚛",fitzpatrick_scale:false,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:"🈳",fitzpatrick_scale:false,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:"🈹",fitzpatrick_scale:false,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:"☢",fitzpatrick_scale:false,category:"symbols"},biohazard:{keywords:["danger"],char:"☣",fitzpatrick_scale:false,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:"📴",fitzpatrick_scale:false,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:"📳",fitzpatrick_scale:false,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:"🈶",fitzpatrick_scale:false,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:"🈚",fitzpatrick_scale:false,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:"🈸",fitzpatrick_scale:false,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:"🈺",fitzpatrick_scale:false,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:"🈷️",fitzpatrick_scale:false,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:"✴️",fitzpatrick_scale:false,category:"symbols"},vs:{keywords:["words","orange-square"],char:"🆚",fitzpatrick_scale:false,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:"🉑",fitzpatrick_scale:false,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:"💮",fitzpatrick_scale:false,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:"🉐",fitzpatrick_scale:false,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:"㊙️",fitzpatrick_scale:false,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:"㊗️",fitzpatrick_scale:false,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:"🈴",fitzpatrick_scale:false,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:"🈵",fitzpatrick_scale:false,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:"🈲",fitzpatrick_scale:false,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:"🅰️",fitzpatrick_scale:false,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:"🅱️",fitzpatrick_scale:false,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:"🆎",fitzpatrick_scale:false,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:"🆑",fitzpatrick_scale:false,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:"🅾️",fitzpatrick_scale:false,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:"🆘",fitzpatrick_scale:false,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:"⛔",fitzpatrick_scale:false,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:"📛",fitzpatrick_scale:false,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:"🚫",fitzpatrick_scale:false,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:"❌",fitzpatrick_scale:false,category:"symbols"},o:{keywords:["circle","round"],char:"⭕",fitzpatrick_scale:false,category:"symbols"},stop_sign:{keywords:["stop"],char:"🛑",fitzpatrick_scale:false,category:"symbols"},anger:{keywords:["angry","mad"],char:"💢",fitzpatrick_scale:false,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:"♨️",fitzpatrick_scale:false,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:"🚷",fitzpatrick_scale:false,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:"🚯",fitzpatrick_scale:false,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:"🚳",fitzpatrick_scale:false,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:"🚱",fitzpatrick_scale:false,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:"🔞",fitzpatrick_scale:false,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:"📵",fitzpatrick_scale:false,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:"❗",fitzpatrick_scale:false,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:"❕",fitzpatrick_scale:false,category:"symbols"},question:{keywords:["doubt","confused"],char:"❓",fitzpatrick_scale:false,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:"❔",fitzpatrick_scale:false,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:"‼️",fitzpatrick_scale:false,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:"⁉️",fitzpatrick_scale:false,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:"💯",fitzpatrick_scale:false,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:"🔅",fitzpatrick_scale:false,category:"symbols"},high_brightness:{keywords:["sun","light"],char:"🔆",fitzpatrick_scale:false,category:"symbols"},trident:{keywords:["weapon","spear"],char:"🔱",fitzpatrick_scale:false,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:"⚜",fitzpatrick_scale:false,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:"〽️",fitzpatrick_scale:false,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:"⚠️",fitzpatrick_scale:false,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:"🚸",fitzpatrick_scale:false,category:"symbols"},beginner:{keywords:["badge","shield"],char:"🔰",fitzpatrick_scale:false,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:"♻️",fitzpatrick_scale:false,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:"🈯",fitzpatrick_scale:false,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:"💹",fitzpatrick_scale:false,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:"❇️",fitzpatrick_scale:false,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:"✳️",fitzpatrick_scale:false,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:"❎",fitzpatrick_scale:false,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:"✅",fitzpatrick_scale:false,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:"💠",fitzpatrick_scale:false,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:"🌀",fitzpatrick_scale:false,category:"symbols"},loop:{keywords:["tape","cassette"],char:"➿",fitzpatrick_scale:false,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:"🌐",fitzpatrick_scale:false,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:"Ⓜ️",fitzpatrick_scale:false,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:"🏧",fitzpatrick_scale:false,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:"🈂️",fitzpatrick_scale:false,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:"🛂",fitzpatrick_scale:false,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:"🛃",fitzpatrick_scale:false,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:"🛄",fitzpatrick_scale:false,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:"🛅",fitzpatrick_scale:false,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:"♿",fitzpatrick_scale:false,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:"🚭",fitzpatrick_scale:false,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:"🚾",fitzpatrick_scale:false,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:"🅿️",fitzpatrick_scale:false,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:"🚰",fitzpatrick_scale:false,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:"🚹",fitzpatrick_scale:false,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:"🚺",fitzpatrick_scale:false,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:"🚼",fitzpatrick_scale:false,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:"🚻",fitzpatrick_scale:false,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:"🚮",fitzpatrick_scale:false,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:"🎦",fitzpatrick_scale:false,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:"📶",fitzpatrick_scale:false,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:"🈁",fitzpatrick_scale:false,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:"🆖",fitzpatrick_scale:false,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:"🆗",fitzpatrick_scale:false,category:"symbols"},up:{keywords:["blue-square","above","high"],char:"🆙",fitzpatrick_scale:false,category:"symbols"},cool:{keywords:["words","blue-square"],char:"🆒",fitzpatrick_scale:false,category:"symbols"},new:{keywords:["blue-square","words","start"],char:"🆕",fitzpatrick_scale:false,category:"symbols"},free:{keywords:["blue-square","words"],char:"🆓",fitzpatrick_scale:false,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:"0️⃣",fitzpatrick_scale:false,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:"1️⃣",fitzpatrick_scale:false,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:"2️⃣",fitzpatrick_scale:false,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:"3️⃣",fitzpatrick_scale:false,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:"4️⃣",fitzpatrick_scale:false,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:"5️⃣",fitzpatrick_scale:false,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:"6️⃣",fitzpatrick_scale:false,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:"7️⃣",fitzpatrick_scale:false,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:"8️⃣",fitzpatrick_scale:false,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:"9️⃣",fitzpatrick_scale:false,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:"🔟",fitzpatrick_scale:false,category:"symbols"},asterisk:{keywords:["star","keycap"],char:"*⃣",fitzpatrick_scale:false,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:"🔢",fitzpatrick_scale:false,category:"symbols"},eject_button:{keywords:["blue-square"],char:"⏏️",fitzpatrick_scale:false,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:"▶️",fitzpatrick_scale:false,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:"⏸",fitzpatrick_scale:false,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:"⏭",fitzpatrick_scale:false,category:"symbols"},stop_button:{keywords:["blue-square"],char:"⏹",fitzpatrick_scale:false,category:"symbols"},record_button:{keywords:["blue-square"],char:"⏺",fitzpatrick_scale:false,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:"⏯",fitzpatrick_scale:false,category:"symbols"},previous_track_button:{keywords:["backward"],char:"⏮",fitzpatrick_scale:false,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:"⏩",fitzpatrick_scale:false,category:"symbols"},rewind:{keywords:["play","blue-square"],char:"⏪",fitzpatrick_scale:false,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:"🔀",fitzpatrick_scale:false,category:"symbols"},repeat:{keywords:["loop","record"],char:"🔁",fitzpatrick_scale:false,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:"🔂",fitzpatrick_scale:false,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:"◀️",fitzpatrick_scale:false,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:"🔼",fitzpatrick_scale:false,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:"🔽",fitzpatrick_scale:false,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:"⏫",fitzpatrick_scale:false,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:"⏬",fitzpatrick_scale:false,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:"➡️",fitzpatrick_scale:false,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:"⬅️",fitzpatrick_scale:false,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:"⬆️",fitzpatrick_scale:false,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:"⬇️",fitzpatrick_scale:false,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:"↗️",fitzpatrick_scale:false,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:"↘️",fitzpatrick_scale:false,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:"↙️",fitzpatrick_scale:false,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:"↖️",fitzpatrick_scale:false,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:"↕️",fitzpatrick_scale:false,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:"↔️",fitzpatrick_scale:false,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:"🔄",fitzpatrick_scale:false,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:"↪️",fitzpatrick_scale:false,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:"↩️",fitzpatrick_scale:false,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:"⤴️",fitzpatrick_scale:false,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:"⤵️",fitzpatrick_scale:false,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:"#️⃣",fitzpatrick_scale:false,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:"ℹ️",fitzpatrick_scale:false,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:"🔤",fitzpatrick_scale:false,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:"🔡",fitzpatrick_scale:false,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:"🔠",fitzpatrick_scale:false,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:"🔣",fitzpatrick_scale:false,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:"🎵",fitzpatrick_scale:false,category:"symbols"},notes:{keywords:["music","score"],char:"🎶",fitzpatrick_scale:false,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:"〰️",fitzpatrick_scale:false,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:"➰",fitzpatrick_scale:false,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:"✔️",fitzpatrick_scale:false,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:"🔃",fitzpatrick_scale:false,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:"➕",fitzpatrick_scale:false,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:"➖",fitzpatrick_scale:false,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:"➗",fitzpatrick_scale:false,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:"✖️",fitzpatrick_scale:false,category:"symbols"},infinity:{keywords:["forever"],char:"♾",fitzpatrick_scale:false,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:"💲",fitzpatrick_scale:false,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:"💱",fitzpatrick_scale:false,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:"©️",fitzpatrick_scale:false,category:"symbols"},registered:{keywords:["alphabet","circle"],char:"®️",fitzpatrick_scale:false,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:"™️",fitzpatrick_scale:false,category:"symbols"},end:{keywords:["words","arrow"],char:"🔚",fitzpatrick_scale:false,category:"symbols"},back:{keywords:["arrow","words","return"],char:"🔙",fitzpatrick_scale:false,category:"symbols"},on:{keywords:["arrow","words"],char:"🔛",fitzpatrick_scale:false,category:"symbols"},top:{keywords:["words","blue-square"],char:"🔝",fitzpatrick_scale:false,category:"symbols"},soon:{keywords:["arrow","words"],char:"🔜",fitzpatrick_scale:false,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:"☑️",fitzpatrick_scale:false,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:"🔘",fitzpatrick_scale:false,category:"symbols"},white_circle:{keywords:["shape","round"],char:"⚪",fitzpatrick_scale:false,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:"⚫",fitzpatrick_scale:false,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:"🔴",fitzpatrick_scale:false,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:"🔵",fitzpatrick_scale:false,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:"🔸",fitzpatrick_scale:false,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:"🔹",fitzpatrick_scale:false,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:"🔶",fitzpatrick_scale:false,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:"🔷",fitzpatrick_scale:false,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:"🔺",fitzpatrick_scale:false,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:"▪️",fitzpatrick_scale:false,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:"▫️",fitzpatrick_scale:false,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:"⬛",fitzpatrick_scale:false,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:"⬜",fitzpatrick_scale:false,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:"🔻",fitzpatrick_scale:false,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:"◼️",fitzpatrick_scale:false,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:"◻️",fitzpatrick_scale:false,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:"◾",fitzpatrick_scale:false,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:"◽",fitzpatrick_scale:false,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:"🔲",fitzpatrick_scale:false,category:"symbols"},white_square_button:{keywords:["shape","input"],char:"🔳",fitzpatrick_scale:false,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:"🔈",fitzpatrick_scale:false,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:"🔉",fitzpatrick_scale:false,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:"🔊",fitzpatrick_scale:false,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:"🔇",fitzpatrick_scale:false,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:"📣",fitzpatrick_scale:false,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:"📢",fitzpatrick_scale:false,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:"🔔",fitzpatrick_scale:false,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:"🔕",fitzpatrick_scale:false,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:"🃏",fitzpatrick_scale:false,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:"🀄",fitzpatrick_scale:false,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:"♠️",fitzpatrick_scale:false,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:"♣️",fitzpatrick_scale:false,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:"♥️",fitzpatrick_scale:false,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:"♦️",fitzpatrick_scale:false,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:"🎴",fitzpatrick_scale:false,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:"💭",fitzpatrick_scale:false,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:"🗯",fitzpatrick_scale:false,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:"💬",fitzpatrick_scale:false,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:"🗨",fitzpatrick_scale:false,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:"🕐",fitzpatrick_scale:false,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:"🕑",fitzpatrick_scale:false,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:"🕒",fitzpatrick_scale:false,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:"🕓",fitzpatrick_scale:false,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:"🕔",fitzpatrick_scale:false,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:"🕕",fitzpatrick_scale:false,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:"🕖",fitzpatrick_scale:false,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:"🕗",fitzpatrick_scale:false,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:"🕘",fitzpatrick_scale:false,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:"🕙",fitzpatrick_scale:false,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:"🕚",fitzpatrick_scale:false,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:"🕛",fitzpatrick_scale:false,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:"🕜",fitzpatrick_scale:false,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:"🕝",fitzpatrick_scale:false,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:"🕞",fitzpatrick_scale:false,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:"🕟",fitzpatrick_scale:false,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:"🕠",fitzpatrick_scale:false,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:"🕡",fitzpatrick_scale:false,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:"🕢",fitzpatrick_scale:false,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:"🕣",fitzpatrick_scale:false,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:"🕤",fitzpatrick_scale:false,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:"🕥",fitzpatrick_scale:false,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:"🕦",fitzpatrick_scale:false,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:"🕧",fitzpatrick_scale:false,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:"🇦🇫",fitzpatrick_scale:false,category:"flags"},aland_islands:{keywords:["Åland","islands","flag","nation","country","banner"],char:"🇦🇽",fitzpatrick_scale:false,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:"🇦🇱",fitzpatrick_scale:false,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:"🇩🇿",fitzpatrick_scale:false,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:"🇦🇸",fitzpatrick_scale:false,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:"🇦🇩",fitzpatrick_scale:false,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:"🇦🇴",fitzpatrick_scale:false,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:"🇦🇮",fitzpatrick_scale:false,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:"🇦🇶",fitzpatrick_scale:false,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:"🇦🇬",fitzpatrick_scale:false,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:"🇦🇷",fitzpatrick_scale:false,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:"🇦🇲",fitzpatrick_scale:false,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:"🇦🇼",fitzpatrick_scale:false,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:"🇦🇺",fitzpatrick_scale:false,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:"🇦🇹",fitzpatrick_scale:false,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:"🇦🇿",fitzpatrick_scale:false,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:"🇧🇸",fitzpatrick_scale:false,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:"🇧🇭",fitzpatrick_scale:false,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:"🇧🇩",fitzpatrick_scale:false,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:"🇧🇧",fitzpatrick_scale:false,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:"🇧🇾",fitzpatrick_scale:false,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:"🇧🇪",fitzpatrick_scale:false,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:"🇧🇿",fitzpatrick_scale:false,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:"🇧🇯",fitzpatrick_scale:false,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:"🇧🇲",fitzpatrick_scale:false,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:"🇧🇹",fitzpatrick_scale:false,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:"🇧🇴",fitzpatrick_scale:false,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:"🇧🇶",fitzpatrick_scale:false,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:"🇧🇦",fitzpatrick_scale:false,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:"🇧🇼",fitzpatrick_scale:false,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:"🇧🇷",fitzpatrick_scale:false,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:"🇮🇴",fitzpatrick_scale:false,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:"🇻🇬",fitzpatrick_scale:false,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:"🇧🇳",fitzpatrick_scale:false,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:"🇧🇬",fitzpatrick_scale:false,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:"🇧🇫",fitzpatrick_scale:false,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:"🇧🇮",fitzpatrick_scale:false,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:"🇨🇻",fitzpatrick_scale:false,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:"🇰🇭",fitzpatrick_scale:false,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:"🇨🇲",fitzpatrick_scale:false,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:"🇨🇦",fitzpatrick_scale:false,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:"🇮🇨",fitzpatrick_scale:false,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:"🇰🇾",fitzpatrick_scale:false,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:"🇨🇫",fitzpatrick_scale:false,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:"🇹🇩",fitzpatrick_scale:false,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:"🇨🇱",fitzpatrick_scale:false,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:"🇨🇳",fitzpatrick_scale:false,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:"🇨🇽",fitzpatrick_scale:false,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:"🇨🇨",fitzpatrick_scale:false,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:"🇨🇴",fitzpatrick_scale:false,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:"🇰🇲",fitzpatrick_scale:false,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:"🇨🇬",fitzpatrick_scale:false,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:"🇨🇩",fitzpatrick_scale:false,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:"🇨🇰",fitzpatrick_scale:false,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:"🇨🇷",fitzpatrick_scale:false,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:"🇭🇷",fitzpatrick_scale:false,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:"🇨🇺",fitzpatrick_scale:false,category:"flags"},curacao:{keywords:["curaçao","flag","nation","country","banner"],char:"🇨🇼",fitzpatrick_scale:false,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:"🇨🇾",fitzpatrick_scale:false,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:"🇨🇿",fitzpatrick_scale:false,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:"🇩🇰",fitzpatrick_scale:false,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:"🇩🇯",fitzpatrick_scale:false,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:"🇩🇲",fitzpatrick_scale:false,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:"🇩🇴",fitzpatrick_scale:false,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:"🇪🇨",fitzpatrick_scale:false,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:"🇪🇬",fitzpatrick_scale:false,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:"🇸🇻",fitzpatrick_scale:false,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:"🇬🇶",fitzpatrick_scale:false,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:"🇪🇷",fitzpatrick_scale:false,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:"🇪🇪",fitzpatrick_scale:false,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:"🇪🇹",fitzpatrick_scale:false,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:"🇪🇺",fitzpatrick_scale:false,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:"🇫🇰",fitzpatrick_scale:false,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:"🇫🇴",fitzpatrick_scale:false,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:"🇫🇯",fitzpatrick_scale:false,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:"🇫🇮",fitzpatrick_scale:false,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:"🇫🇷",fitzpatrick_scale:false,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:"🇬🇫",fitzpatrick_scale:false,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:"🇵🇫",fitzpatrick_scale:false,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:"🇹🇫",fitzpatrick_scale:false,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:"🇬🇦",fitzpatrick_scale:false,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:"🇬🇲",fitzpatrick_scale:false,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:"🇬🇪",fitzpatrick_scale:false,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:"🇩🇪",fitzpatrick_scale:false,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:"🇬🇭",fitzpatrick_scale:false,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:"🇬🇮",fitzpatrick_scale:false,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:"🇬🇷",fitzpatrick_scale:false,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:"🇬🇱",fitzpatrick_scale:false,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:"🇬🇩",fitzpatrick_scale:false,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:"🇬🇵",fitzpatrick_scale:false,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:"🇬🇺",fitzpatrick_scale:false,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:"🇬🇹",fitzpatrick_scale:false,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:"🇬🇬",fitzpatrick_scale:false,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:"🇬🇳",fitzpatrick_scale:false,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:"🇬🇼",fitzpatrick_scale:false,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:"🇬🇾",fitzpatrick_scale:false,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:"🇭🇹",fitzpatrick_scale:false,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:"🇭🇳",fitzpatrick_scale:false,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:"🇭🇰",fitzpatrick_scale:false,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:"🇭🇺",fitzpatrick_scale:false,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:"🇮🇸",fitzpatrick_scale:false,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:"🇮🇳",fitzpatrick_scale:false,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:"🇮🇩",fitzpatrick_scale:false,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:"🇮🇷",fitzpatrick_scale:false,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:"🇮🇶",fitzpatrick_scale:false,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:"🇮🇪",fitzpatrick_scale:false,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:"🇮🇲",fitzpatrick_scale:false,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:"🇮🇱",fitzpatrick_scale:false,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:"🇮🇹",fitzpatrick_scale:false,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:"🇨🇮",fitzpatrick_scale:false,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:"🇯🇲",fitzpatrick_scale:false,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:"🇯🇵",fitzpatrick_scale:false,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:"🇯🇪",fitzpatrick_scale:false,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:"🇯🇴",fitzpatrick_scale:false,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:"🇰🇿",fitzpatrick_scale:false,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:"🇰🇪",fitzpatrick_scale:false,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:"🇰🇮",fitzpatrick_scale:false,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:"🇽🇰",fitzpatrick_scale:false,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:"🇰🇼",fitzpatrick_scale:false,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:"🇰🇬",fitzpatrick_scale:false,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:"🇱🇦",fitzpatrick_scale:false,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:"🇱🇻",fitzpatrick_scale:false,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:"🇱🇧",fitzpatrick_scale:false,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:"🇱🇸",fitzpatrick_scale:false,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:"🇱🇷",fitzpatrick_scale:false,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:"🇱🇾",fitzpatrick_scale:false,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:"🇱🇮",fitzpatrick_scale:false,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:"🇱🇹",fitzpatrick_scale:false,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:"🇱🇺",fitzpatrick_scale:false,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:"🇲🇴",fitzpatrick_scale:false,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:"🇲🇰",fitzpatrick_scale:false,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:"🇲🇬",fitzpatrick_scale:false,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:"🇲🇼",fitzpatrick_scale:false,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:"🇲🇾",fitzpatrick_scale:false,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:"🇲🇻",fitzpatrick_scale:false,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:"🇲🇱",fitzpatrick_scale:false,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:"🇲🇹",fitzpatrick_scale:false,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:"🇲🇭",fitzpatrick_scale:false,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:"🇲🇶",fitzpatrick_scale:false,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:"🇲🇷",fitzpatrick_scale:false,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:"🇲🇺",fitzpatrick_scale:false,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:"🇾🇹",fitzpatrick_scale:false,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:"🇲🇽",fitzpatrick_scale:false,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:"🇫🇲",fitzpatrick_scale:false,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:"🇲🇩",fitzpatrick_scale:false,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:"🇲🇨",fitzpatrick_scale:false,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:"🇲🇳",fitzpatrick_scale:false,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:"🇲🇪",fitzpatrick_scale:false,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:"🇲🇸",fitzpatrick_scale:false,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:"🇲🇦",fitzpatrick_scale:false,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:"🇲🇿",fitzpatrick_scale:false,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:"🇲🇲",fitzpatrick_scale:false,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:"🇳🇦",fitzpatrick_scale:false,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:"🇳🇷",fitzpatrick_scale:false,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:"🇳🇵",fitzpatrick_scale:false,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:"🇳🇱",fitzpatrick_scale:false,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:"🇳🇨",fitzpatrick_scale:false,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:"🇳🇿",fitzpatrick_scale:false,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:"🇳🇮",fitzpatrick_scale:false,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:"🇳🇪",fitzpatrick_scale:false,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:"🇳🇬",fitzpatrick_scale:false,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:"🇳🇺",fitzpatrick_scale:false,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:"🇳🇫",fitzpatrick_scale:false,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:"🇲🇵",fitzpatrick_scale:false,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:"🇰🇵",fitzpatrick_scale:false,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:"🇳🇴",fitzpatrick_scale:false,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:"🇴🇲",fitzpatrick_scale:false,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:"🇵🇰",fitzpatrick_scale:false,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:"🇵🇼",fitzpatrick_scale:false,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:"🇵🇸",fitzpatrick_scale:false,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:"🇵🇦",fitzpatrick_scale:false,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:"🇵🇬",fitzpatrick_scale:false,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:"🇵🇾",fitzpatrick_scale:false,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:"🇵🇪",fitzpatrick_scale:false,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:"🇵🇭",fitzpatrick_scale:false,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:"🇵🇳",fitzpatrick_scale:false,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:"🇵🇱",fitzpatrick_scale:false,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:"🇵🇹",fitzpatrick_scale:false,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:"🇵🇷",fitzpatrick_scale:false,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:"🇶🇦",fitzpatrick_scale:false,category:"flags"},reunion:{keywords:["réunion","flag","nation","country","banner"],char:"🇷🇪",fitzpatrick_scale:false,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:"🇷🇴",fitzpatrick_scale:false,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:"🇷🇺",fitzpatrick_scale:false,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:"🇷🇼",fitzpatrick_scale:false,category:"flags"},st_barthelemy:{keywords:["saint","barthélemy","flag","nation","country","banner"],char:"🇧🇱",fitzpatrick_scale:false,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:"🇸🇭",fitzpatrick_scale:false,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:"🇰🇳",fitzpatrick_scale:false,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:"🇱🇨",fitzpatrick_scale:false,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:"🇵🇲",fitzpatrick_scale:false,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:"🇻🇨",fitzpatrick_scale:false,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:"🇼🇸",fitzpatrick_scale:false,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:"🇸🇲",fitzpatrick_scale:false,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:"🇸🇹",fitzpatrick_scale:false,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:"🇸🇦",fitzpatrick_scale:false,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:"🇸🇳",fitzpatrick_scale:false,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:"🇷🇸",fitzpatrick_scale:false,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:"🇸🇨",fitzpatrick_scale:false,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:"🇸🇱",fitzpatrick_scale:false,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:"🇸🇬",fitzpatrick_scale:false,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:"🇸🇽",fitzpatrick_scale:false,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:"🇸🇰",fitzpatrick_scale:false,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:"🇸🇮",fitzpatrick_scale:false,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:"🇸🇧",fitzpatrick_scale:false,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:"🇸🇴",fitzpatrick_scale:false,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:"🇿🇦",fitzpatrick_scale:false,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:"🇬🇸",fitzpatrick_scale:false,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:"🇰🇷",fitzpatrick_scale:false,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:"🇸🇸",fitzpatrick_scale:false,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:"🇪🇸",fitzpatrick_scale:false,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:"🇱🇰",fitzpatrick_scale:false,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:"🇸🇩",fitzpatrick_scale:false,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:"🇸🇷",fitzpatrick_scale:false,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:"🇸🇿",fitzpatrick_scale:false,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:"🇸🇪",fitzpatrick_scale:false,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:"🇨🇭",fitzpatrick_scale:false,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:"🇸🇾",fitzpatrick_scale:false,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:"🇹🇼",fitzpatrick_scale:false,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:"🇹🇯",fitzpatrick_scale:false,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:"🇹🇿",fitzpatrick_scale:false,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:"🇹🇭",fitzpatrick_scale:false,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:"🇹🇱",fitzpatrick_scale:false,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:"🇹🇬",fitzpatrick_scale:false,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:"🇹🇰",fitzpatrick_scale:false,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:"🇹🇴",fitzpatrick_scale:false,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:"🇹🇹",fitzpatrick_scale:false,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:"🇹🇳",fitzpatrick_scale:false,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:"🇹🇷",fitzpatrick_scale:false,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:"🇹🇲",fitzpatrick_scale:false,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:"🇹🇨",fitzpatrick_scale:false,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:"🇹🇻",fitzpatrick_scale:false,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:"🇺🇬",fitzpatrick_scale:false,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:"🇺🇦",fitzpatrick_scale:false,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:"🇦🇪",fitzpatrick_scale:false,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:"🇬🇧",fitzpatrick_scale:false,category:"flags"},england:{keywords:["flag","english"],char:"🏴󠁧󠁢󠁥󠁮󠁧󠁿",fitzpatrick_scale:false,category:"flags"},scotland:{keywords:["flag","scottish"],char:"🏴󠁧󠁢󠁳󠁣󠁴󠁿",fitzpatrick_scale:false,category:"flags"},wales:{keywords:["flag","welsh"],char:"🏴󠁧󠁢󠁷󠁬󠁳󠁿",fitzpatrick_scale:false,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:"🇺🇸",fitzpatrick_scale:false,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:"🇻🇮",fitzpatrick_scale:false,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:"🇺🇾",fitzpatrick_scale:false,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:"🇺🇿",fitzpatrick_scale:false,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:"🇻🇺",fitzpatrick_scale:false,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:"🇻🇦",fitzpatrick_scale:false,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:"🇻🇪",fitzpatrick_scale:false,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:"🇻🇳",fitzpatrick_scale:false,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:"🇼🇫",fitzpatrick_scale:false,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:"🇪🇭",fitzpatrick_scale:false,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:"🇾🇪",fitzpatrick_scale:false,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:"🇿🇲",fitzpatrick_scale:false,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:"🇿🇼",fitzpatrick_scale:false,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:"🇺🇳",fitzpatrick_scale:false,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:"🏴‍☠️",fitzpatrick_scale:false,category:"flags"}}); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojis.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojis.min.js new file mode 100644 index 0000000000..5a1c49160a --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/js/emojis.min.js @@ -0,0 +1,2 @@ +// Source: npm package: emojilib, file:emojis.json +window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:"\u{1f600}",fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:"\u{1f62c}",fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:"\u{1f601}",fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:"\u{1f602}",fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:"\u{1f923}",fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:"\u{1f973}",fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:"\u{1f603}",fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:"\u{1f604}",fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:"\u{1f605}",fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:"\u{1f606}",fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:"\u{1f607}",fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:"\u{1f609}",fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:"\u{1f60a}",fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:"\u{1f642}",fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:"\u{1f643}",fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:"\u263a\ufe0f",fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:"\u{1f60b}",fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:"\u{1f60c}",fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:"\u{1f60d}",fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:"\u{1f970}",fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"\u{1f618}",fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:"\u{1f617}",fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:"\u{1f619}",fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"\u{1f61a}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:"\u{1f61c}",fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],char:"\u{1f92a}",fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:"\u{1f928}",fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:"\u{1f9d0}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:"\u{1f61d}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:"\u{1f61b}",fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:"\u{1f911}",fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:"\u{1f913}",fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:"\u{1f60e}",fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:"\u{1f929}",fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],char:"\u{1f921}",fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:"\u{1f920}",fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],char:"\u{1f917}",fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:"\u{1f60f}",fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:"\u{1f636}",fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:"\u{1f610}",fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:"\u{1f611}",fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:"\u{1f612}",fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:"\u{1f644}",fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:"\u{1f914}",fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:"\u{1f925}",fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:"\u{1f92d}",fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:"\u{1f92b}",fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:"\u{1f92c}",fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:"\u{1f92f}",fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:"\u{1f633}",fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:"\u{1f61e}",fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:"\u{1f61f}",fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:"\u{1f620}",fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:"\u{1f621}",fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:"\u{1f614}",fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:"\u{1f615}",fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:"\u{1f641}",fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:"\u2639",fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:"\u{1f623}",fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:"\u{1f616}",fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:"\u{1f62b}",fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:"\u{1f629}",fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],char:"\u{1f97a}",fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:"\u{1f624}",fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:"\u{1f62e}",fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:"\u{1f631}",fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:"\u{1f628}",fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:"\u{1f630}",fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],char:"\u{1f62f}",fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],char:"\u{1f626}",fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:"\u{1f627}",fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:"\u{1f622}",fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:"\u{1f625}",fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],char:"\u{1f924}",fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:"\u{1f62a}",fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:"\u{1f613}",fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:"\u{1f975}",fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:"\u{1f976}",fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:"\u{1f62d}",fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:"\u{1f635}",fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:"\u{1f632}",fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:"\u{1f910}",fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:"\u{1f922}",fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:"\u{1f927}",fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],char:"\u{1f92e}",fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:"\u{1f637}",fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:"\u{1f912}",fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:"\u{1f915}",fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:"\u{1f974}",fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:"\u{1f634}",fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:"\u{1f4a4}",fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:"\u{1f4a9}",fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],char:"\u{1f608}",fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],char:"\u{1f47f}",fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:"\u{1f479}",fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:"\u{1f47a}",fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:"\u{1f480}",fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:"\u{1f47b}",fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:"\u{1f47d}",fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],char:"\u{1f916}",fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:"\u{1f63a}",fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:"\u{1f638}",fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:"\u{1f639}",fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:"\u{1f63b}",fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:"\u{1f63c}",fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:"\u{1f63d}",fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:"\u{1f640}",fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:"\u{1f63f}",fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],char:"\u{1f63e}",fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:"\u{1f932}",fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:"\u{1f64c}",fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:"\u{1f44f}",fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:"\u{1f44b}",fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:"\u{1f919}",fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:"\u{1f44d}",fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:"\u{1f44e}",fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:"\u{1f44a}",fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:"\u270a",fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],char:"\u{1f91b}",fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],char:"\u{1f91c}",fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:"\u270c",fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:"\u{1f44c}",fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:"\u270b",fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:"\u{1f91a}",fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:"\u{1f450}",fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:"\u{1f4aa}",fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:"\u{1f64f}",fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],char:"\u{1f9b6}",fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],char:"\u{1f9b5}",fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],char:"\u{1f91d}",fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:"\u261d",fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:"\u{1f446}",fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:"\u{1f447}",fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:"\u{1f448}",fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:"\u{1f449}",fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:"\u{1f595}",fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:"\u{1f590}",fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:"\u{1f91f}",fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:"\u{1f918}",fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:"\u{1f91e}",fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:"\u{1f596}",fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:"\u270d",fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],char:"\u{1f933}",fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:"\u{1f485}",fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],char:"\u{1f444}",fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],char:"\u{1f9b7}",fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],char:"\u{1f445}",fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:"\u{1f442}",fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],char:"\u{1f443}",fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:"\u{1f441}",fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:"\u{1f440}",fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],char:"\u{1f9e0}",fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:"\u{1f464}",fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:"\u{1f465}",fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:"\u{1f5e3}",fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:"\u{1f476}",fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],char:"\u{1f9d2}",fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:"\u{1f466}",fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],char:"\u{1f467}",fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],char:"\u{1f9d1}",fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:"\u{1f468}",fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],char:"\u{1f469}",fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:"\u{1f471}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:"\u{1f471}",fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:"\u{1f9d4}",fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:"\u{1f9d3}",fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:"\u{1f474}",fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:"\u{1f475}",fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:"\u{1f472}",fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:"\u{1f9d5}",fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:"\u{1f473}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:"\u{1f473}",fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:"\u{1f46e}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:"\u{1f46e}",fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:"\u{1f477}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:"\u{1f477}",fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:"\u{1f482}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:"\u{1f482}",fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:"\u{1f575}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],char:"\u{1f575}",fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:"\u{1f469}\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:"\u{1f468}\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:"\u{1f469}\u200d\u{1f33e}",fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:"\u{1f468}\u200d\u{1f33e}",fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:"\u{1f469}\u200d\u{1f373}",fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],char:"\u{1f468}\u200d\u{1f373}",fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:"\u{1f469}\u200d\u{1f393}",fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],char:"\u{1f468}\u200d\u{1f393}",fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:"\u{1f469}\u200d\u{1f3a4}",fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:"\u{1f468}\u200d\u{1f3a4}",fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:"\u{1f469}\u200d\u{1f3eb}",fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:"\u{1f468}\u200d\u{1f3eb}",fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:"\u{1f469}\u200d\u{1f3ed}",fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:"\u{1f468}\u200d\u{1f3ed}",fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:"\u{1f469}\u200d\u{1f4bb}",fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:"\u{1f468}\u200d\u{1f4bb}",fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:"\u{1f469}\u200d\u{1f4bc}",fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:"\u{1f468}\u200d\u{1f4bc}",fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:"\u{1f469}\u200d\u{1f527}",fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:"\u{1f468}\u200d\u{1f527}",fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:"\u{1f469}\u200d\u{1f52c}",fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:"\u{1f468}\u200d\u{1f52c}",fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:"\u{1f469}\u200d\u{1f3a8}",fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],char:"\u{1f468}\u200d\u{1f3a8}",fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:"\u{1f469}\u200d\u{1f692}",fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:"\u{1f468}\u200d\u{1f692}",fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:"\u{1f469}\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:"\u{1f468}\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:"\u{1f469}\u200d\u{1f680}",fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:"\u{1f468}\u200d\u{1f680}",fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:"\u{1f469}\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:"\u{1f468}\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:"\u{1f9b8}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:"\u{1f9b8}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:"\u{1f9b9}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:"\u{1f9b9}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:"\u{1f936}",fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:"\u{1f385}",fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:"\u{1f9d9}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:"\u{1f9d9}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],char:"\u{1f9dd}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],char:"\u{1f9dd}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],char:"\u{1f9db}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:"\u{1f9db}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:"\u{1f9df}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:"\u{1f9df}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],char:"\u{1f9de}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],char:"\u{1f9de}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:"\u{1f9dc}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],char:"\u{1f9dc}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],char:"\u{1f9da}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],char:"\u{1f9da}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],char:"\u{1f47c}",fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],char:"\u{1f930}",fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:"\u{1f931}",fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:"\u{1f478}",fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:"\u{1f934}",fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:"\u{1f470}",fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:"\u{1f935}",fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:"\u{1f3c3}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:"\u{1f3c3}",fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:"\u{1f6b6}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],char:"\u{1f6b6}",fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:"\u{1f483}",fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:"\u{1f57a}",fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:"\u{1f46f}",fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:"\u{1f46f}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:"\u{1f46b}",fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:"\u{1f46c}",fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:"\u{1f46d}",fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:"\u{1f647}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],char:"\u{1f647}",fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:"\u{1f926}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:"\u{1f926}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:"\u{1f937}",fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:"\u{1f937}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:"\u{1f481}",fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:"\u{1f481}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:"\u{1f645}",fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:"\u{1f645}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:"\u{1f646}",fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:"\u{1f646}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:"\u{1f64b}",fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:"\u{1f64b}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:"\u{1f64e}",fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],char:"\u{1f64e}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:"\u{1f64d}",fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:"\u{1f64d}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:"\u{1f487}",fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],char:"\u{1f487}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:"\u{1f486}",fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:"\u{1f486}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:"\u{1f9d6}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:"\u{1f9d6}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f491}",fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f469}",fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f468}",fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f48f}",fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}",fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:"\u{1f46a}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:"\u{1f469}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:"\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:"\u{1f468}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:"\u{1f468}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:"\u{1f9f6}",fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:"\u{1f9f5}",fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],char:"\u{1f9e5}",fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:"\u{1f97c}",fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:"\u{1f45a}",fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:"\u{1f455}",fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],char:"\u{1f456}",fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:"\u{1f454}",fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:"\u{1f457}",fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:"\u{1f459}",fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:"\u{1f458}",fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:"\u{1f484}",fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:"\u{1f48b}",fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:"\u{1f463}",fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:"\u{1f97f}",fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:"\u{1f460}",fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:"\u{1f461}",fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],char:"\u{1f462}",fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],char:"\u{1f45e}",fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:"\u{1f45f}",fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:"\u{1f97e}",fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],char:"\u{1f9e6}",fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:"\u{1f9e4}",fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:"\u{1f9e3}",fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:"\u{1f452}",fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:"\u{1f3a9}",fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],char:"\u{1f9e2}",fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:"\u26d1",fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:"\u{1f393}",fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:"\u{1f451}",fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:"\u{1f392}",fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],char:"\u{1f9f3}",fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:"\u{1f45d}",fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:"\u{1f45b}",fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:"\u{1f45c}",fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:"\u{1f4bc}",fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:"\u{1f453}",fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:"\u{1f576}",fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:"\u{1f97d}",fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:"\u{1f48d}",fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:"\u{1f302}",fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:"\u{1f436}",fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:"\u{1f431}",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:"\u{1f42d}",fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:"\u{1f439}",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:"\u{1f430}",fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:"\u{1f98a}",fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:"\u{1f43b}",fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:"\u{1f43c}",fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:"\u{1f428}",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:"\u{1f42f}",fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:"\u{1f981}",fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:"\u{1f42e}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:"\u{1f437}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:"\u{1f43d}",fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:"\u{1f438}",fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:"\u{1f991}",fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:"\u{1f419}",fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:"\u{1f990}",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:"\u{1f435}",fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:"\u{1f98d}",fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:"\u{1f648}",fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:"\u{1f649}",fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:"\u{1f64a}",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:"\u{1f412}",fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:"\u{1f414}",fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:"\u{1f427}",fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:"\u{1f426}",fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:"\u{1f424}",fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:"\u{1f423}",fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:"\u{1f425}",fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:"\u{1f986}",fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:"\u{1f985}",fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:"\u{1f989}",fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:"\u{1f987}",fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:"\u{1f43a}",fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:"\u{1f417}",fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:"\u{1f434}",fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:"\u{1f984}",fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:"\u{1f41d}",fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:"\u{1f41b}",fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:"\u{1f98b}",fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:"\u{1f40c}",fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:"\u{1f41e}",fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:"\u{1f41c}",fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:"\u{1f997}",fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:"\u{1f577}",fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:"\u{1f982}",fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:"\u{1f980}",fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:"\u{1f40d}",fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:"\u{1f98e}",fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:"\u{1f996}",fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:"\u{1f995}",fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:"\u{1f422}",fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:"\u{1f420}",fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:"\u{1f41f}",fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:"\u{1f421}",fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:"\u{1f42c}",fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:"\u{1f988}",fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:"\u{1f433}",fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:"\u{1f40b}",fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:"\u{1f40a}",fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:"\u{1f406}",fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:"\u{1f993}",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:"\u{1f405}",fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:"\u{1f403}",fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:"\u{1f402}",fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:"\u{1f404}",fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:"\u{1f98c}",fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:"\u{1f42a}",fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:"\u{1f42b}",fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:"\u{1f992}",fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:"\u{1f418}",fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:"\u{1f98f}",fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:"\u{1f410}",fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:"\u{1f40f}",fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:"\u{1f411}",fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:"\u{1f40e}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:"\u{1f416}",fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:"\u{1f400}",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:"\u{1f401}",fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:"\u{1f413}",fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:"\u{1f983}",fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:"\u{1f54a}",fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:"\u{1f415}",fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:"\u{1f429}",fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:"\u{1f408}",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:"\u{1f407}",fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:"\u{1f43f}",fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:"\u{1f994}",fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:"\u{1f99d}",fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:"\u{1f999}",fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:"\u{1f99b}",fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:"\u{1f998}",fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:"\u{1f9a1}",fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:"\u{1f9a2}",fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:"\u{1f99a}",fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:"\u{1f99c}",fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:"\u{1f99e}",fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:"\u{1f99f}",fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:"\u{1f43e}",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:"\u{1f409}",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:"\u{1f432}",fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:"\u{1f335}",fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:"\u{1f384}",fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:"\u{1f332}",fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:"\u{1f333}",fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:"\u{1f334}",fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:"\u{1f331}",fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:"\u{1f33f}",fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:"\u2618",fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:"\u{1f340}",fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:"\u{1f38d}",fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:"\u{1f38b}",fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:"\u{1f343}",fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:"\u{1f342}",fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:"\u{1f341}",fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:"\u{1f33e}",fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:"\u{1f33a}",fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:"\u{1f33b}",fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:"\u{1f339}",fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:"\u{1f940}",fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:"\u{1f337}",fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:"\u{1f33c}",fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:"\u{1f338}",fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:"\u{1f490}",fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:"\u{1f344}",fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:"\u{1f330}",fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:"\u{1f383}",fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:"\u{1f41a}",fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:"\u{1f578}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:"\u{1f30e}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:"\u{1f30d}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:"\u{1f30f}",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:"\u{1f315}",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:"\u{1f316}",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f317}",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f318}",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f311}",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f312}",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f313}",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:"\u{1f314}",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31a}",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31d}",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31b}",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31c}",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:"\u{1f31e}",fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:"\u{1f319}",fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:"\u2b50",fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:"\u{1f31f}",fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:"\u{1f4ab}",fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:"\u2728",fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],char:"\u2604",fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:"\u2600\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:"\u{1f324}",fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:"\u26c5",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:"\u{1f325}",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:"\u{1f326}",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:"\u2601\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:"\u{1f327}",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:"\u26c8",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:"\u{1f329}",fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:"\u26a1",fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:"\u{1f525}",fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:"\u{1f4a5}",fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:"\u2744\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:"\u{1f328}",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:"\u26c4",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:"\u2603",fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:"\u{1f32c}",fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:"\u{1f4a8}",fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:"\u{1f32a}",fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],char:"\u{1f32b}",fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:"\u2602",fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:"\u2614",fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:"\u{1f4a7}",fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:"\u{1f4a6}",fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:"\u{1f30a}",fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:"\u{1f34f}",fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:"\u{1f34e}",fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:"\u{1f350}",fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:"\u{1f34a}",fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:"\u{1f34b}",fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:"\u{1f34c}",fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:"\u{1f349}",fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:"\u{1f347}",fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:"\u{1f353}",fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:"\u{1f348}",fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:"\u{1f352}",fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:"\u{1f351}",fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:"\u{1f34d}",fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:"\u{1f965}",fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:"\u{1f95d}",fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:"\u{1f96d}",fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:"\u{1f951}",fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:"\u{1f966}",fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:"\u{1f345}",fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:"\u{1f346}",fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:"\u{1f952}",fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:"\u{1f955}",fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:"\u{1f336}",fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:"\u{1f954}",fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:"\u{1f33d}",fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:"\u{1f96c}",fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:"\u{1f360}",fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:"\u{1f95c}",fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:"\u{1f36f}",fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:"\u{1f950}",fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:"\u{1f35e}",fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:"\u{1f956}",fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:"\u{1f96f}",fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:"\u{1f968}",fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:"\u{1f9c0}",fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:"\u{1f95a}",fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:"\u{1f953}",fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:"\u{1f969}",fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:"\u{1f95e}",fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:"\u{1f357}",fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:"\u{1f356}",fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],char:"\u{1f9b4}",fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:"\u{1f364}",fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:"\u{1f373}",fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:"\u{1f354}",fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:"\u{1f35f}",fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:"\u{1f959}",fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:"\u{1f32d}",fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],char:"\u{1f355}",fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:"\u{1f96a}",fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:"\u{1f96b}",fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:"\u{1f35d}",fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:"\u{1f32e}",fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:"\u{1f32f}",fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:"\u{1f957}",fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:"\u{1f958}",fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:"\u{1f35c}",fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:"\u{1f372}",fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:"\u{1f365}",fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:"\u{1f960}",fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:"\u{1f363}",fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:"\u{1f371}",fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:"\u{1f35b}",fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:"\u{1f359}",fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:"\u{1f35a}",fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:"\u{1f358}",fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:"\u{1f362}",fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:"\u{1f361}",fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:"\u{1f367}",fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:"\u{1f368}",fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:"\u{1f366}",fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:"\u{1f967}",fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:"\u{1f370}",fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:"\u{1f9c1}",fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:"\u{1f96e}",fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:"\u{1f382}",fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:"\u{1f36e}",fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:"\u{1f36c}",fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:"\u{1f36d}",fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:"\u{1f36b}",fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:"\u{1f37f}",fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:"\u{1f95f}",fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:"\u{1f369}",fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:"\u{1f36a}",fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:"\u{1f95b}",fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"\u{1f37a}",fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"\u{1f37b}",fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:"\u{1f942}",fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:"\u{1f377}",fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:"\u{1f943}",fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:"\u{1f378}",fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:"\u{1f379}",fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:"\u{1f37e}",fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:"\u{1f376}",fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:"\u{1f375}",fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:"\u{1f964}",fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:"\u2615",fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:"\u{1f37c}",fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:"\u{1f9c2}",fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:"\u{1f944}",fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:"\u{1f374}",fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:"\u{1f37d}",fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:"\u{1f963}",fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:"\u{1f961}",fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],char:"\u{1f962}",fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:"\u26bd",fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:"\u{1f3c0}",fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],char:"\u{1f3c8}",fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],char:"\u26be",fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],char:"\u{1f94e}",fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],char:"\u{1f3be}",fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],char:"\u{1f3d0}",fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],char:"\u{1f3c9}",fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:"\u{1f94f}",fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:"\u{1f3b1}",fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:"\u26f3",fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:"\u{1f3cc}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],char:"\u{1f3cc}",fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:"\u{1f3d3}",fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],char:"\u{1f3f8}",fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],char:"\u{1f945}",fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],char:"\u{1f3d2}",fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],char:"\u{1f3d1}",fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:"\u{1f94d}",fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],char:"\u{1f3cf}",fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:"\u{1f3bf}",fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],char:"\u26f7",fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],char:"\u{1f3c2}",fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:"\u{1f93a}",fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:"\u{1f93c}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:"\u{1f93c}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:"\u{1f938}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:"\u{1f938}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],char:"\u{1f93e}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],char:"\u{1f93e}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],char:"\u26f8",fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],char:"\u{1f94c}",fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],char:"\u{1f6f9}",fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:"\u{1f6f7}",fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],char:"\u{1f3f9}",fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:"\u{1f3a3}",fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:"\u{1f94a}",fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:"\u{1f94b}",fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:"\u{1f6a3}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:"\u{1f6a3}",fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:"\u{1f9d7}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:"\u{1f9d7}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:"\u{1f3ca}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:"\u{1f3ca}",fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:"\u{1f93d}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:"\u{1f93d}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:"\u{1f9d8}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:"\u{1f9d8}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:"\u{1f3c4}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:"\u{1f3c4}",fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:"\u{1f6c0}",fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:"\u26f9\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],char:"\u26f9",fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:"\u{1f3cb}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:"\u{1f3cb}",fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:"\u{1f6b4}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:"\u{1f6b4}",fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:"\u{1f6b5}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:"\u{1f6b5}",fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:"\u{1f3c7}",fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:"\u{1f574}",fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:"\u{1f3c6}",fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:"\u{1f3bd}",fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],char:"\u{1f3c5}",fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],char:"\u{1f396}",fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:"\u{1f947}",fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:"\u{1f948}",fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:"\u{1f949}",fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:"\u{1f397}",fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:"\u{1f3f5}",fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],char:"\u{1f3ab}",fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:"\u{1f39f}",fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:"\u{1f3ad}",fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:"\u{1f3a8}",fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:"\u{1f3aa}",fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:"\u{1f939}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:"\u{1f939}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:"\u{1f3a4}",fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:"\u{1f3a7}",fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:"\u{1f3bc}",fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:"\u{1f3b9}",fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:"\u{1f941}",fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:"\u{1f3b7}",fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],char:"\u{1f3ba}",fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],char:"\u{1f3b8}",fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:"\u{1f3bb}",fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],char:"\u{1f3ac}",fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:"\u{1f3ae}",fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:"\u{1f47e}",fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:"\u{1f3af}",fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:"\u{1f3b2}",fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],char:"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:"\u{1f3b0}",fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:"\u{1f9e9}",fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],char:"\u{1f3b3}",fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:"\u{1f697}",fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:"\u{1f695}",fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:"\u{1f699}",fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:"\u{1f68c}",fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:"\u{1f68e}",fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:"\u{1f3ce}",fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:"\u{1f693}",fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:"\u{1f691}",fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:"\u{1f692}",fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:"\u{1f690}",fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:"\u{1f69a}",fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:"\u{1f69b}",fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:"\u{1f69c}",fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:"\u{1f6f4}",fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:"\u{1f3cd}",fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:"\u{1f6b2}",fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:"\u{1f6f5}",fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:"\u{1f6a8}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:"\u{1f694}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:"\u{1f68d}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:"\u{1f698}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:"\u{1f696}",fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:"\u{1f6a1}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:"\u{1f6a0}",fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:"\u{1f69f}",fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:"\u{1f683}",fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:"\u{1f68b}",fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:"\u{1f69d}",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:"\u{1f684}",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:"\u{1f685}",fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:"\u{1f688}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:"\u{1f69e}",fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:"\u{1f682}",fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:"\u{1f686}",fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:"\u{1f687}",fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:"\u{1f68a}",fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:"\u{1f689}",fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:"\u{1f6f8}",fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:"\u{1f681}",fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:"\u{1f6e9}",fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:"\u2708\ufe0f",fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:"\u{1f6eb}",fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:"\u{1f6ec}",fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:"\u26f5",fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:"\u{1f6e5}",fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:"\u{1f6a4}",fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:"\u26f4",fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:"\u{1f6f3}",fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:"\u{1f680}",fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:"\u{1f6f0}",fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:"\u{1f4ba}",fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:"\u{1f6f6}",fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:"\u2693",fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:"\u{1f6a7}",fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:"\u26fd",fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:"\u{1f68f}",fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:"\u{1f6a6}",fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:"\u{1f6a5}",fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:"\u{1f3c1}",fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:"\u{1f6a2}",fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:"\u{1f3a1}",fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:"\u{1f3a2}",fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:"\u{1f3a0}",fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:"\u{1f3d7}",fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:"\u{1f301}",fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:"\u{1f5fc}",fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:"\u{1f3ed}",fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:"\u26f2",fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:"\u{1f391}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:"\u26f0",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:"\u{1f3d4}",fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:"\u{1f5fb}",fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:"\u{1f30b}",fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:"\u{1f5fe}",fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:"\u{1f3d5}",fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:"\u26fa",fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:"\u{1f3de}",fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:"\u{1f6e3}",fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:"\u{1f6e4}",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:"\u{1f305}",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:"\u{1f304}",fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:"\u{1f3dc}",fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:"\u{1f3d6}",fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:"\u{1f3dd}",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:"\u{1f307}",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:"\u{1f306}",fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:"\u{1f3d9}",fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:"\u{1f303}",fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:"\u{1f309}",fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:"\u{1f30c}",fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],char:"\u{1f320}",fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:"\u{1f387}",fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:"\u{1f386}",fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:"\u{1f308}",fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:"\u{1f3d8}",fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:"\u{1f3f0}",fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:"\u{1f3ef}",fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:"\u{1f3df}",fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:"\u{1f5fd}",fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],char:"\u{1f3e0}",fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:"\u{1f3e1}",fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:"\u{1f3da}",fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:"\u{1f3e2}",fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:"\u{1f3ec}",fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:"\u{1f3e3}",fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:"\u{1f3e4}",fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:"\u{1f3e5}",fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:"\u{1f3e6}",fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:"\u{1f3e8}",fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:"\u{1f3ea}",fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:"\u{1f3eb}",fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:"\u{1f3e9}",fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:"\u{1f492}",fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:"\u{1f3db}",fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:"\u26ea",fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:"\u{1f54c}",fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:"\u{1f54d}",fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:"\u{1f54b}",fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:"\u26e9",fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:"\u231a",fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:"\u{1f4f1}",fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],char:"\u{1f4f2}",fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:"\u{1f4bb}",fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:"\u2328",fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:"\u{1f5a5}",fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],char:"\u{1f5a8}",fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],char:"\u{1f5b1}",fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],char:"\u{1f5b2}",fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],char:"\u{1f579}",fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],char:"\u{1f5dc}",fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:"\u{1f4bd}",fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:"\u{1f4be}",fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:"\u{1f4bf}",fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:"\u{1f4c0}",fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:"\u{1f4fc}",fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],char:"\u{1f4f7}",fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:"\u{1f4f8}",fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],char:"\u{1f4f9}",fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],char:"\u{1f3a5}",fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:"\u{1f4fd}",fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],char:"\u{1f39e}",fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:"\u{1f4de}",fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:"\u260e\ufe0f",fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:"\u{1f4df}",fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],char:"\u{1f4e0}",fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:"\u{1f4fa}",fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:"\u{1f4fb}",fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:"\u{1f399}",fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],char:"\u{1f39a}",fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],char:"\u{1f39b}",fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:"\u{1f9ed}",fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],char:"\u23f1",fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],char:"\u23f2",fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],char:"\u23f0",fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],char:"\u{1f570}",fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:"\u23f3",fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:"\u231b",fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:"\u{1f4e1}",fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],char:"\u{1f50b}",fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],char:"\u{1f50c}",fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:"\u{1f4a1}",fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:"\u{1f526}",fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],char:"\u{1f56f}",fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],char:"\u{1f9ef}",fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:"\u{1f5d1}",fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],char:"\u{1f6e2}",fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:"\u{1f4b8}",fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:"\u{1f4b5}",fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:"\u{1f4b4}",fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:"\u{1f4b6}",fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:"\u{1f4b7}",fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:"\u{1f4b0}",fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:"\u{1f4b3}",fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:"\u{1f48e}",fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:"\u2696",fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:"\u{1f9f0}",fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:"\u{1f527}",fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],char:"\u{1f528}",fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:"\u2692",fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:"\u{1f6e0}",fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],char:"\u26cf",fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:"\u{1f529}",fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],char:"\u2699",fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],char:"\u{1f9f1}",fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],char:"\u26d3",fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:"\u{1f9f2}",fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:"\u{1f52b}",fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:"\u{1f4a3}",fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:"\u{1f9e8}",fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:"\u{1f52a}",fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],char:"\u{1f5e1}",fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],char:"\u2694",fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],char:"\u{1f6e1}",fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:"\u{1f6ac}",fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:"\u2620",fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:"\u26b0",fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:"\u26b1",fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],char:"\u{1f3fa}",fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:"\u{1f52e}",fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:"\u{1f4ff}",fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:"\u{1f9ff}",fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],char:"\u{1f488}",fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:"\u2697",fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:"\u{1f52d}",fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:"\u{1f52c}",fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],char:"\u{1f573}",fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:"\u{1f48a}",fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:"\u{1f489}",fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:"\u{1f9ec}",fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:"\u{1f9a0}",fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:"\u{1f9eb}",fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:"\u{1f9ea}",fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:"\u{1f321}",fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:"\u{1f9f9}",fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],char:"\u{1f9fa}",fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],char:"\u{1f9fb}",fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],char:"\u{1f3f7}",fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:"\u{1f516}",fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:"\u{1f6bd}",fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:"\u{1f6bf}",fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:"\u{1f6c1}",fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:"\u{1f9fc}",fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:"\u{1f9fd}",fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:"\u{1f9f4}",fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],char:"\u{1f511}",fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],char:"\u{1f5dd}",fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:"\u{1f6cb}",fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:"\u{1f6cc}",fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],char:"\u{1f6cf}",fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],char:"\u{1f6aa}",fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],char:"\u{1f6ce}",fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:"\u{1f9f8}",fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],char:"\u{1f5bc}",fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],char:"\u{1f5fa}",fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:"\u26f1",fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:"\u{1f5ff}",fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:"\u{1f6cd}",fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],char:"\u{1f6d2}",fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:"\u{1f388}",fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:"\u{1f38f}",fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:"\u{1f380}",fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:"\u{1f381}",fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:"\u{1f38a}",fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:"\u{1f389}",fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:"\u{1f38e}",fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:"\u{1f390}",fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:"\u{1f38c}",fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:"\u{1f3ee}",fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],char:"\u{1f9e7}",fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:"\u2709\ufe0f",fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:"\u{1f4e9}",fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:"\u{1f4e8}",fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:"\u{1f4e7}",fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:"\u{1f48c}",fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:"\u{1f4ee}",fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:"\u{1f4ea}",fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:"\u{1f4eb}",fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:"\u{1f4ec}",fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:"\u{1f4ed}",fitzpatrick_scale:!1,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:"\u{1f4e6}",fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],char:"\u{1f4ef}",fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],char:"\u{1f4e5}",fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:"\u{1f4e4}",fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:"\u{1f4dc}",fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:"\u{1f4c3}",fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:"\u{1f4d1}",fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],char:"\u{1f9fe}",fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:"\u{1f4ca}",fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:"\u{1f4c8}",fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:"\u{1f4c9}",fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:"\u{1f4c4}",fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],char:"\u{1f4c5}",fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:"\u{1f4c6}",fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:"\u{1f5d3}",fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],char:"\u{1f4c7}",fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],char:"\u{1f5c3}",fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],char:"\u{1f5f3}",fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:"\u{1f5c4}",fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],char:"\u{1f4cb}",fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:"\u{1f5d2}",fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],char:"\u{1f4c1}",fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],char:"\u{1f4c2}",fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:"\u{1f5c2}",fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:"\u{1f5de}",fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],char:"\u{1f4f0}",fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:"\u{1f4d3}",fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:"\u{1f4d5}",fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:"\u{1f4d7}",fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:"\u{1f4d8}",fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:"\u{1f4d9}",fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:"\u{1f4d4}",fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],char:"\u{1f4d2}",fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],char:"\u{1f4da}",fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:"\u{1f4d6}",fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],char:"\u{1f9f7}",fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],char:"\u{1f517}",fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],char:"\u{1f4ce}",fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],char:"\u{1f587}",fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],char:"\u2702\ufe0f",fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:"\u{1f4d0}",fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:"\u{1f4cf}",fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],char:"\u{1f9ee}",fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:"\u{1f4cc}",fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:"\u{1f4cd}",fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:"\u{1f6a9}",fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:"\u{1f3f3}",fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],char:"\u{1f3f4}",fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:"\u{1f3f3}\ufe0f\u200d\u{1f308}",fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:"\u{1f510}",fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],char:"\u{1f512}",fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],char:"\u{1f513}",fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:"\u{1f50f}",fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],char:"\u{1f58a}",fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:"\u{1f58b}",fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:"\u2712\ufe0f",fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:"\u{1f4dd}",fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:"\u270f\ufe0f",fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],char:"\u{1f58d}",fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:"\u{1f58c}",fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:"\u{1f50d}",fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:"\u{1f50e}",fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],char:"\u2764\ufe0f",fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f9e1}",fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49b}",fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49a}",fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f499}",fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49c}",fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],char:"\u{1f5a4}",fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:"\u{1f494}",fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:"\u2763",fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:"\u{1f495}",fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:"\u{1f49e}",fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:"\u{1f493}",fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:"\u{1f497}",fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f496}",fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:"\u{1f498}",fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:"\u{1f49d}",fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:"\u{1f49f}",fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],char:"\u262e",fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],char:"\u271d",fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],char:"\u262a",fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"\u{1f549}",fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"\u2638",fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],char:"\u2721",fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:"\u{1f52f}",fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:"\u{1f54e}",fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],char:"\u262f",fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:"\u2626",fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:"\u{1f6d0}",fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:"\u26ce",fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u2648",fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:"\u2649",fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264a",fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264b",fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u264c",fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264d",fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u264e",fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:"\u264f",fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u2650",fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u2651",fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u2652",fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:"\u2653",fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],char:"\u{1f194}",fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:"\u269b",fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:"\u{1f233}",fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:"\u{1f239}",fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:"\u2622",fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],char:"\u2623",fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:"\u{1f4f4}",fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:"\u{1f4f3}",fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:"\u{1f236}",fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:"\u{1f21a}",fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:"\u{1f238}",fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:"\u{1f23a}",fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:"\u{1f237}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:"\u2734\ufe0f",fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],char:"\u{1f19a}",fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:"\u{1f251}",fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:"\u{1f4ae}",fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:"\u{1f250}",fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:"\u3299\ufe0f",fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:"\u3297\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:"\u{1f234}",fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:"\u{1f235}",fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:"\u{1f232}",fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:"\u{1f170}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:"\u{1f171}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:"\u{1f18e}",fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:"\u{1f191}",fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:"\u{1f17e}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:"\u{1f198}",fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:"\u26d4",fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:"\u{1f4db}",fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:"\u{1f6ab}",fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:"\u274c",fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],char:"\u2b55",fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],char:"\u{1f6d1}",fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],char:"\u{1f4a2}",fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:"\u2668\ufe0f",fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:"\u{1f6b7}",fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:"\u{1f6af}",fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:"\u{1f6b3}",fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:"\u{1f6b1}",fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:"\u{1f51e}",fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:"\u{1f4f5}",fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:"\u2757",fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:"\u2755",fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],char:"\u2753",fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:"\u2754",fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:"\u203c\ufe0f",fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:"\u2049\ufe0f",fitzpatrick_scale:!1,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:"\u{1f4af}",fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:"\u{1f505}",fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],char:"\u{1f506}",fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],char:"\u{1f531}",fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:"\u269c",fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:"\u303d\ufe0f",fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:"\u26a0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:"\u{1f6b8}",fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],char:"\u{1f530}",fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:"\u267b\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:"\u{1f22f}",fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:"\u{1f4b9}",fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:"\u2747\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:"\u2733\ufe0f",fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:"\u274e",fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:"\u2705",fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:"\u{1f4a0}",fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:"\u{1f300}",fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],char:"\u27bf",fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:"\u{1f310}",fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:"\u24c2\ufe0f",fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:"\u{1f3e7}",fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:"\u{1f202}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:"\u{1f6c2}",fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:"\u{1f6c3}",fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:"\u{1f6c4}",fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:"\u{1f6c5}",fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:"\u267f",fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:"\u{1f6ad}",fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:"\u{1f6be}",fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:"\u{1f17f}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:"\u{1f6b0}",fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:"\u{1f6b9}",fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:"\u{1f6ba}",fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:"\u{1f6bc}",fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:"\u{1f6bb}",fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:"\u{1f6ae}",fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:"\u{1f3a6}",fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:"\u{1f4f6}",fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:"\u{1f201}",fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:"\u{1f196}",fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:"\u{1f197}",fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],char:"\u{1f199}",fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],char:"\u{1f192}",fitzpatrick_scale:!1,category:"symbols"},new:{keywords:["blue-square","words","start"],char:"\u{1f195}",fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],char:"\u{1f193}",fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:"0\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:"1\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:"2\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:"3\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:"4\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:"5\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:"6\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:"7\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:"8\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:"9\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:"\u{1f51f}",fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],char:"*\u20e3",fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:"\u{1f522}",fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],char:"\u23cf\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:"\u25b6\ufe0f",fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:"\u23f8",fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:"\u23ed",fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],char:"\u23f9",fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],char:"\u23fa",fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:"\u23ef",fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],char:"\u23ee",fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:"\u23e9",fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],char:"\u23ea",fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:"\u{1f500}",fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],char:"\u{1f501}",fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:"\u{1f502}",fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:"\u25c0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:"\u{1f53c}",fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:"\u{1f53d}",fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:"\u23eb",fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:"\u23ec",fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:"\u27a1\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:"\u2b05\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:"\u2b06\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:"\u2b07\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:"\u2197\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:"\u2198\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:"\u2199\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:"\u2196\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:"\u2195\ufe0f",fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:"\u2194\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:"\u{1f504}",fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:"\u21aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:"\u21a9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:"\u2934\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:"\u2935\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:"#\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:"\u2139\ufe0f",fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:"\u{1f524}",fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:"\u{1f521}",fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:"\u{1f520}",fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:"\u{1f523}",fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:"\u{1f3b5}",fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],char:"\u{1f3b6}",fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:"\u3030\ufe0f",fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:"\u27b0",fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:"\u2714\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:"\u{1f503}",fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:"\u2795",fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:"\u2796",fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:"\u2797",fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:"\u2716\ufe0f",fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],char:"\u267e",fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:"\u{1f4b2}",fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:"\u{1f4b1}",fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:"\xa9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],char:"\xae\ufe0f",fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:"\u2122\ufe0f",fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],char:"\u{1f51a}",fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],char:"\u{1f519}",fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],char:"\u{1f51b}",fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],char:"\u{1f51d}",fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],char:"\u{1f51c}",fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:"\u2611\ufe0f",fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:"\u{1f518}",fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],char:"\u26aa",fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:"\u26ab",fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:"\u{1f534}",fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:"\u{1f535}",fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f538}",fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f539}",fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f536}",fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f537}",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:"\u{1f53a}",fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:"\u25aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:"\u25ab\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:"\u2b1b",fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:"\u2b1c",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:"\u{1f53b}",fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:"\u25fc\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:"\u25fb\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:"\u25fe",fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:"\u25fd",fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:"\u{1f532}",fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],char:"\u{1f533}",fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:"\u{1f508}",fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:"\u{1f509}",fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:"\u{1f50a}",fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:"\u{1f507}",fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:"\u{1f4e3}",fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:"\u{1f4e2}",fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:"\u{1f514}",fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:"\u{1f515}",fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:"\u{1f0cf}",fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:"\u{1f004}",fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:"\u2660\ufe0f",fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:"\u2663\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:"\u2665\ufe0f",fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:"\u2666\ufe0f",fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:"\u{1f3b4}",fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:"\u{1f4ad}",fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:"\u{1f5ef}",fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:"\u{1f4ac}",fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:"\u{1f5e8}",fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:"\u{1f550}",fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:"\u{1f551}",fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:"\u{1f552}",fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:"\u{1f553}",fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:"\u{1f554}",fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:"\u{1f555}",fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:"\u{1f556}",fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:"\u{1f557}",fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:"\u{1f558}",fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:"\u{1f559}",fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:"\u{1f55a}",fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:"\u{1f55b}",fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:"\u{1f55c}",fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:"\u{1f55d}",fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:"\u{1f55e}",fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:"\u{1f55f}",fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:"\u{1f560}",fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:"\u{1f561}",fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:"\u{1f562}",fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:"\u{1f563}",fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:"\u{1f564}",fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:"\u{1f565}",fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:"\u{1f566}",fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:"\u{1f567}",fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:"\u{1f1e8}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:"\u{1f1ea}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:"\u{1f1eb}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:"\u{1f1e9}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:"\u{1f1ef}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:"\u{1f1fd}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:"\u{1f1fe}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:"\u{1f1f0}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:"\u{1f1f4}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:"\u{1f1f6}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:"\u{1f1fc}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:"\u{1f1f0}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:"\u{1f1ec}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0065}\u{e006e}\u{e0067}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0073}\u{e0063}\u{e0074}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0077}\u{e006c}\u{e0073}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:"\u{1f1fc}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:"\u{1f1fe}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:"\u{1f1fa}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:"\u{1f3f4}\u200d\u2620\ufe0f",fitzpatrick_scale:!1,category:"flags"}}); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/plugin.min.js new file mode 100644 index 0000000000..d7d2aafb74 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/emoticons/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>e=>t===e,o=e(null),n=e(void 0),s=()=>{},r=()=>!1;class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return null==t?a.none():a.some(t)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const i=(t,e)=>{const o=t.length,n=new Array(o);for(let s=0;s{let e=t;return{get:()=>e,set:t=>{e=t}}},c=Object.keys,u=Object.hasOwnProperty,g=(t,e)=>{const o=c(t);for(let n=0,s=o.length;nu.call(t,e),h=(d=(t,e)=>e,(...t)=>{if(0===t.length)throw new Error("Can't merge zero objects");const e={};for(let o=0;o{const t=(t=>{const e=l(a.none()),o=()=>e.get().each(t);return{clear:()=>{o(),e.set(a.none())},isSet:()=>e.get().isSome(),get:()=>e.get(),set:t=>{o(),e.set(a.some(t))}}})(s);return{...t,on:e=>t.get().each(e)}},v=(t,e,o=0,s)=>{const r=t.indexOf(e,o);return-1!==r&&(!!n(s)||r+e.length<=s)};var y=tinymce.util.Tools.resolve("tinymce.Resource");const f=t=>e=>e.options.get(t),b=f("emoticons_database"),w=f("emoticons_database_url"),_=f("emoticons_database_id"),j=f("emoticons_append"),C=f("emoticons_images_url"),k="All",A={symbols:"Symbols",people:"People",animals_and_nature:"Animals and Nature",food_and_drink:"Food and Drink",activity:"Activity",travel_and_places:"Travel and Places",objects:"Objects",flags:"Flags",user:"User Defined"},O=(t,e)=>m(t,e)?t[e]:e,x=t=>{const e=j(t);return o=t=>({keywords:[],category:"user",...t}),((t,e)=>{const o={};return g(t,((t,n)=>{const s=e(t,n);o[s.k]=s.v})),o})(e,((t,e)=>({k:e,v:o(t)})));var o},L=(t,e)=>v(t.title.toLowerCase(),e)||((t,o)=>{for(let o=0,s=t.length;o{const n=[],s=e.toLowerCase(),a=o.fold((()=>r),(t=>e=>e>=t));for(let o=0;o{const n={pattern:"",results:T(e.listAll(),"",a.some(300))},s=l(k),r=((t,e)=>{let n=null;const s=()=>{o(n)||(clearTimeout(n),n=null)};return{cancel:s,throttle:(...e)=>{s(),n=setTimeout((()=>{n=null,t.apply(null,e)}),200)}}})((t=>{(t=>{const o=t.getData(),n=s.get(),r=e.listCategory(n),i=T(r,o.pattern,n===k?a.some(300):a.none());t.setData({results:i})})(t)})),c={label:"Search",type:"input",name:D},u={type:"collection",name:"results"},g=()=>({title:"Emojis",size:"normal",body:{type:"tabpanel",tabs:i(e.listCategories(),(t=>({title:t,name:t,items:[c,u]})))},initialData:n,onTabChange:(t,e)=>{s.set(e.newTabName),r.throttle(t)},onChange:r.throttle,onAction:(e,o)=>{"results"===o.name&&(((t,e)=>{t.insertContent(e)})(t,o.value),e.close())},buttons:[{type:"cancel",text:"Close",primary:!0}]}),m=t.windowManager.open(g());m.focus(D),e.hasLoaded()||(m.block("Loading emojis..."),e.waitForLoad().then((()=>{m.redial(g()),r.throttle(m),m.focus(D),m.unblock()})).catch((t=>{m.redial({title:"Emojis",body:{type:"panel",items:[{type:"alertbanner",level:"error",icon:"warning",text:"Could not load emojis"}]},buttons:[{type:"cancel",text:"Close",primary:!0}],initialData:{pattern:"",results:[]}}),m.focus(D),m.unblock()})))};t.add("emoticons",((t,e)=>{((t,e)=>{const o=t.options.register;o("emoticons_database",{processor:"string",default:"emojis"}),o("emoticons_database_url",{processor:"string",default:`${e}/js/${b(t)}${t.suffix}.js`}),o("emoticons_database_id",{processor:"string",default:"tinymce.plugins.emoticons"}),o("emoticons_append",{processor:"object",default:{}}),o("emoticons_images_url",{processor:"string",default:"https://twemoji.maxcdn.com/v/13.0.1/72x72/"})})(t,e);const o=((t,e,o)=>{const n=p(),s=p(),r=C(t),i=t=>{return o="=o.length&&e.substr(0,0+o.length)===o?t.char.replace(/src="([^"]+)"/,((t,e)=>`src="${r}${e}"`)):t.char;var e,o};t.on("init",(()=>{y.load(o,e).then((e=>{const o=x(t);(t=>{const e={},o=[];g(t,((t,n)=>{const s={title:n,keywords:t.keywords,char:i(t),category:O(A,t.category)},r=void 0!==e[s.category]?e[s.category]:[];e[s.category]=r.concat([s]),o.push(s)})),n.set(e),s.set(o)})(h(e,o))}),(t=>{console.log(`Failed to load emojis: ${t}`),n.set({}),s.set([])}))}));const l=()=>s.get().getOr([]),u=()=>n.isSet()&&s.isSet();return{listCategories:()=>[k].concat(c(n.get().getOr({}))),hasLoaded:u,waitForLoad:()=>u()?Promise.resolve(!0):new Promise(((t,o)=>{let n=15;const s=setInterval((()=>{u()?(clearInterval(s),t(!0)):(n--,n<0&&(console.log("Could not load emojis from url: "+e),clearInterval(s),o(!1)))}),100)})),listAll:l,listCategory:t=>t===k?l():n.get().bind((e=>a.from(e[t]))).getOr([])}})(t,w(t),_(t));((t,e)=>{t.addCommand("mceEmoticons",(()=>E(t,e)))})(t,o),(t=>{const e=()=>t.execCommand("mceEmoticons");t.ui.registry.addButton("emoticons",{tooltip:"Emojis",icon:"emoji",onAction:e}),t.ui.registry.addMenuItem("emoticons",{text:"Emojis...",icon:"emoji",onAction:e})})(t),((t,e)=>{t.ui.registry.addAutocompleter("emoticons",{trigger:":",columns:"auto",minChars:2,fetch:(t,o)=>e.waitForLoad().then((()=>{const n=e.listAll();return T(n,t,a.some(o))})),onAction:(e,o,n)=>{t.selection.setRng(o),t.insertContent(n),e.hide()}})})(t,o),(t=>{t.on("PreInit",(()=>{t.parser.addAttributeFilter("data-emoticon",(t=>{((t,e)=>{for(let e=0,n=t.length;e{let t=e;return{get:()=>t,set:e=>{t=e}}};var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const n=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=r=e,(o=String).prototype.isPrototypeOf(n)||(null===(s=r.constructor)||void 0===s?void 0:s.name)===o.name)?"string":t;var n,r,o,s})(t)===e,r=e=>t=>typeof t===e,o=e=>t=>e===t,s=n("string"),i=n("array"),l=o(null),a=r("boolean"),c=o(void 0),u=e=>!(e=>null==e)(e),d=r("function"),m=r("number"),h=()=>{},g=e=>()=>e;function p(e,...t){return(...n)=>{const r=t.concat(n);return e.apply(null,r)}}const f=g(!1),v=g(!0);class w{constructor(e,t){this.tag=e,this.value=t}static some(e){return new w(!0,e)}static none(){return w.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?w.some(e(this.value)):w.none()}bind(e){return this.tag?e(this.value):w.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:w.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return u(e)?w.some(e):w.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}w.singletonNone=new w(!1);const y=t=>{const n=e(w.none()),r=()=>n.get().each(t);return{clear:()=>{r(),n.set(w.none())},isSet:()=>n.get().isSome(),get:()=>n.get(),set:e=>{r(),n.set(w.some(e))}}},b=()=>y((e=>e.unbind())),S=Array.prototype.push,x=(e,t)=>{const n=e.length,r=new Array(n);for(let o=0;o{for(let n=0,r=e.length;n{const n=[];for(let r=0,o=e.length;r((e,t,n)=>{for(let r=0,o=e.length;r{const o=e.indexOf(t,n);return-1!==o&&(!!c(r)||o+t.length<=r)},C=e=>void 0!==e.style&&d(e.style.getPropertyValue),A=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},R=A;"undefined"!=typeof window?window:Function("return this;")();const L=e=>t=>(e=>e.dom.nodeType)(t)===e,M=L(1),N=L(3),P=L(9),D=L(11),W=(e,t)=>{const n=e.dom;if(1!==n.nodeType)return!1;{const e=n;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},q=e=>R(e.dom.ownerDocument),H=e=>x(e.dom.childNodes,R),I=d(Element.prototype.attachShadow)&&d(Node.prototype.getRootNode),B=g(I),V=I?e=>R(e.dom.getRootNode()):e=>P(e)?e:q(e),_=e=>{const t=V(e);return D(n=t)&&u(n.dom.host)?w.some(t):w.none();var n},j=e=>R(e.dom.host),z=e=>{const t=N(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const n=t.ownerDocument;return _(R(t)).fold((()=>n.body.contains(t)),(r=z,o=j,e=>r(o(e))));var r,o},$=(e,t)=>{const n=e.dom.getAttribute(t);return null===n?void 0:n},U=(e,t)=>{e.dom.removeAttribute(t)},K=(e,t)=>{const n=e.dom;((e,t)=>{const n=T(e);for(let r=0,o=n.length;r{((e,t,n)=>{if(!s(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);C(e)&&e.style.setProperty(t,n)})(n,t,e)}))},X=e=>{const t=R((e=>{if(B()&&u(e.target)){const t=R(e.target);if(M(t)&&u(t.dom.shadowRoot)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return((e,t)=>0e.stopPropagation(),r=()=>e.preventDefault(),o=(s=r,i=n,(...e)=>s(i.apply(null,e)));var s,i;return((e,t,n,r,o,s,i)=>({target:e,x:t,y:n,stop:r,prevent:o,kill:s,raw:i}))(t,e.clientX,e.clientY,n,r,o,e)},Y=(e,t,n,r)=>{e.dom.removeEventListener(t,n,r)},G=v,J=(e,t,n)=>((e,t,n,r)=>((e,t,n,r,o)=>{const s=((e,t)=>n=>{e(n)&&t(X(n))})(n,r);return e.dom.addEventListener(t,s,o),{unbind:p(Y,e,t,s,o)}})(e,t,n,r,!1))(e,t,G,n),Q=()=>Z(0,0),Z=(e,t)=>({major:e,minor:t}),ee={nu:Z,detect:(e,t)=>{const n=String(t).toLowerCase();return 0===e.length?Q():((e,t)=>{const n=((e,t)=>{for(let n=0;nNumber(t.replace(n,"$"+e));return Z(r(1),r(2))})(e,n)},unknown:Q},te=(e,t)=>{const n=String(t).toLowerCase();return O(e,(e=>e.search(n)))},ne=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,re=e=>t=>k(t,e),oe=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>k(e,"edge/")&&k(e,"chrome")&&k(e,"safari")&&k(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,ne],search:e=>k(e,"chrome")&&!k(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>k(e,"msie")||k(e,"trident")},{name:"Opera",versionRegexes:[ne,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:re("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:re("firefox")},{name:"Safari",versionRegexes:[ne,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(k(e,"safari")||k(e,"mobile/"))&&k(e,"applewebkit")}],se=[{name:"Windows",search:re("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>k(e,"iphone")||k(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:re("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:re("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:re("linux"),versionRegexes:[]},{name:"Solaris",search:re("sunos"),versionRegexes:[]},{name:"FreeBSD",search:re("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:re("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],ie={browsers:g(oe),oses:g(se)},le="Edge",ae="Chromium",ce="Opera",ue="Firefox",de="Safari",me=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isEdge:r(le),isChromium:r(ae),isIE:r("IE"),isOpera:r(ce),isFirefox:r(ue),isSafari:r(de)}},he=()=>me({current:void 0,version:ee.unknown()}),ge=me,pe=(g(le),g(ae),g("IE"),g(ce),g(ue),g(de),"Windows"),fe="Android",ve="Linux",we="macOS",ye="Solaris",be="FreeBSD",Se="ChromeOS",xe=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isWindows:r(pe),isiOS:r("iOS"),isAndroid:r(fe),isMacOS:r(we),isLinux:r(ve),isSolaris:r(ye),isFreeBSD:r(be),isChromeOS:r(Se)}},Ee=()=>xe({current:void 0,version:ee.unknown()}),Fe=xe,Oe=(g(pe),g("iOS"),g(fe),g(ve),g(we),g(ye),g(be),g(Se),(e,t,n)=>{const r=ie.browsers(),o=ie.oses(),s=t.bind((e=>((e,t)=>((e,t)=>{for(let n=0;n{const n=t.brand.toLowerCase();return O(e,(e=>{var t;return n===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:ee.nu(parseInt(t.version,10),0)})))})))(r,e))).orThunk((()=>((e,t)=>te(e,t).map((e=>{const n=ee.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(r,e))).fold(he,ge),i=((e,t)=>te(e,t).map((e=>{const n=ee.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(o,e).fold(Ee,Fe),l=((e,t,n,r)=>{const o=e.isiOS()&&!0===/ipad/i.test(n),s=e.isiOS()&&!o,i=e.isiOS()||e.isAndroid(),l=i||r("(pointer:coarse)"),a=o||!s&&i&&r("(min-device-width:768px)"),c=s||i&&!a,u=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(n),d=!c&&!a&&!u;return{isiPad:g(o),isiPhone:g(s),isTablet:g(a),isPhone:g(c),isTouch:g(l),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:g(u),isDesktop:g(d)}})(i,s,e,n);return{browser:s,os:i,deviceType:l}}),Te=e=>window.matchMedia(e).matches;let ke=(e=>{let t,n=!1;return(...r)=>(n||(n=!0,t=e.apply(null,r)),t)})((()=>Oe(navigator.userAgent,w.from(navigator.userAgentData),Te)));const Ce=(e,t)=>({left:e,top:t,translate:(n,r)=>Ce(e+n,t+r)}),Ae=Ce,Re=e=>{const t=void 0===e?window:e;return ke().browser.isFirefox()?w.none():w.from(t.visualViewport)},Le=(e,t,n,r)=>({x:e,y:t,width:n,height:r,right:e+n,bottom:t+r}),Me=e=>{const t=void 0===e?window:e,n=t.document,r=(e=>{const t=void 0!==e?e.dom:document,n=t.body.scrollLeft||t.documentElement.scrollLeft,r=t.body.scrollTop||t.documentElement.scrollTop;return Ae(n,r)})(R(n));return Re(t).fold((()=>{const e=t.document.documentElement,n=e.clientWidth,o=e.clientHeight;return Le(r.left,r.top,n,o)}),(e=>Le(Math.max(e.pageLeft,r.left),Math.max(e.pageTop,r.top),e.width,e.height)))},Ne=(e,t,n)=>Re(n).map((n=>{const r=e=>t(X(e));return n.addEventListener(e,r),{unbind:()=>n.removeEventListener(e,r)}})).getOrThunk((()=>({unbind:h})));var Pe=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),De=tinymce.util.Tools.resolve("tinymce.Env");const We=(e,t)=>{e.dispatch("FullscreenStateChanged",{state:t}),e.dispatch("ResizeEditor")},qe=("fullscreen_native",e=>e.options.get("fullscreen_native"));const He=e=>{return e.dom===(void 0!==(t=q(e).dom).fullscreenElement?t.fullscreenElement:void 0!==t.msFullscreenElement?t.msFullscreenElement:void 0!==t.webkitFullscreenElement?t.webkitFullscreenElement:null);var t},Ie=(e,t,n)=>((e,t,n)=>F(((e,t)=>{const n=d(t)?t:f;let r=e.dom;const o=[];for(;null!==r.parentNode&&void 0!==r.parentNode;){const e=r.parentNode,t=R(e);if(o.push(t),!0===n(t))break;r=e}return o})(e,n),t))(e,(e=>W(e,t)),n),Be=(e,t)=>((e,n)=>{return F((e=>w.from(e.dom.parentNode).map(R))(r=e).map(H).map((e=>F(e,(e=>{return t=e,!(r.dom===t.dom);var t})))).getOr([]),(e=>W(e,t)));var r})(e),Ve="data-ephox-mobile-fullscreen-style",_e="position:absolute!important;",je="top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;",ze=De.os.isAndroid(),$e=e=>{const t=((e,t)=>{const n=e.dom,r=window.getComputedStyle(n).getPropertyValue(t);return""!==r||z(e)?r:((e,t)=>C(e)?e.style.getPropertyValue(t):"")(n,t)})(e,"background-color");return void 0!==t&&""!==t?"background-color:"+t+"!important":"background-color:rgb(255,255,255)!important;"},Ue=Pe.DOM,Ke=Re().fold((()=>({bind:h,unbind:h})),(e=>{const t=(()=>{const e=y(h);return{...e,on:t=>e.get().each(t)}})(),n=b(),r=b(),o=((e,t)=>{let n=null;return{cancel:()=>{l(n)||(clearTimeout(n),n=null)},throttle:(...t)=>{l(n)&&(n=setTimeout((()=>{n=null,e.apply(null,t)}),50))}}})((()=>{document.body.scrollTop=0,document.documentElement.scrollTop=0,window.requestAnimationFrame((()=>{t.on((t=>K(t,{top:e.offsetTop+"px",left:e.offsetLeft+"px",height:e.height+"px",width:e.width+"px"})))}))}));return{bind:e=>{t.set(e),o.throttle(),n.set(Ne("resize",o.throttle)),r.set(Ne("scroll",o.throttle))},unbind:()=>{t.on((()=>{n.clear(),r.clear()})),t.clear()}}})),Xe=(e,t)=>{const n=document.body,r=document.documentElement,o=e.getContainer(),l=R(o),c=(e=>{const t=R(e.getElement());return _(t).map(j).getOrThunk((()=>(e=>{const t=e.dom.body;if(null==t)throw new Error("Body is not available yet");return R(t)})(q(t))))})(e),u=t.get(),d=R(e.getBody()),h=De.deviceType.isTouch(),g=o.style,p=e.iframeElement,f=null==p?void 0:p.style,v=e=>{e(n,"tox-fullscreen"),e(r,"tox-fullscreen"),e(o,"tox-fullscreen"),_(l).map((e=>j(e).dom)).each((t=>{e(t,"tox-fullscreen"),e(t,"tox-shadowhost")}))},y=()=>{h&&(e=>{const t=((e,t)=>{const n=document;return 1!==(r=n).nodeType&&9!==r.nodeType&&11!==r.nodeType||0===r.childElementCount?[]:x(n.querySelectorAll(e),R);var r})("["+Ve+"]");E(t,(t=>{const n=$(t,Ve);n&&"no-styles"!==n?K(t,e.parseStyle(n)):U(t,"style"),U(t,Ve)}))})(e.dom),v(Ue.removeClass),Ke.unbind(),w.from(t.get()).each((e=>e.fullscreenChangeHandler.unbind()))};if(u)u.fullscreenChangeHandler.unbind(),qe(e)&&He(c)&&(e=>{const t=e.dom;t.exitFullscreen?t.exitFullscreen():t.msExitFullscreen?t.msExitFullscreen():t.webkitCancelFullScreen&&t.webkitCancelFullScreen()})(q(c)),f.width=u.iframeWidth,f.height=u.iframeHeight,g.width=u.containerWidth,g.height=u.containerHeight,g.top=u.containerTop,g.left=u.containerLeft,y(),b=u.scrollPos,window.scrollTo(b.x,b.y),t.set(null),We(e,!1),e.off("remove",y);else{const n=J(q(c),void 0!==document.fullscreenElement?"fullscreenchange":void 0!==document.msFullscreenElement?"MSFullscreenChange":void 0!==document.webkitFullscreenElement?"webkitfullscreenchange":"fullscreenchange",(n=>{qe(e)&&(He(c)||null===t.get()||Xe(e,t))})),r={scrollPos:Me(window),containerWidth:g.width,containerHeight:g.height,containerTop:g.top,containerLeft:g.left,iframeWidth:f.width,iframeHeight:f.height,fullscreenChangeHandler:n};h&&((e,t,n)=>{const r=t=>n=>{const r=$(n,"style"),o=void 0===r?"no-styles":r.trim();o!==t&&(((e,t,n)=>{((e,t,n)=>{if(!(s(n)||a(n)||m(n)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")})(e.dom,t,n)})(n,Ve,o),K(n,e.parseStyle(t)))},o=Ie(t,"*"),l=(e=>{const t=[];for(let n=0,r=e.length;nBe(e,"*:not(.tox-silver-sink)")))),c=$e(n);E(l,r("display:none!important;")),E(o,r(_e+je+c)),r((!0===ze?"":_e)+je+c)(t)})(e.dom,l,d),f.width=f.height="100%",g.width=g.height="",v(Ue.addClass),Ke.bind(l),e.on("remove",y),t.set(r),qe(e)&&(e=>{const t=e.dom;t.requestFullscreen?t.requestFullscreen():t.msRequestFullscreen?t.msRequestFullscreen():t.webkitRequestFullScreen&&t.webkitRequestFullScreen()})(c),We(e,!0)}var b},Ye=(e,t)=>n=>{n.setActive(null!==t.get());const r=e=>n.setActive(e.state);return e.on("FullscreenStateChanged",r),()=>e.off("FullscreenStateChanged",r)};t.add("fullscreen",(t=>{const n=e(null);return t.inline||((e=>{(0,e.options.register)("fullscreen_native",{processor:"boolean",default:!1})})(t),((e,t)=>{e.addCommand("mceFullScreen",(()=>{Xe(e,t)}))})(t,n),((e,t)=>{const n=()=>e.execCommand("mceFullScreen");e.ui.registry.addToggleMenuItem("fullscreen",{text:"Fullscreen",icon:"fullscreen",shortcut:"Meta+Shift+F",onAction:n,onSetup:Ye(e,t)}),e.ui.registry.addToggleButton("fullscreen",{tooltip:"Fullscreen",icon:"fullscreen",onAction:n,onSetup:Ye(e,t)})})(t,n),t.addShortcut("Meta+Shift+F","","mceFullScreen")),(e=>({isFullscreen:()=>null!==e.get()}))(n)}))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/help/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/help/plugin.min.js new file mode 100644 index 0000000000..f78120e81e --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/help/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");let t=0;const n=e=>{const n=(new Date).getTime(),o=Math.floor(1e9*Math.random());return t++,e+"_"+o+t+String(n)},o=e=>t=>t.options.get(e),a=o("help_tabs"),i=o("forced_plugins"),r=("string",e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(a=String).prototype.isPrototypeOf(n)||(null===(i=o.constructor)||void 0===i?void 0:i.name)===a.name)?"string":t;var n,o,a,i})(e));const s=(void 0,e=>undefined===e);const l=e=>"function"==typeof e,c=(!1,()=>false);class u{constructor(e,t){this.tag=e,this.value=t}static some(e){return new u(!0,e)}static none(){return u.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?u.some(e(this.value)):u.none()}bind(e){return this.tag?e(this.value):u.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:u.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?u.none():u.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}u.singletonNone=new u(!1);const m=Array.prototype.slice,h=Array.prototype.indexOf,p=(e,t)=>{const n=e.length,o=new Array(n);for(let a=0;a{const n=[];for(let o=0,a=e.length;o{const n=m.call(e,0);return n.sort(t),n},y=Object.keys,b=Object.hasOwnProperty,k=(e,t)=>b.call(e,t);var v=tinymce.util.Tools.resolve("tinymce.Env");const f=e=>{const t=v.os.isMacOS()||v.os.isiOS(),n=t?{alt:"⌥",ctrl:"⌃",shift:"⇧",meta:"⌘",access:"⌃⌥"}:{meta:"Ctrl ",access:"Shift + Alt "},o=e.split("+"),a=p(o,(e=>{const t=e.toLowerCase().trim();return k(n,t)?n[t]:e}));return t?a.join("").replace(/\s/,""):a.join("+")},w=[{shortcuts:["Meta + B"],action:"Bold"},{shortcuts:["Meta + I"],action:"Italic"},{shortcuts:["Meta + U"],action:"Underline"},{shortcuts:["Meta + A"],action:"Select all"},{shortcuts:["Meta + Y","Meta + Shift + Z"],action:"Redo"},{shortcuts:["Meta + Z"],action:"Undo"},{shortcuts:["Access + 1"],action:"Heading 1"},{shortcuts:["Access + 2"],action:"Heading 2"},{shortcuts:["Access + 3"],action:"Heading 3"},{shortcuts:["Access + 4"],action:"Heading 4"},{shortcuts:["Access + 5"],action:"Heading 5"},{shortcuts:["Access + 6"],action:"Heading 6"},{shortcuts:["Access + 7"],action:"Paragraph"},{shortcuts:["Access + 8"],action:"Div"},{shortcuts:["Access + 9"],action:"Address"},{shortcuts:["Alt + 0"],action:"Open help dialog"},{shortcuts:["Alt + F9"],action:"Focus to menubar"},{shortcuts:["Alt + F10"],action:"Focus to toolbar"},{shortcuts:["Alt + F11"],action:"Focus to element path"},{shortcuts:["Ctrl + F9"],action:"Focus to contextual toolbar"},{shortcuts:["Shift + Enter"],action:"Open popup menu for split buttons"},{shortcuts:["Meta + K"],action:"Insert link (if link plugin activated)"},{shortcuts:["Meta + S"],action:"Save (if save plugin activated)"},{shortcuts:["Meta + F"],action:"Find (if searchreplace plugin activated)"},{shortcuts:["Meta + Shift + F"],action:"Switch to or from fullscreen mode"}],A=()=>({name:"shortcuts",title:"Handy Shortcuts",items:[{type:"table",header:["Action","Shortcut"],cells:p(w,(e=>{const t=p(e.shortcuts,f).join(" or ");return[e.action,t]}))}]});var x=tinymce.util.Tools.resolve("tinymce.util.I18n");const T=p([{key:"advlist",name:"Advanced List"},{key:"anchor",name:"Anchor"},{key:"autolink",name:"Autolink"},{key:"autoresize",name:"Autoresize"},{key:"autosave",name:"Autosave"},{key:"charmap",name:"Character Map"},{key:"code",name:"Code"},{key:"codesample",name:"Code Sample"},{key:"colorpicker",name:"Color Picker"},{key:"directionality",name:"Directionality"},{key:"emoticons",name:"Emoticons"},{key:"fullscreen",name:"Full Screen"},{key:"help",name:"Help"},{key:"image",name:"Image"},{key:"importcss",name:"Import CSS"},{key:"insertdatetime",name:"Insert Date/Time"},{key:"link",name:"Link"},{key:"lists",name:"Lists"},{key:"media",name:"Media"},{key:"nonbreaking",name:"Nonbreaking"},{key:"pagebreak",name:"Page Break"},{key:"preview",name:"Preview"},{key:"quickbars",name:"Quick Toolbars"},{key:"save",name:"Save"},{key:"searchreplace",name:"Search and Replace"},{key:"table",name:"Table"},{key:"template",name:"Template"},{key:"textcolor",name:"Text Color"},{key:"visualblocks",name:"Visual Blocks"},{key:"visualchars",name:"Visual Characters"},{key:"wordcount",name:"Word Count"},{key:"a11ychecker",name:"Accessibility Checker",type:"premium"},{key:"advcode",name:"Advanced Code Editor",type:"premium"},{key:"advtable",name:"Advanced Tables",type:"premium"},{key:"casechange",name:"Case Change",type:"premium"},{key:"checklist",name:"Checklist",type:"premium"},{key:"editimage",name:"Enhanced Image Editing",type:"premium"},{key:"footnotes",name:"Footnotes",type:"premium"},{key:"mediaembed",name:"Enhanced Media Embed",type:"premium",slug:"introduction-to-mediaembed"},{key:"export",name:"Export",type:"premium"},{key:"formatpainter",name:"Format Painter",type:"premium"},{key:"linkchecker",name:"Link Checker",type:"premium"},{key:"mentions",name:"Mentions",type:"premium"},{key:"mergetags",name:"Merge Tags",type:"premium"},{key:"pageembed",name:"Page Embed",type:"premium"},{key:"permanentpen",name:"Permanent Pen",type:"premium"},{key:"powerpaste",name:"PowerPaste",type:"premium",slug:"introduction-to-powerpaste"},{key:"rtc",name:"Real-Time Collaboration",type:"premium",slug:"rtc-introduction"},{key:"tinymcespellchecker",name:"Spell Checker Pro",type:"premium",slug:"introduction-to-tiny-spellchecker"},{key:"autocorrect",name:"Spelling Autocorrect",type:"premium"},{key:"tinycomments",name:"Tiny Comments",type:"premium",slug:"introduction-to-tiny-comments"},{key:"tinydrive",name:"Tiny Drive",type:"premium",slug:"tinydrive-introduction"},{key:"tableofcontents",name:"Table of Contents",type:"premium"}],(e=>({...e,type:e.type||"opensource",slug:e.slug||e.key}))),M=e=>{const t=e=>`${e.name}`,n=(e,n)=>{return(o=T,a=e=>e.key===n,((e,t,n)=>{for(let o=0,a=e.length;o((e,n)=>{const o=e.plugins[n].getMetadata;if(l(o)){const e=o();return{name:e.name,html:t(e)}}return{name:n,html:n}})(e,n)),(e=>{const n="premium"===e.type?`${e.name}*`:e.name;return{name:n,html:t({name:n,url:`https://www.tiny.cloud/docs/tinymce/6/${e.slug}/`})}}));var o,a},o=e=>{const t=(e=>{const t=y(e.plugins),n=i(e);return s(n)?t:d(t,(e=>!(((e,t)=>h.call(e,t))(n,e)>-1)))})(e),o=g(p(t,(t=>n(e,t))),((e,t)=>e.name.localeCompare(t.name))),a=p(o,(e=>"
  • "+e.html+"
  • ")),r=a.length,l=a.join("");return"

    "+x.translate(["Plugins installed ({0}):",r])+"

      "+l+"
    "},a={type:"htmlpanel",presets:"document",html:[(e=>null==e?"":'
    '+o(e)+"
    ")(e),(()=>{const e=d(T,(({type:e})=>"premium"===e)),t=g(p(e,(e=>e.name)),((e,t)=>e.localeCompare(t))),n=p(t,(e=>`
  • ${e}
  • `)).join("");return'

    '+x.translate("Premium plugins:")+"

    "})()].join("")};return{name:"plugins",title:"Plugins",items:[a]}};var C=tinymce.util.Tools.resolve("tinymce.EditorManager");const F=(e,t)=>()=>{const{tabs:o,names:i}=((e,t)=>{const o=A(),i={name:"keyboardnav",title:"Keyboard Navigation",items:[{type:"htmlpanel",presets:"document",html:"

    Editor UI keyboard navigation

    \n\n

    Activating keyboard navigation

    \n\n

    The sections of the outer UI of the editor - the menubar, toolbar, sidebar and footer - are all keyboard navigable. As such, there are multiple ways to activate keyboard navigation:

    \n
      \n
    • Focus the menubar: Alt + F9 (Windows) or ⌥F9 (MacOS)
    • \n
    • Focus the toolbar: Alt + F10 (Windows) or ⌥F10 (MacOS)
    • \n
    • Focus the footer: Alt + F11 (Windows) or ⌥F11 (MacOS)
    • \n
    \n\n

    Focusing the menubar or toolbar will start keyboard navigation at the first item in the menubar or toolbar, which will be highlighted with a gray background. Focusing the footer will start keyboard navigation at the first item in the element path, which will be highlighted with an underline.

    \n\n

    Moving between UI sections

    \n\n

    When keyboard navigation is active, pressing tab will move the focus to the next major section of the UI, where applicable. These sections are:

    \n
      \n
    • the menubar
    • \n
    • each group of the toolbar
    • \n
    • the sidebar
    • \n
    • the element path in the footer
    • \n
    • the wordcount toggle button in the footer
    • \n
    • the branding link in the footer
    • \n
    • the editor resize handle in the footer
    • \n
    \n\n

    Pressing shift + tab will move backwards through the same sections, except when moving from the footer to the toolbar. Focusing the element path then pressing shift + tab will move focus to the first toolbar group, not the last.

    \n\n

    Moving within UI sections

    \n\n

    Keyboard navigation within UI sections can usually be achieved using the left and right arrow keys. This includes:

    \n
      \n
    • moving between menus in the menubar
    • \n
    • moving between buttons in a toolbar group
    • \n
    • moving between items in the element path
    • \n
    \n\n

    In all these UI sections, keyboard navigation will cycle within the section. For example, focusing the last button in a toolbar group then pressing right arrow will move focus to the first item in the same toolbar group.

    \n\n

    Executing buttons

    \n\n

    To execute a button, navigate the selection to the desired button and hit space or enter.

    \n\n

    Opening, navigating and closing menus

    \n\n

    When focusing a menubar button or a toolbar button with a menu, pressing space, enter or down arrow will open the menu. When the menu opens the first item will be selected. To move up or down the menu, press the up or down arrow key respectively. This is the same for submenus, which can also be opened and closed using the left and right arrow keys.

    \n\n

    To close any active menu, hit the escape key. When a menu is closed the selection will be restored to its previous selection. This also works for closing submenus.

    \n\n

    Context toolbars and menus

    \n\n

    To focus an open context toolbar such as the table context toolbar, press Ctrl + F9 (Windows) or ⌃F9 (MacOS).

    \n\n

    Context toolbar navigation is the same as toolbar navigation, and context menu navigation is the same as standard menu navigation.

    \n\n

    Dialog navigation

    \n\n

    There are two types of dialog UIs in TinyMCE: tabbed dialogs and non-tabbed dialogs.

    \n\n

    When a non-tabbed dialog is opened, the first interactive component in the dialog will be focused. Users can navigate between interactive components by pressing tab. This includes any footer buttons. Navigation will cycle back to the first dialog component if tab is pressed while focusing the last component in the dialog. Pressing shift + tab will navigate backwards.

    \n\n

    When a tabbed dialog is opened, the first button in the tab menu is focused. Pressing tab will navigate to the first interactive component in that tab, and will cycle through the tab\u2019s components, the footer buttons, then back to the tab button. To switch to another tab, focus the tab button for the current tab, then use the arrow keys to cycle through the tab buttons.

    "}]},s=M(e),l=(()=>{var e,t;const n='TinyMCE '+(e=C.majorVersion,t=C.minorVersion,(0===e.indexOf("@")?"X.X.X":e+"."+t)+"");return{name:"versions",title:"Version",items:[{type:"htmlpanel",html:"

    "+x.translate(["You are using {0}",n])+"

    ",presets:"document"}]}})(),c={[o.name]:o,[i.name]:i,[s.name]:s,[l.name]:l,...t.get()};return u.from(a(e)).fold((()=>(e=>{const t=y(e),n=t.indexOf("versions");return-1!==n&&(t.splice(n,1),t.push("versions")),{tabs:e,names:t}})(c)),(e=>((e,t)=>{const o={},a=p(e,(e=>{var a;if(r(e))return k(t,e)&&(o[e]=t[e]),e;{const t=null!==(a=e.name)&&void 0!==a?a:n("tab-name");return o[t]=e,t}}));return{tabs:o,names:a}})(e,c)))})(e,t),s={type:"tabpanel",tabs:(e=>{const t=[],n=e=>{t.push(e)};for(let t=0;t{return k(t=o,n=e)?u.from(t[n]):u.none();var t,n})))};e.windowManager.open({title:"Help",size:"medium",body:s,buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{}})};e.add("help",(e=>{const t=(e=>{let t={};return{get:()=>t,set:e=>{t=e}}})(),o=(e=>({addTab:t=>{var o;const a=null!==(o=t.name)&&void 0!==o?o:n("tab-name"),i=e.get();i[a]=t,e.set(i)}}))(t);(e=>{(0,e.options.register)("help_tabs",{processor:"array"})})(e);const a=F(e,t);return((e,t)=>{e.ui.registry.addButton("help",{icon:"help",tooltip:"Help",onAction:t}),e.ui.registry.addMenuItem("help",{text:"Help",icon:"help",shortcut:"Alt+0",onAction:t})})(e,a),((e,t)=>{e.addCommand("mceHelp",t)})(e,a),e.shortcuts.add("Alt+0","Open help dialog","mceHelp"),o}))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/image/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/image/plugin.min.js new file mode 100644 index 0000000000..bdb7823e67 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/image/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=Object.getPrototypeOf,a=(e,t,a)=>{var i;return!!a(e,t.prototype)||(null===(i=e.constructor)||void 0===i?void 0:i.name)===t.name},i=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&a(e,String,((e,t)=>t.isPrototypeOf(e)))?"string":t})(t)===e,s=e=>t=>typeof t===e,r=i("string"),o=i("object"),n=e=>((e,i)=>o(e)&&a(e,i,((e,a)=>t(e)===a)))(e,Object),l=i("array"),c=(null,e=>null===e);const m=s("boolean"),d=e=>!(e=>null==e)(e),g=s("function"),u=s("number"),p=()=>{};class h{constructor(e,t){this.tag=e,this.value=t}static some(e){return new h(!0,e)}static none(){return h.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?h.some(e(this.value)):h.none()}bind(e){return this.tag?e(this.value):h.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:h.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return d(e)?h.some(e):h.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}h.singletonNone=new h(!1);const b=Object.keys,v=Object.hasOwnProperty,y=(e,t)=>v.call(e,t),f=Array.prototype.push,w=e=>{const t=[];for(let a=0,i=e.length;a{((e,t,a)=>{if(!(r(a)||m(a)||u(a)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",a,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,a+"")})(e.dom,t,a)},D=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},_=D;var C=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),I=tinymce.util.Tools.resolve("tinymce.util.URI");const U=e=>e.length>0,x=e=>t=>t.options.get(e),S=x("image_dimensions"),N=x("image_advtab"),T=x("image_uploadtab"),O=x("image_prepend_url"),L=x("image_class_list"),E=x("image_description"),j=x("image_title"),M=x("image_caption"),R=x("image_list"),k=x("a11y_advanced_options"),z=x("automatic_uploads"),P=(e,t)=>Math.max(parseInt(e,10),parseInt(t,10)),B=e=>(e&&(e=e.replace(/px$/,"")),e),F=e=>(e.length>0&&/^[0-9]+$/.test(e)&&(e+="px"),e),H=e=>"IMG"===e.nodeName&&(e.hasAttribute("data-mce-object")||e.hasAttribute("data-mce-placeholder")),G=(e,t)=>{const a=e.options.get;return I.isDomSafe(t,"img",{allow_html_data_urls:a("allow_html_data_urls"),allow_script_urls:a("allow_script_urls"),allow_svg_data_urls:a("allow_svg_data_urls")})},W=C.DOM,$=e=>e.style.marginLeft&&e.style.marginRight&&e.style.marginLeft===e.style.marginRight?B(e.style.marginLeft):"",V=e=>e.style.marginTop&&e.style.marginBottom&&e.style.marginTop===e.style.marginBottom?B(e.style.marginTop):"",K=e=>e.style.borderWidth?B(e.style.borderWidth):"",Z=(e,t)=>{var a;return e.hasAttribute(t)&&null!==(a=e.getAttribute(t))&&void 0!==a?a:""},q=e=>null!==e.parentNode&&"FIGURE"===e.parentNode.nodeName,J=(e,t,a)=>{""===a||null===a?e.removeAttribute(t):e.setAttribute(t,a)},Q=(e,t)=>{const a=e.getAttribute("style"),i=t(null!==a?a:"");i.length>0?(e.setAttribute("style",i),e.setAttribute("data-mce-style",i)):e.removeAttribute("style")},X=(e,t)=>(e,a,i)=>{const s=e.style;s[a]?(s[a]=F(i),Q(e,t)):J(e,a,i)},Y=(e,t)=>e.style[t]?B(e.style[t]):Z(e,t),ee=(e,t)=>{const a=F(t);e.style.marginLeft=a,e.style.marginRight=a},te=(e,t)=>{const a=F(t);e.style.marginTop=a,e.style.marginBottom=a},ae=(e,t)=>{const a=F(t);e.style.borderWidth=a},ie=(e,t)=>{e.style.borderStyle=t},se=e=>{var t;return null!==(t=e.style.borderStyle)&&void 0!==t?t:""},re=e=>d(e)&&"FIGURE"===e.nodeName,oe=e=>0===W.getAttrib(e,"alt").length&&"presentation"===W.getAttrib(e,"role"),ne=e=>oe(e)?"":Z(e,"alt"),le=(e,t)=>{var a;const i=document.createElement("img");return J(i,"style",t.style),($(i)||""!==t.hspace)&&ee(i,t.hspace),(V(i)||""!==t.vspace)&&te(i,t.vspace),(K(i)||""!==t.border)&&ae(i,t.border),(se(i)||""!==t.borderStyle)&&ie(i,t.borderStyle),e(null!==(a=i.getAttribute("style"))&&void 0!==a?a:"")},ce=(e,t)=>({src:Z(t,"src"),alt:ne(t),title:Z(t,"title"),width:Y(t,"width"),height:Y(t,"height"),class:Z(t,"class"),style:e(Z(t,"style")),caption:q(t),hspace:$(t),vspace:V(t),border:K(t),borderStyle:se(t),isDecorative:oe(t)}),me=(e,t,a,i,s)=>{a[i]!==t[i]&&s(e,i,String(a[i]))},de=(e,t,a)=>{if(a){W.setAttrib(e,"role","presentation");const t=_(e);A(t,"alt","")}else{if(c(t)){"alt",_(e).dom.removeAttribute("alt")}else{const a=_(e);A(a,"alt",t)}"presentation"===W.getAttrib(e,"role")&&W.setAttrib(e,"role","")}},ge=(e,t)=>(a,i,s)=>{e(a,s),Q(a,t)},ue=(e,t,a)=>{const i=ce(e,a);me(a,i,t,"caption",((e,t,a)=>(e=>{q(e)?(e=>{const t=e.parentNode;d(t)&&(W.insertAfter(e,t),W.remove(t))})(e):(e=>{const t=W.create("figure",{class:"image"});W.insertAfter(t,e),t.appendChild(e),t.appendChild(W.create("figcaption",{contentEditable:"true"},"Caption")),t.contentEditable="false"})(e)})(e))),me(a,i,t,"src",J),me(a,i,t,"title",J),me(a,i,t,"width",X(0,e)),me(a,i,t,"height",X(0,e)),me(a,i,t,"class",J),me(a,i,t,"style",ge(((e,t)=>J(e,"style",t)),e)),me(a,i,t,"hspace",ge(ee,e)),me(a,i,t,"vspace",ge(te,e)),me(a,i,t,"border",ge(ae,e)),me(a,i,t,"borderStyle",ge(ie,e)),((e,t,a)=>{a.alt===t.alt&&a.isDecorative===t.isDecorative||de(e,a.alt,a.isDecorative)})(a,i,t)},pe=(e,t)=>{const a=(e=>{if(e.margin){const t=String(e.margin).split(" ");switch(t.length){case 1:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[0],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[0];break;case 2:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[1];break;case 3:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[1];break;case 4:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[3]}delete e.margin}return e})(e.dom.styles.parse(t)),i=e.dom.styles.parse(e.dom.styles.serialize(a));return e.dom.styles.serialize(i)},he=e=>{const t=e.selection.getNode(),a=e.dom.getParent(t,"figure.image");return a?e.dom.select("img",a)[0]:t&&("IMG"!==t.nodeName||H(t))?null:t},be=(e,t)=>{var a;const i=e.dom,s=((t,a)=>{const i={};var s;return((e,t,a,i)=>{((e,t)=>{const a=b(e);for(let i=0,s=a.length;i{(t(e,s)?a:i)(e,s)}))})(t,((t,a)=>!e.schema.isValidChild(a,"figure")),(s=i,(e,t)=>{s[t]=e}),p),i})(e.schema.getTextBlockElements()),r=i.getParent(t.parentNode,(e=>{return t=s,a=e.nodeName,y(t,a)&&void 0!==t[a]&&null!==t[a];var t,a}),e.getBody());return r&&null!==(a=i.split(r,t))&&void 0!==a?a:t},ve=(e,t)=>{const a=((t,a)=>{const i=document.createElement("img");if(ue((t=>pe(e,t)),{...a,caption:!1},i),de(i,a.alt,a.isDecorative),a.caption){const e=W.create("figure",{class:"image"});return e.appendChild(i),e.appendChild(W.create("figcaption",{contentEditable:"true"},"Caption")),e.contentEditable="false",e}return i})(0,t);e.dom.setAttrib(a,"data-mce-id","__mcenew"),e.focus(),e.selection.setContent(a.outerHTML);const i=e.dom.select('*[data-mce-id="__mcenew"]')[0];if(e.dom.setAttrib(i,"data-mce-id",null),re(i)){const t=be(e,i);e.selection.select(t)}else e.selection.select(i)},ye=(e,t)=>{const a=he(e);if(a){const i={...ce((t=>pe(e,t)),a),...t},s=((e,t)=>{const a=t.src;return{...t,src:G(e,a)?a:""}})(e,i);i.src?((e,t)=>{const a=he(e);if(a)if(ue((t=>pe(e,t)),t,a),((e,t)=>{e.dom.setAttrib(t,"src",t.getAttribute("src"))})(e,a),re(a.parentNode)){const t=a.parentNode;be(e,t),e.selection.select(a.parentNode)}else e.selection.select(a),((e,t,a)=>{const i=()=>{a.onload=a.onerror=null,e.selection&&(e.selection.select(a),e.nodeChanged())};a.onload=()=>{t.width||t.height||!S(e)||e.dom.setAttribs(a,{width:String(a.clientWidth),height:String(a.clientHeight)}),i()},a.onerror=i})(e,t,a)})(e,s):((e,t)=>{if(t){const a=e.dom.is(t.parentNode,"figure.image")?t.parentNode:t;e.dom.remove(a),e.focus(),e.nodeChanged(),e.dom.isEmpty(e.getBody())&&(e.setContent(""),e.selection.setCursorLocation())}})(e,a)}else t.src&&ve(e,{src:"",alt:"",title:"",width:"",height:"",class:"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:"",isDecorative:!1,...t})},fe=(we=(e,t)=>n(e)&&n(t)?fe(e,t):t,(...e)=>{if(0===e.length)throw new Error("Can't merge zero objects");const t={};for(let a=0;ar(e.value)?e.value:"",Ce=(e,t)=>{const a=[];return De.each(e,(e=>{const i=(e=>r(e.text)?e.text:r(e.title)?e.title:"")(e);if(void 0!==e.menu){const s=Ce(e.menu,t);a.push({text:i,items:s})}else{const s=t(e);a.push({text:i,value:s})}})),a},Ie=(e=_e)=>t=>t?h.from(t).map((t=>Ce(t,e))):h.none(),Ue=(e,t)=>((e,a)=>{for(let a=0;ay(e,"items"))(i=e[a])?Ue(i.items,t):i.value===t?h.some(i):h.none();if(s.isSome())return s}var i;return h.none()})(e),xe=Ie,Se=(e,t)=>e.bind((e=>Ue(e,t))),Ne=e=>{const t=xe((t=>e.convertURL(t.value||t.url||"","src"))),a=new Promise((a=>{((e,t)=>{const a=R(e);r(a)?fetch(a).then((e=>{e.ok&&e.json().then(t)})):g(a)?a(t):t(a)})(e,(e=>{a(t(e).map((e=>w([[{text:"None",value:""}],e]))))}))})),i=(A=L(e),Ie(_e)(A)),s=N(e),o=T(e),n=(e=>U(e.options.get("images_upload_url")))(e),l=(e=>d(e.options.get("images_upload_handler")))(e),c=(e=>{const t=he(e);return t?ce((t=>pe(e,t)),t):{src:"",alt:"",title:"",width:"",height:"",class:"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:"",isDecorative:!1}})(e),m=E(e),u=j(e),p=S(e),b=M(e),v=k(e),y=z(e),f=h.some(O(e)).filter((e=>r(e)&&e.length>0));var A;return a.then((e=>({image:c,imageList:e,classList:i,hasAdvTab:s,hasUploadTab:o,hasUploadUrl:n,hasUploadHandler:l,hasDescription:m,hasImageTitle:u,hasDimensions:p,hasImageCaption:b,prependURL:f,hasAccessibilityOptions:v,automaticUploads:y})))},Te=e=>{const t=e.imageList.map((e=>({name:"images",type:"listbox",label:"Image list",items:e}))),a={name:"alt",type:"input",label:"Alternative description",enabled:!(e.hasAccessibilityOptions&&e.image.isDecorative)},i=e.classList.map((e=>({name:"classes",type:"listbox",label:"Class",items:e})));return w([[{name:"src",type:"urlinput",filetype:"image",label:"Source"}],t.toArray(),e.hasAccessibilityOptions&&e.hasDescription?[{type:"label",label:"Accessibility",items:[{name:"isDecorative",type:"checkbox",label:"Image is decorative"}]}]:[],e.hasDescription?[a]:[],e.hasImageTitle?[{name:"title",type:"input",label:"Image title"}]:[],e.hasDimensions?[{name:"dimensions",type:"sizeinput"}]:[],[{...(s=e.classList.isSome()&&e.hasImageCaption,s?{type:"grid",columns:2}:{type:"panel"}),items:w([i.toArray(),e.hasImageCaption?[{type:"label",label:"Caption",items:[{type:"checkbox",name:"caption",label:"Show caption"}]}]:[]])}]]);var s},Oe=e=>({title:"General",name:"general",items:Te(e)}),Le=Te,Ee=e=>({src:{value:e.src,meta:{}},images:e.src,alt:e.alt,title:e.title,dimensions:{width:e.width,height:e.height},classes:e.class,caption:e.caption,style:e.style,vspace:e.vspace,border:e.border,hspace:e.hspace,borderstyle:e.borderStyle,fileinput:[],isDecorative:e.isDecorative}),je=(e,t)=>({src:e.src.value,alt:null!==e.alt&&0!==e.alt.length||!t?e.alt:null,title:e.title,width:e.dimensions.width,height:e.dimensions.height,class:e.classes,style:e.style,caption:e.caption,hspace:e.hspace,vspace:e.vspace,border:e.border,borderStyle:e.borderstyle,isDecorative:e.isDecorative}),Me=(e,t,a,i)=>{((e,t)=>{const a=t.getData();((e,t)=>/^(?:[a-zA-Z]+:)?\/\//.test(t)?h.none():e.prependURL.bind((e=>t.substring(0,e.length)!==e?h.some(e+t):h.none())))(e,a.src.value).each((e=>{t.setData({src:{value:e,meta:a.src.meta}})}))})(t,i),((e,t)=>{const a=t.getData(),i=a.src.meta;if(void 0!==i){const s=fe({},a);((e,t,a)=>{e.hasDescription&&r(a.alt)&&(t.alt=a.alt),e.hasAccessibilityOptions&&(t.isDecorative=a.isDecorative||t.isDecorative||!1),e.hasImageTitle&&r(a.title)&&(t.title=a.title),e.hasDimensions&&(r(a.width)&&(t.dimensions.width=a.width),r(a.height)&&(t.dimensions.height=a.height)),r(a.class)&&Se(e.classList,a.class).each((e=>{t.classes=e.value})),e.hasImageCaption&&m(a.caption)&&(t.caption=a.caption),e.hasAdvTab&&(r(a.style)&&(t.style=a.style),r(a.vspace)&&(t.vspace=a.vspace),r(a.border)&&(t.border=a.border),r(a.hspace)&&(t.hspace=a.hspace),r(a.borderstyle)&&(t.borderstyle=a.borderstyle))})(e,s,i),t.setData(s)}})(t,i),((e,t,a,i)=>{const s=i.getData(),r=s.src.value,o=s.src.meta||{};o.width||o.height||!t.hasDimensions||(U(r)?e.imageSize(r).then((e=>{a.open&&i.setData({dimensions:e})})).catch((e=>console.error(e))):i.setData({dimensions:{width:"",height:""}}))})(e,t,a,i),((e,t,a)=>{const i=a.getData(),s=Se(e.imageList,i.src.value);t.prevImage=s,a.setData({images:s.map((e=>e.value)).getOr("")})})(t,a,i)},Re=(e,t,a,i)=>{const s=i.getData();var r;i.block("Uploading image"),(r=s.fileinput,((e,t)=>0{i.unblock()}),(s=>{const r=URL.createObjectURL(s),o=()=>{i.unblock(),URL.revokeObjectURL(r)},n=s=>{i.setData({src:{value:s,meta:{}}}),i.showTab("general"),Me(e,t,a,i)};var l;(l=s,new Promise(((e,t)=>{const a=new FileReader;a.onload=()=>{e(a.result)},a.onerror=()=>{var e;t(null===(e=a.error)||void 0===e?void 0:e.message)},a.readAsDataURL(l)}))).then((a=>{const l=e.createBlobCache(s,r,a);t.automaticUploads?e.uploadImage(l).then((e=>{n(e.url),o()})).catch((t=>{o(),e.alertErr(t)})):(e.addToBlobCache(l),n(l.blobUri()),i.unblock())}))}))},ke=(e,t,a)=>(i,s)=>{"src"===s.name?Me(e,t,a,i):"images"===s.name?((e,t,a,i)=>{const s=i.getData(),r=Se(t.imageList,s.images);r.each((e=>{const t=""===s.alt||a.prevImage.map((e=>e.text===s.alt)).getOr(!1);t?""===e.value?i.setData({src:e,alt:a.prevAlt}):i.setData({src:e,alt:e.text}):i.setData({src:e})})),a.prevImage=r,Me(e,t,a,i)})(e,t,a,i):"alt"===s.name?a.prevAlt=i.getData().alt:"fileinput"===s.name?Re(e,t,a,i):"isDecorative"===s.name&&i.setEnabled("alt",!i.getData().isDecorative)},ze=e=>()=>{e.open=!1},Pe=e=>e.hasAdvTab||e.hasUploadUrl||e.hasUploadHandler?{type:"tabpanel",tabs:w([[Oe(e)],e.hasAdvTab?[{title:"Advanced",name:"advanced",items:[{type:"grid",columns:2,items:[{type:"input",label:"Vertical space",name:"vspace",inputMode:"numeric"},{type:"input",label:"Horizontal space",name:"hspace",inputMode:"numeric"},{type:"input",label:"Border width",name:"border",inputMode:"numeric"},{type:"listbox",name:"borderstyle",label:"Border style",items:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]}]}]}]:[],e.hasUploadTab&&(e.hasUploadUrl||e.hasUploadHandler)?[{title:"Upload",name:"upload",items:[{type:"dropzone",name:"fileinput"}]}]:[]])}:{type:"panel",items:Le(e)},Be=(e,t,a)=>i=>{const s=fe(Ee(t.image),i.getData()),r={...s,style:le(a.normalizeCss,je(s,!1))};e.execCommand("mceUpdateImage",!1,je(r,t.hasAccessibilityOptions)),e.editorUpload.uploadImagesAuto(),i.close()},Fe=e=>t=>G(e,t)?(e=>new Promise((t=>{const a=document.createElement("img"),i=e=>{a.onload=a.onerror=null,a.parentNode&&a.parentNode.removeChild(a),t(e)};a.onload=()=>{const e={width:P(a.width,a.clientWidth),height:P(a.height,a.clientHeight)};i(Promise.resolve(e))},a.onerror=()=>{i(Promise.reject(`Failed to get image dimensions for: ${e}`))};const s=a.style;s.visibility="hidden",s.position="fixed",s.bottom=s.left="0px",s.width=s.height="auto",document.body.appendChild(a),a.src=e})))(e.documentBaseURI.toAbsolute(t)).then((e=>({width:String(e.width),height:String(e.height)}))):Promise.resolve({width:"",height:""}),He=e=>(t,a,i)=>{var s;return e.editorUpload.blobCache.create({blob:t,blobUri:a,name:null===(s=t.name)||void 0===s?void 0:s.replace(/\.[^\.]+$/,""),filename:t.name,base64:i.split(",")[1]})},Ge=e=>t=>{e.editorUpload.blobCache.add(t)},We=e=>t=>{e.windowManager.alert(t)},$e=e=>t=>pe(e,t),Ve=e=>t=>e.dom.parseStyle(t),Ke=e=>(t,a)=>e.dom.serializeStyle(t,a),Ze=e=>t=>Ae(e).upload([t],!1).then((e=>{var t;return 0===e.length?Promise.reject("Failed to upload image"):!1===e[0].status?Promise.reject(null===(t=e[0].error)||void 0===t?void 0:t.message):e[0]})),qe=e=>{const t={imageSize:Fe(e),addToBlobCache:Ge(e),createBlobCache:He(e),alertErr:We(e),normalizeCss:$e(e),parseStyle:Ve(e),serializeStyle:Ke(e),uploadImage:Ze(e)};return{open:()=>{Ne(e).then((a=>{const i=(e=>({prevImage:Se(e.imageList,e.image.src),prevAlt:e.image.alt,open:!0}))(a);return{title:"Insert/Edit Image",size:"normal",body:Pe(a),buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:Ee(a.image),onSubmit:Be(e,a,t),onChange:ke(t,a,i),onClose:ze(i)}})).then(e.windowManager.open)}}},Je=e=>{const t=e.attr("class");return d(t)&&/\bimage\b/.test(t)},Qe=e=>t=>{let a=t.length;const i=t=>{t.attr("contenteditable",e?"true":null)};for(;a--;){const s=t[a];Je(s)&&(s.attr("contenteditable",e?"false":null),De.each(s.getAll("figcaption"),i))}};e.add("image",(e=>{(e=>{const t=e.options.register;t("image_dimensions",{processor:"boolean",default:!0}),t("image_advtab",{processor:"boolean",default:!1}),t("image_uploadtab",{processor:"boolean",default:!0}),t("image_prepend_url",{processor:"string",default:""}),t("image_class_list",{processor:"object[]"}),t("image_description",{processor:"boolean",default:!0}),t("image_title",{processor:"boolean",default:!1}),t("image_caption",{processor:"boolean",default:!1}),t("image_list",{processor:e=>{const t=!1===e||r(e)||((e,t)=>{if(l(e)){for(let a=0,i=e.length;a{e.on("PreInit",(()=>{e.parser.addNodeFilter("figure",Qe(!0)),e.serializer.addNodeFilter("figure",Qe(!1))}))})(e),(e=>{e.ui.registry.addToggleButton("image",{icon:"image",tooltip:"Insert/edit image",onAction:qe(e).open,onSetup:t=>(t.setActive(d(he(e))),e.selection.selectorChangedWithUnbind("img:not([data-mce-object]):not([data-mce-placeholder]),figure.image",t.setActive).unbind)}),e.ui.registry.addMenuItem("image",{icon:"image",text:"Image...",onAction:qe(e).open}),e.ui.registry.addContextMenu("image",{update:e=>re(e)||"IMG"===e.nodeName&&!H(e)?["image"]:[]})})(e),(e=>{e.addCommand("mceImage",qe(e).open),e.addCommand("mceUpdateImage",((t,a)=>{e.undoManager.transact((()=>ye(e,a)))}))})(e)}))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/importcss/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/importcss/plugin.min.js new file mode 100644 index 0000000000..abc7f5f22b --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/importcss/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(s=r=e,(o=String).prototype.isPrototypeOf(s)||(null===(n=r.constructor)||void 0===n?void 0:n.name)===o.name)?"string":t;var s,r,o,n})(t)===e,s=t("string"),r=t("object"),o=t("array"),n=("function",e=>"function"==typeof e);var c=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),i=tinymce.util.Tools.resolve("tinymce.EditorManager"),l=tinymce.util.Tools.resolve("tinymce.Env"),a=tinymce.util.Tools.resolve("tinymce.util.Tools");const p=e=>t=>t.options.get(e),u=p("importcss_merge_classes"),m=p("importcss_exclusive"),f=p("importcss_selector_converter"),y=p("importcss_selector_filter"),d=p("importcss_groups"),h=p("importcss_append"),_=p("importcss_file_filter"),g=p("skin"),v=p("skin_url"),b=Array.prototype.push,x=/^\.(?:ephox|tiny-pageembed|mce)(?:[.-]+\w+)+$/,T=e=>s(e)?t=>-1!==t.indexOf(e):e instanceof RegExp?t=>e.test(t):e,S=(e,t)=>{let s={};const r=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(t);if(!r)return;const o=r[1],n=r[2].substr(1).split(".").join(" "),c=a.makeMap("a,img");return r[1]?(s={title:t},e.schema.getTextBlockElements()[o]?s.block=o:e.schema.getBlockElements()[o]||c[o.toLowerCase()]?s.selector=o:s.inline=o):r[2]&&(s={inline:"span",title:t.substr(1),classes:n}),u(e)?s.classes=n:s.attributes={class:n},s},k=(e,t)=>null===t||m(e),w=e=>{e.on("init",(()=>{const t=(()=>{const e=[],t=[],s={};return{addItemToGroup:(e,r)=>{s[e]?s[e].push(r):(t.push(e),s[e]=[r])},addItem:t=>{e.push(t)},toFormats:()=>{return(r=t,n=e=>{const t=s[e];return 0===t.length?[]:[{title:e,items:t}]},(e=>{const t=[];for(let s=0,r=e.length;s{const s=e.length,r=new Array(s);for(let o=0;oa.map(e,(e=>a.extend({},e,{original:e,selectors:{},filter:T(e.filter)}))))(d(e)),u=(t,s)=>{if(((e,t,s,r)=>!(k(e,s)?t in r:t in s.selectors))(e,t,s,r)){((e,t,s,r)=>{k(e,s)?r[t]=!0:s.selectors[t]=!0})(e,t,s,r);const o=((e,t,s,r)=>{let o;const n=f(e);return o=r&&r.selector_converter?r.selector_converter:n||(()=>S(e,s)),o.call(t,s,r)})(e,e.plugins.importcss,t,s);if(o){const t=o.name||c.DOM.uniqueId();return e.formatter.register(t,o),{title:o.title,format:t}}}return null};a.each(((e,t,r)=>{const o=[],n={},c=(t,n)=>{let p,u=t.href;if(u=(e=>{const t=l.cacheSuffix;return s(e)&&(e=e.replace("?"+t,"").replace("&"+t,"")),e})(u),u&&(!r||r(u,n))&&!((e,t)=>{const s=g(e);if(s){const r=v(e),o=r?e.documentBaseURI.toAbsolute(r):i.baseURL+"/skins/ui/"+s,n=i.baseURL+"/skins/content/";return t===o+"/content"+(e.inline?".inline":"")+".min.css"||-1!==t.indexOf(n)}return!1})(e,u)){a.each(t.imports,(e=>{c(e,!0)}));try{p=t.cssRules||t.rules}catch(e){}a.each(p,(e=>{e.styleSheet?c(e.styleSheet,!0):e.selectorText&&a.each(e.selectorText.split(","),(e=>{o.push(a.trim(e))}))}))}};a.each(e.contentCSS,(e=>{n[e]=!0})),r||(r=(e,t)=>t||n[e]);try{a.each(t.styleSheets,(e=>{c(e)}))}catch(e){}return o})(e,e.getDoc(),T(_(e))),(e=>{if(!x.test(e)&&(!n||n(e))){const s=((e,t)=>a.grep(e,(e=>!e.filter||e.filter(t))))(p,e);if(s.length>0)a.each(s,(s=>{const r=u(e,s);r&&t.addItemToGroup(s.title,r)}));else{const s=u(e,null);s&&t.addItem(s)}}}));const m=t.toFormats();e.dispatch("addStyleModifications",{items:m,replace:!h(e)})}))};e.add("importcss",(e=>((e=>{const t=e.options.register,o=e=>s(e)||n(e)||r(e);t("importcss_merge_classes",{processor:"boolean",default:!0}),t("importcss_exclusive",{processor:"boolean",default:!0}),t("importcss_selector_converter",{processor:"function"}),t("importcss_selector_filter",{processor:o}),t("importcss_file_filter",{processor:o}),t("importcss_groups",{processor:"object[]"}),t("importcss_append",{processor:"boolean",default:!1})})(e),w(e),(e=>({convertSelectorToFormat:t=>S(e,t)}))(e))))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/insertdatetime/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/insertdatetime/plugin.min.js new file mode 100644 index 0000000000..7130a6d0e9 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/insertdatetime/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),a=t("insertdatetime_dateformat"),r=t("insertdatetime_timeformat"),n=t("insertdatetime_formats"),s=t("insertdatetime_element"),i="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),o="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),l="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),m="January February March April May June July August September October November December".split(" "),c=(e,t)=>{if((e=""+e).length(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+a.getFullYear())).replace("%y",""+a.getYear())).replace("%m",c(a.getMonth()+1,2))).replace("%d",c(a.getDate(),2))).replace("%H",""+c(a.getHours(),2))).replace("%M",""+c(a.getMinutes(),2))).replace("%S",""+c(a.getSeconds(),2))).replace("%I",""+((a.getHours()+11)%12+1))).replace("%p",a.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(m[a.getMonth()]))).replace("%b",""+e.translate(l[a.getMonth()]))).replace("%A",""+e.translate(o[a.getDay()]))).replace("%a",""+e.translate(i[a.getDay()]))).replace("%%","%"),u=(e,t)=>{if(s(e)){const a=d(e,t);let r;r=/%[HMSIp]/.test(t)?d(e,"%Y-%m-%dT%H:%M"):d(e,"%Y-%m-%d");const n=e.dom.getParent(e.selection.getStart(),"time");n?((e,t,a,r)=>{const n=e.dom.create("time",{datetime:a},r);e.dom.replace(n,t),e.selection.select(n,!0),e.selection.collapse(!1)})(e,n,r,a):e.insertContent('")}else e.insertContent(d(e,t))};var p=tinymce.util.Tools.resolve("tinymce.util.Tools");e.add("insertdatetime",(e=>{(e=>{const t=e.options.register;t("insertdatetime_dateformat",{processor:"string",default:e.translate("%Y-%m-%d")}),t("insertdatetime_timeformat",{processor:"string",default:e.translate("%H:%M:%S")}),t("insertdatetime_formats",{processor:"string[]",default:["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"]}),t("insertdatetime_element",{processor:"boolean",default:!1})})(e),(e=>{e.addCommand("mceInsertDate",((t,r)=>{u(e,null!=r?r:a(e))})),e.addCommand("mceInsertTime",((t,a)=>{u(e,null!=a?a:r(e))}))})(e),(e=>{const t=n(e),a=(e=>{let t=e;return{get:()=>t,set:e=>{t=e}}})((e=>{const t=n(e);return t.length>0?t[0]:r(e)})(e)),s=t=>e.execCommand("mceInsertDate",!1,t);e.ui.registry.addSplitButton("insertdatetime",{icon:"insert-time",tooltip:"Insert date/time",select:e=>e===a.get(),fetch:a=>{a(p.map(t,(t=>({type:"choiceitem",text:d(e,t),value:t}))))},onAction:e=>{s(a.get())},onItemAction:(e,t)=>{a.set(t),s(t)}});const i=e=>()=>{a.set(e),s(e)};e.ui.registry.addNestedMenuItem("insertdatetime",{icon:"insert-time",text:"Date/time",getSubmenuItems:()=>p.map(t,(t=>({type:"menuitem",text:d(e,t),onAction:i(t)})))})})(e)}))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/link/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/link/plugin.min.js new file mode 100644 index 0000000000..62927c0532 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/link/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(l=o.constructor)||void 0===l?void 0:l.name)===r.name)?"string":t;var n,o,r,l})(t)===e,n=e=>t=>typeof t===e,o=t("string"),r=t("object"),l=t("array"),a=(null,e=>null===e);const i=n("boolean"),s=e=>!(e=>null==e)(e),c=n("function"),u=(e,t)=>{if(l(e)){for(let n=0,o=e.length;n{},d=(e,t)=>e===t;class m{constructor(e,t){this.tag=e,this.value=t}static some(e){return new m(!0,e)}static none(){return m.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?m.some(e(this.value)):m.none()}bind(e){return this.tag?e(this.value):m.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:m.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return s(e)?m.some(e):m.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}m.singletonNone=new m(!1);const h=Array.prototype.indexOf,f=Array.prototype.push,p=e=>{const t=[];for(let n=0,o=e.length;n{for(let n=0;ne.exists((e=>n(e,t))),y=e=>{const t=[],n=e=>{t.push(e)};for(let t=0;te?m.some(t):m.none(),b=e=>t=>t.options.get(e),_=b("link_assume_external_targets"),w=b("link_context_toolbar"),C=b("link_list"),O=b("link_default_target"),N=b("link_default_protocol"),A=b("link_target_list"),S=b("link_rel_list"),T=b("link_class_list"),E=b("link_title"),P=b("allow_unsafe_link_target"),R=b("link_quicklink");var L=tinymce.util.Tools.resolve("tinymce.util.Tools");const M=e=>o(e.value)?e.value:"",D=(e,t)=>{const n=[];return L.each(e,(e=>{const r=(e=>o(e.text)?e.text:o(e.title)?e.title:"")(e);if(void 0!==e.menu){const o=D(e.menu,t);n.push({text:r,items:o})}else{const o=t(e);n.push({text:r,value:o})}})),n},B=(e=M)=>t=>m.from(t).map((t=>D(t,e))),I=e=>B(M)(e),j=B,K=(e,t)=>n=>({name:e,type:"listbox",label:t,items:n}),U=M,q=Object.keys,F=Object.hasOwnProperty,V=(e,t)=>F.call(e,t);var $=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),z=tinymce.util.Tools.resolve("tinymce.util.URI");const G=e=>s(e)&&"a"===e.nodeName.toLowerCase(),H=e=>G(e)&&!!Q(e),J=(e,t)=>{if(e.collapsed)return[];{const n=e.cloneContents(),o=n.firstChild,r=new $(o,n),l=[];let a=o;do{t(a)&&l.push(a)}while(a=r.next());return l}},W=e=>/^\w+:/i.test(e),Q=e=>{var t,n;return null!==(n=null!==(t=e.getAttribute("data-mce-href"))&&void 0!==t?t:e.getAttribute("href"))&&void 0!==n?n:""},X=(e,t)=>{const n=["noopener"],o=e?e.split(/\s+/):[],r=e=>e.filter((e=>-1===L.inArray(n,e))),l=t?(e=>(e=r(e)).length>0?e.concat(n):n)(o):r(o);return l.length>0?(e=>L.trim(e.sort().join(" ")))(l):""},Y=(e,t)=>(t=t||e.selection.getNode(),oe(t)?m.from(e.dom.select("a[href]",t)[0]):m.from(e.dom.getParent(t,"a[href]"))),Z=(e,t)=>Y(e,t).isSome(),ee=(e,t)=>t.fold((()=>e.getContent({format:"text"})),(e=>e.innerText||e.textContent||"")).replace(/\uFEFF/g,""),te=e=>L.grep(e,H).length>0,ne=e=>{const t=e.schema.getTextInlineElements();return 0===J(e.selection.getRng(),(e=>1===e.nodeType&&!G(e)&&!V(t,e.nodeName.toLowerCase()))).length},oe=e=>s(e)&&"FIGURE"===e.nodeName&&/\bimage\b/i.test(e.className),re=(e,t,n)=>{const o=e.selection.getNode(),r=Y(e,o),l=((e,t)=>{const n={...t};if(0===S(e).length&&!P(e)){const e=X(n.rel,"_blank"===n.target);n.rel=e||null}return m.from(n.target).isNone()&&!1===A(e)&&(n.target=O(e)),n.href=((e,t)=>"http"!==t&&"https"!==t||W(e)?e:t+"://"+e)(n.href,_(e)),n})(e,(e=>{return t=["title","rel","class","target"],n=(t,n)=>(e[n].each((e=>{t[n]=e.length>0?e:null})),t),o={href:e.href},((e,t)=>{for(let n=0,o=e.length;n{o=n(o,e)})),o;var t,n,o})(n));e.undoManager.transact((()=>{n.href===t.href&&t.attach(),r.fold((()=>{((e,t,n,o)=>{const r=e.dom;oe(t)?ce(r,t,o):n.fold((()=>{e.execCommand("mceInsertLink",!1,o)}),(t=>{e.insertContent(r.createHTML("a",o,r.encode(t)))}))})(e,o,n.text,l)}),(t=>{e.focus(),((e,t,n,o)=>{n.each((e=>{V(t,"innerText")?t.innerText=e:t.textContent=e})),e.dom.setAttribs(t,o),e.selection.select(t)})(e,t,n.text,l)}))}))},le=e=>{const{class:t,href:n,rel:o,target:r,text:l,title:i}=e;return((e,t)=>{const n={};var o;return((e,t,n,o)=>{((e,t)=>{const n=q(e);for(let o=0,r=n.length;o{(t(e,r)?n:o)(e,r)}))})(e,((e,t)=>!1===a(e)),(o=n,(e,t)=>{o[t]=e}),g),n})({class:t.getOrNull(),href:n,rel:o.getOrNull(),target:r.getOrNull(),text:l.getOrNull(),title:i.getOrNull()})},ae=(e,t,n)=>{const o=((e,t)=>{const n=e.options.get,o={allow_html_data_urls:n("allow_html_data_urls"),allow_script_urls:n("allow_script_urls"),allow_svg_data_urls:n("allow_svg_data_urls")},r=t.href;return{...t,href:z.isDomSafe(r,"a",o)?r:""}})(e,n);e.hasPlugin("rtc",!0)?e.execCommand("createlink",!1,le(o)):re(e,t,o)},ie=e=>{e.hasPlugin("rtc",!0)?e.execCommand("unlink"):(e=>{e.undoManager.transact((()=>{const t=e.selection.getNode();oe(t)?se(e,t):(e=>{const t=e.dom,n=e.selection,o=n.getBookmark(),r=n.getRng().cloneRange(),l=t.getParent(r.startContainer,"a[href]",e.getBody()),a=t.getParent(r.endContainer,"a[href]",e.getBody());l&&r.setStartBefore(l),a&&r.setEndAfter(a),n.setRng(r),e.execCommand("unlink"),n.moveToBookmark(o)})(e),e.focus()}))})(e)},se=(e,t)=>{var n;const o=e.dom.select("img",t)[0];if(o){const r=e.dom.getParents(o,"a[href]",t)[0];r&&(null===(n=r.parentNode)||void 0===n||n.insertBefore(o,r),e.dom.remove(r))}},ce=(e,t,n)=>{var o;const r=e.select("img",t)[0];if(r){const t=e.create("a",n);null===(o=r.parentNode)||void 0===o||o.insertBefore(t,r),t.appendChild(r)}},ue=(e,t)=>k(t,(t=>(e=>{return V(t=e,n="items")&&void 0!==t[n]&&null!==t[n];var t,n})(t)?ue(e,t.items):x(t.value===e,t))),ge=(e,t)=>{const n={text:e.text,title:e.title},o=(e,o)=>{const r=(l=t,a=o,"link"===a?l.link:"anchor"===a?l.anchor:m.none()).getOr([]);var l,a;return((e,t,n,o)=>{const r=o[t],l=e.length>0;return void 0!==r?ue(r,n).map((t=>({url:{value:t.value,meta:{text:l?e:t.text,attach:g}},text:l?e:t.text}))):m.none()})(n.text,o,r,e)};return{onChange:(e,t)=>{const r=t.name;return"url"===r?(e=>{const t=(o=e.url,x(n.text.length<=0,m.from(null===(r=o.meta)||void 0===r?void 0:r.text).getOr(o.value)));var o,r;const l=(e=>{var t;return x(n.title.length<=0,m.from(null===(t=e.meta)||void 0===t?void 0:t.title).getOr(""))})(e.url);return t.isSome()||l.isSome()?m.some({...t.map((e=>({text:e}))).getOr({}),...l.map((e=>({title:e}))).getOr({})}):m.none()})(e()):((e,t)=>h.call(e,t))(["anchor","link"],r)>-1?o(e(),r):"text"===r||"title"===r?(n[r]=e()[r],m.none()):m.none()}}};var de=tinymce.util.Tools.resolve("tinymce.util.Delay");const me=e=>{const t=e.href;return t.indexOf("@")>0&&-1===t.indexOf("/")&&-1===t.indexOf("mailto:")?m.some({message:"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",preprocess:e=>({...e,href:"mailto:"+t})}):m.none()},he=(e,t)=>n=>{const o=n.href;return 1===e&&!W(o)||0===e&&/^\s*www(\.|\d\.)/i.test(o)?m.some({message:`The URL you entered seems to be an external link. Do you want to add the required ${t}:// prefix?`,preprocess:e=>({...e,href:t+"://"+o})}):m.none()},fe=e=>{const t=e.dom.select("a:not([href])"),n=p(((e,t)=>{const n=e.length,o=new Array(n);for(let r=0;r{const t=e.name||e.id;return t?[{text:t,value:"#"+t}]:[]})));return n.length>0?m.some([{text:"None",value:""}].concat(n)):m.none()},pe=e=>{const t=T(e);return t.length>0?I(t):m.none()},ke=e=>{try{return m.some(JSON.parse(e))}catch(e){return m.none()}},ve=(e,t)=>{const n=S(e);if(n.length>0){const o=v(t,"_blank"),r=e=>X(U(e),o);return(!1===P(e)?j(r):I)(n)}return m.none()},ye=[{text:"Current window",value:""},{text:"New window",value:"_blank"}],xe=e=>{const t=A(e);return l(t)?I(t).orThunk((()=>m.some(ye))):!1===t?m.none():m.some(ye)},be=(e,t,n)=>{const o=e.getAttrib(t,n);return null!==o&&o.length>0?m.some(o):m.none()},_e=(e,t)=>(e=>{const t=t=>e.convertURL(t.value||t.url||"","href"),n=C(e);return new Promise((e=>{o(n)?fetch(n).then((e=>e.ok?e.text().then(ke):Promise.reject())).then(e,(()=>e(m.none()))):c(n)?n((t=>e(m.some(t)))):e(m.from(n))})).then((e=>e.bind(j(t)).map((e=>e.length>0?[{text:"None",value:""}].concat(e):e))))})(e).then((n=>{const o=((e,t)=>{const n=e.dom,o=ne(e)?m.some(ee(e.selection,t)):m.none(),r=t.bind((e=>m.from(n.getAttrib(e,"href")))),l=t.bind((e=>m.from(n.getAttrib(e,"target")))),a=t.bind((e=>be(n,e,"rel"))),i=t.bind((e=>be(n,e,"class")));return{url:r,text:o,title:t.bind((e=>be(n,e,"title"))),target:l,rel:a,linkClass:i}})(e,t);return{anchor:o,catalogs:{targets:xe(e),rels:ve(e,o.target),classes:pe(e),anchor:fe(e),link:n},optNode:t,flags:{titleEnabled:E(e)}}})),we=e=>{const t=(e=>{const t=Y(e);return _e(e,t)})(e);t.then((t=>{const n=((e,t)=>n=>{const o=n.getData();if(!o.url.value)return ie(e),void n.close();const r=e=>m.from(o[e]).filter((n=>!v(t.anchor[e],n))),l={href:o.url.value,text:r("text"),target:r("target"),rel:r("rel"),class:r("linkClass"),title:r("title")},a={href:o.url.value,attach:void 0!==o.url.meta&&o.url.meta.attach?o.url.meta.attach:g};((e,t)=>k([me,he(_(e),N(e))],(e=>e(t))).fold((()=>Promise.resolve(t)),(n=>new Promise((o=>{((e,t,n)=>{const o=e.selection.getRng();de.setEditorTimeout(e,(()=>{e.windowManager.confirm(t,(t=>{e.selection.setRng(o),n(t)}))}))})(e,n.message,(e=>{o(e?n.preprocess(t):t)}))})))))(e,l).then((t=>{ae(e,a,t)})),n.close()})(e,t);return((e,t,n)=>{const o=e.anchor.text.map((()=>({name:"text",type:"input",label:"Text to display"}))).toArray(),r=e.flags.titleEnabled?[{name:"title",type:"input",label:"Title"}]:[],l=((e,t)=>{const n=e.anchor,o=n.url.getOr("");return{url:{value:o,meta:{original:{value:o}}},text:n.text.getOr(""),title:n.title.getOr(""),anchor:o,link:o,rel:n.rel.getOr(""),target:n.target.or(t).getOr(""),linkClass:n.linkClass.getOr("")}})(e,m.from(O(n))),a=e.catalogs,i=ge(l,a);return{title:"Insert/Edit Link",size:"normal",body:{type:"panel",items:p([[{name:"url",type:"urlinput",filetype:"file",label:"URL"}],o,r,y([a.anchor.map(K("anchor","Anchors")),a.rels.map(K("rel","Rel")),a.targets.map(K("target","Open link in...")),a.link.map(K("link","Link list")),a.classes.map(K("linkClass","Class"))])])},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:l,onChange:(e,{name:t})=>{i.onChange(e.getData,{name:t}).each((t=>{e.setData(t)}))},onSubmit:t}})(t,n,e)})).then((t=>{e.windowManager.open(t)}))};var Ce=tinymce.util.Tools.resolve("tinymce.util.VK");const Oe=(e,t)=>e.dom.getParent(t,"a[href]"),Ne=e=>Oe(e,e.selection.getStart()),Ae=(e,t)=>{if(t){const n=Q(t);if(/^#/.test(n)){const t=e.dom.select(n);t.length&&e.selection.scrollIntoView(t[0],!0)}else(e=>{const t=document.createElement("a");t.target="_blank",t.href=e,t.rel="noreferrer noopener";const n=document.createEvent("MouseEvents");n.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),((e,t)=>{document.body.appendChild(e),e.dispatchEvent(t),document.body.removeChild(e)})(t,n)})(t.href)}},Se=e=>()=>{e.execCommand("mceLink",!1,{dialog:!0})},Te=e=>()=>{Ae(e,Ne(e))},Ee=(e,t)=>(e.on("NodeChange",t),()=>e.off("NodeChange",t)),Pe=e=>t=>{const n=()=>t.setActive(!e.mode.isReadOnly()&&Z(e,e.selection.getNode()));return n(),Ee(e,n)},Re=e=>t=>{const n=()=>t.setEnabled(Z(e,e.selection.getNode()));return n(),Ee(e,n)},Le=e=>t=>{const n=t=>{return te(t)||(n=e.selection.getRng(),J(n,H).length>0);var n},o=e.dom.getParents(e.selection.getStart());return t.setEnabled(n(o)),Ee(e,(e=>t.setEnabled(n(e.parents))))};e.add("link",(e=>{(e=>{const t=e.options.register;t("link_assume_external_targets",{processor:e=>{const t=o(e)||i(e);return t?!0===e?{value:1,valid:t}:"http"===e||"https"===e?{value:e,valid:t}:{value:0,valid:t}:{valid:!1,message:"Must be a string or a boolean."}},default:!1}),t("link_context_toolbar",{processor:"boolean",default:!1}),t("link_list",{processor:e=>o(e)||c(e)||u(e,r)}),t("link_default_target",{processor:"string"}),t("link_default_protocol",{processor:"string",default:"https"}),t("link_target_list",{processor:e=>i(e)||u(e,r),default:!0}),t("link_rel_list",{processor:"object[]",default:[]}),t("link_class_list",{processor:"object[]",default:[]}),t("link_title",{processor:"boolean",default:!0}),t("allow_unsafe_link_target",{processor:"boolean",default:!1}),t("link_quicklink",{processor:"boolean",default:!1})})(e),(e=>{e.ui.registry.addToggleButton("link",{icon:"link",tooltip:"Insert/edit link",onAction:Se(e),onSetup:Pe(e)}),e.ui.registry.addButton("openlink",{icon:"new-tab",tooltip:"Open link",onAction:Te(e),onSetup:Re(e)}),e.ui.registry.addButton("unlink",{icon:"unlink",tooltip:"Remove link",onAction:()=>ie(e),onSetup:Le(e)})})(e),(e=>{e.ui.registry.addMenuItem("openlink",{text:"Open link",icon:"new-tab",onAction:Te(e),onSetup:Re(e)}),e.ui.registry.addMenuItem("link",{icon:"link",text:"Link...",shortcut:"Meta+K",onAction:Se(e)}),e.ui.registry.addMenuItem("unlink",{icon:"unlink",text:"Remove link",onAction:()=>ie(e),onSetup:Le(e)})})(e),(e=>{e.ui.registry.addContextMenu("link",{update:t=>te(e.dom.getParents(t,"a"))?"link unlink openlink":"link"})})(e),(e=>{const t=t=>{const n=e.selection.getNode();return t.setEnabled(Z(e,n)),g};e.ui.registry.addContextForm("quicklink",{launch:{type:"contextformtogglebutton",icon:"link",tooltip:"Link",onSetup:Pe(e)},label:"Link",predicate:t=>w(e)&&Z(e,t),initValue:()=>Y(e).fold((()=>""),Q),commands:[{type:"contextformtogglebutton",icon:"link",tooltip:"Link",primary:!0,onSetup:t=>{const n=e.selection.getNode();return t.setActive(Z(e,n)),Pe(e)(t)},onAction:t=>{const n=t.getValue(),o=(t=>{const n=Y(e),o=ne(e);if(n.isNone()&&o){const o=ee(e.selection,n);return m.some(o.length>0?o:t)}return m.none()})(n);ae(e,{href:n,attach:g},{href:n,text:o,title:m.none(),rel:m.none(),target:m.none(),class:m.none()}),(e=>{e.selection.collapse(!1)})(e),t.hide()}},{type:"contextformbutton",icon:"unlink",tooltip:"Remove link",onSetup:t,onAction:t=>{ie(e),t.hide()}},{type:"contextformbutton",icon:"new-tab",tooltip:"Open link",onSetup:t,onAction:t=>{Te(e)(),t.hide()}}]})})(e),(e=>{e.on("click",(t=>{const n=Oe(e,t.target);n&&Ce.metaKeyPressed(t)&&(t.preventDefault(),Ae(e,n))})),e.on("keydown",(t=>{if(!t.isDefaultPrevented()&&13===t.keyCode&&(e=>!0===e.altKey&&!1===e.shiftKey&&!1===e.ctrlKey&&!1===e.metaKey)(t)){const n=Ne(e);n&&(t.preventDefault(),Ae(e,n))}}))})(e),(e=>{e.addCommand("mceLink",((t,n)=>{!0!==(null==n?void 0:n.dialog)&&R(e)?e.dispatch("contexttoolbar-show",{toolbarKey:"quicklink"}):we(e)}))})(e),(e=>{e.addShortcut("Meta+K","",(()=>{e.execCommand("mceLink")}))})(e)}))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/lists/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/lists/plugin.min.js new file mode 100644 index 0000000000..7a7d148fff --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/lists/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>e=>(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(n=r=t,(o=String).prototype.isPrototypeOf(n)||(null===(s=r.constructor)||void 0===s?void 0:s.name)===o.name)?"string":e;var n,r,o,s})(e)===t,n=t=>e=>typeof e===t,r=e("string"),o=e("object"),s=e("array"),i=n("boolean"),a=t=>!(t=>null==t)(t),l=n("function"),d=n("number"),c=()=>{},u=(t,e)=>t===e,m=t=>e=>!t(e),p=(!1,()=>false);class g{constructor(t,e){this.tag=t,this.value=e}static some(t){return new g(!0,t)}static none(){return g.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?g.some(t(this.value)):g.none()}bind(t){return this.tag?t(this.value):g.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:g.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return a(t)?g.some(t):g.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}g.singletonNone=new g(!1);const h=Array.prototype.slice,f=Array.prototype.indexOf,y=Array.prototype.push,v=(t,e)=>{return n=t,r=e,f.call(n,r)>-1;var n,r},C=(t,e)=>{for(let n=0,r=t.length;n{const n=t.length,r=new Array(n);for(let o=0;o{for(let n=0,r=t.length;n{const n=[];for(let r=0,o=t.length;r(S(t,((t,r)=>{n=e(n,t,r)})),n),O=(t,e,n)=>{for(let r=0,o=t.length;rO(t,e,p),T=(t,e)=>(t=>{const e=[];for(let n=0,r=t.length;n{const e=h.call(t,0);return e.reverse(),e},w=(t,e)=>e>=0&&ew(t,0),E=t=>w(t,t.length-1),B=(t,e)=>{const n=[],r=l(e)?t=>C(n,(n=>e(n,t))):t=>v(n,t);for(let e=0,o=t.length;et.exists((t=>n(t,e))),I=(t,e,n)=>t.isSome()&&e.isSome()?g.some(n(t.getOrDie(),e.getOrDie())):g.none(),P=t=>{if(null==t)throw new Error("Node cannot be null or undefined");return{dom:t}},M=(t,e)=>{const n=(e||document).createElement(t);return P(n)},R=P,U=(t,e)=>t.dom===e.dom;"undefined"!=typeof window?window:Function("return this;")();const $=t=>t.dom.nodeName.toLowerCase(),_=(1,t=>1===(t=>t.dom.nodeType)(t));const H=t=>e=>_(e)&&$(e)===t,j=t=>g.from(t.dom.parentNode).map(R),F=t=>b(t.dom.childNodes,R),K=(t,e)=>{const n=t.dom.childNodes;return g.from(n[e]).map(R)},V=t=>K(t,0),z=t=>K(t,t.dom.childNodes.length-1),Q=(t,e,n)=>{let r=t.dom;const o=l(n)?n:p;for(;r.parentNode;){r=r.parentNode;const t=R(r);if(e(t))return g.some(t);if(o(t))break}return g.none()},q=(t,e,n)=>((t,e,n,r,o)=>r(n)?g.some(n):l(o)&&o(n)?g.none():e(n,r,o))(0,Q,t,e,n),W=(t,e)=>{j(t).each((n=>{n.dom.insertBefore(e.dom,t.dom)}))},Z=(t,e)=>{t.dom.appendChild(e.dom)},G=(t,e)=>{S(e,(e=>{Z(t,e)}))},J=t=>{t.dom.textContent="",S(F(t),(t=>{X(t)}))},X=t=>{const e=t.dom;null!==e.parentNode&&e.parentNode.removeChild(e)};var Y=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),tt=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),et=tinymce.util.Tools.resolve("tinymce.util.VK");const nt=t=>b(t,R),rt=Object.keys,ot=(t,e)=>{const n=rt(t);for(let r=0,o=n.length;r{const n=t.dom;ot(e,((t,e)=>{((t,e,n)=>{if(!(r(n)||i(n)||d(n)))throw console.error("Invalid call to Attribute.set. Key ",e,":: Value ",n,":: Element ",t),new Error("Attribute value was not simple");t.setAttribute(e,n+"")})(n,e,t)}))},it=t=>L(t.dom.attributes,((t,e)=>(t[e.name]=e.value,t)),{}),at=t=>((t,e)=>R(t.dom.cloneNode(!0)))(t),lt=(t,e)=>{const n=((t,e)=>{const n=M(e),r=it(t);return st(n,r),n})(t,e);((t,e)=>{const n=(t=>g.from(t.dom.nextSibling).map(R))(t);n.fold((()=>{j(t).each((t=>{Z(t,e)}))}),(t=>{W(t,e)}))})(t,n);const r=F(t);return G(n,r),X(t),n};var dt=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),ct=tinymce.util.Tools.resolve("tinymce.util.Tools");const ut=t=>e=>a(e)&&e.nodeName.toLowerCase()===t,mt=t=>e=>a(e)&&t.test(e.nodeName),pt=t=>a(t)&&3===t.nodeType,gt=t=>a(t)&&1===t.nodeType,ht=mt(/^(OL|UL|DL)$/),ft=mt(/^(OL|UL)$/),yt=ut("ol"),vt=mt(/^(LI|DT|DD)$/),Ct=mt(/^(DT|DD)$/),bt=mt(/^(TH|TD)$/),St=ut("br"),Nt=(t,e)=>a(e)&&e.nodeName in t.schema.getTextBlockElements(),Lt=(t,e)=>a(t)&&t.nodeName in e,Ot=(t,e,n)=>{const r=t.isEmpty(e);return!(n&&t.select("span[data-mce-type=bookmark]",e).length>0)&&r},kt=(t,e)=>t.isChildOf(e,t.getRoot()),Tt=t=>e=>e.options.get(t),At=Tt("lists_indent_on_tab"),wt=Tt("forced_root_block"),Dt=Tt("forced_root_block_attrs"),Et=(t,e)=>{const n=t.dom,r=t.schema.getBlockElements(),o=n.createFragment(),s=wt(t),i=Dt(t);let a,l,d=!1;for(l=n.create(s,i),Lt(e.firstChild,r)||o.appendChild(l);a=e.firstChild;){const t=a.nodeName;d||"SPAN"===t&&"bookmark"===a.getAttribute("data-mce-type")||(d=!0),Lt(a,r)?(o.appendChild(a),l=null):(l||(l=n.create(s,i),o.appendChild(l)),l.appendChild(a))}return!d&&l&&l.appendChild(n.create("br",{"data-mce-bogus":"1"})),o},Bt=dt.DOM,xt=H("dd"),It=H("dt"),Pt=(t,e)=>{var n;xt(e)?lt(e,"dt"):It(e)&&(n=e,g.from(n.dom.parentElement).map(R)).each((n=>((t,e,n)=>{const r=Bt.select('span[data-mce-type="bookmark"]',e),o=Et(t,n),s=Bt.createRng();s.setStartAfter(n),s.setEndAfter(e);const i=s.extractContents();for(let e=i.firstChild;e;e=e.firstChild)if("LI"===e.nodeName&&t.dom.isEmpty(e)){Bt.remove(e);break}t.dom.isEmpty(i)||Bt.insertAfter(i,e),Bt.insertAfter(o,e);const a=n.parentElement;a&&Ot(t.dom,a)&&(t=>{const e=t.parentNode;e&&ct.each(r,(t=>{e.insertBefore(t,n.parentNode)})),Bt.remove(t)})(a),Bt.remove(n),Ot(t.dom,e)&&Bt.remove(e)})(t,n.dom,e.dom)))},Mt=t=>{It(t)&<(t,"dd")},Rt=(t,e)=>{if(pt(t))return{container:t,offset:e};const n=Y.getNode(t,e);return pt(n)?{container:n,offset:e>=t.childNodes.length?n.data.length:0}:n.previousSibling&&pt(n.previousSibling)?{container:n.previousSibling,offset:n.previousSibling.data.length}:n.nextSibling&&pt(n.nextSibling)?{container:n.nextSibling,offset:0}:{container:t,offset:e}},Ut=t=>{const e=t.cloneRange(),n=Rt(t.startContainer,t.startOffset);e.setStart(n.container,n.offset);const r=Rt(t.endContainer,t.endOffset);return e.setEnd(r.container,r.offset),e},$t=["OL","UL","DL"],_t=$t.join(","),Ht=(t,e)=>{const n=e||t.selection.getStart(!0);return t.dom.getParent(n,_t,Kt(t,n))},jt=t=>{const e=t.selection.getSelectedBlocks();return N(((t,e)=>{const n=ct.map(e,(e=>t.dom.getParent(e,"li,dd,dt",Kt(t,e))||e));return B(n)})(t,e),vt)},Ft=(t,e)=>{const n=t.dom.getParents(e,"TD,TH");return n.length>0?n[0]:t.getBody()},Kt=(t,e)=>{const n=t.dom.getParents(e,t.dom.isBlock),r=k(n,(e=>{return n=t.schema,!ht(r=e)&&!vt(r)&&C($t,(t=>n.isValidChild(r.nodeName,t)));var n,r}));return r.getOr(t.getBody())},Vt=(t,e)=>{const n=t.dom.getParents(e,"ol,ul",Kt(t,e));return E(n)},zt=(t,e)=>{const n=b(e,(e=>Vt(t,e).getOr(e)));return B(n)},Qt=t=>/\btox\-/.test(t.className),qt=(t,e)=>O(t,ht,bt).exists((t=>t.nodeName===e&&!Qt(t))),Wt=(t,e)=>null!==e&&"false"===t.dom.getContentEditableParent(e),Zt=(t,e)=>{const n=t.dom.getParent(e,"ol,ul,dl");return Wt(t,n)},Gt=(t,e)=>{const n=t.selection.getNode();return e({parents:t.dom.getParents(n),element:n}),t.on("NodeChange",e),()=>t.off("NodeChange",e)},Jt=(t,e,n)=>t.dispatch("ListMutation",{action:e,element:n}),Xt=(Yt=/^\s+|\s+$/g,t=>t.replace(Yt,""));var Yt;const te=(t,e,n)=>{((t,e,n)=>{if(!r(n))throw console.error("Invalid call to CSS.set. Property ",e,":: Value ",n,":: Element ",t),new Error("CSS value must be a string: "+n);(t=>void 0!==t.style&&l(t.style.getPropertyValue))(t)&&t.style.setProperty(e,n)})(t.dom,e,n)},ee=(t,e)=>{Z(t.item,e.list)},ne=(t,e)=>{const n={list:M(e,t),item:M("li",t)};return Z(n.list,n.item),n},re=t=>((t,e)=>{const n=t.dom;if(1!==n.nodeType)return!1;{const t=n;if(void 0!==t.matches)return t.matches(e);if(void 0!==t.msMatchesSelector)return t.msMatchesSelector(e);if(void 0!==t.webkitMatchesSelector)return t.webkitMatchesSelector(e);if(void 0!==t.mozMatchesSelector)return t.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")}})(t,"OL,UL"),oe=t=>V(t).exists(re),se=t=>t.depth>0,ie=t=>t.isSelected,ae=t=>{const e=F(t),n=z(t).exists(re)?e.slice(0,-1):e;return b(n,at)},le=t=>(S(t,((e,n)=>{((t,e)=>{const n=t[e].depth,r=t=>t.depth===n&&!t.dirty,o=t=>t.depthO(t.slice(e+1),r,o)))})(t,n).fold((()=>{e.dirty&&(t=>{t.listAttributes=((t,e)=>{const n={};var r;return((t,e,n,r)=>{ot(t,((t,o)=>{(e(t,o)?n:r)(t,o)}))})(t,e,(r=n,(t,e)=>{r[e]=t}),c),n})(t.listAttributes,((t,e)=>"start"!==e))})(e)}),(t=>{return r=t,(n=e).listType=r.listType,void(n.listAttributes={...r.listAttributes});var n,r}))})),t),de=(t,e,n,r)=>V(r).filter(re).fold((()=>{e.each((t=>{U(t.start,r)&&n.set(!0)}));const o=((t,e,n)=>j(t).filter(_).map((r=>({depth:e,dirty:!1,isSelected:n,content:ae(t),itemAttributes:it(t),listAttributes:it(r),listType:$(r)}))))(r,t,n.get());e.each((t=>{U(t.end,r)&&n.set(!1)}));const s=z(r).filter(re).map((r=>ce(t,e,n,r))).getOr([]);return o.toArray().concat(s)}),(r=>ce(t,e,n,r))),ce=(t,e,n,r)=>T(F(r),(r=>(re(r)?ce:de)(t+1,e,n,r))),ue=(t,e)=>{const n=le(e);return((t,e)=>{const n=L(e,((e,n)=>n.depth>e.length?((t,e,n)=>{const r=((t,e,n)=>{const r=[];for(let o=0;o{for(let e=1;e{for(let e=0;e{st(t.list,e.listAttributes),st(t.item,e.itemAttributes),G(t.item,e.content)}))})(r,n),o=r,I(E(e),D(o),ee),e.concat(r)})(t,e,n):((t,e,n)=>{const r=e.slice(0,n.depth);return E(r).each((e=>{const r=((t,e,n)=>{const r=M("li",t);return st(r,e),G(r,n),r})(t,n.itemAttributes,n.content);((t,e)=>{Z(t.list,e),t.item=e})(e,r),((t,e)=>{$(t.list)!==e.listType&&(t.list=lt(t.list,e.listType)),st(t.list,e.listAttributes)})(e,n)})),r})(t,e,n)),[]);return D(n).map((t=>t.list))})(t.contentDocument,n).toArray()},me=(t,e,n)=>{const r=((t,e)=>{const n=(t=>{let e=!1;return{get:()=>e,set:t=>{e=t}}})();return b(t,(t=>({sourceList:t,entries:ce(0,e,n,t)})))})(e,(t=>{const e=b(jt(t),R);return I(k(e,m(oe)),k(A(e),m(oe)),((t,e)=>({start:t,end:e})))})(t));S(r,(e=>{((t,e)=>{S(N(t,ie),(t=>((t,e)=>{switch(t){case"Indent":e.depth++;break;case"Outdent":e.depth--;break;case"Flatten":e.depth=0}e.dirty=!0})(e,t)))})(e.entries,n);const r=((t,e)=>T(((t,e)=>{if(0===t.length)return[];{let n=e(t[0]);const r=[];let o=[];for(let s=0,i=t.length;sD(e).exists(se)?ue(t,e):((t,e)=>{const n=le(e);return b(n,(e=>{const n=((t,e)=>{const n=document.createDocumentFragment();return S(t,(t=>{n.appendChild(t.dom)})),R(n)})(e.content);return R(Et(t,n.dom))}))})(t,e))))(t,e.entries);var o;S(r,(e=>{Jt(t,"Indent"===n?"IndentList":"OutdentList",e.dom)})),o=e.sourceList,S(r,(t=>{W(o,t)})),X(e.sourceList)}))},pe=(t,e)=>{const n=nt((t=>{const e=(t=>{const e=Vt(t,t.selection.getStart()),n=N(t.selection.getSelectedBlocks(),ft);return e.toArray().concat(n)})(t);return zt(t,e)})(t)),r=nt((t=>N(jt(t),Ct))(t));let o=!1;if(n.length||r.length){const s=t.selection.getBookmark();me(t,n,e),((t,e,n)=>{S(n,"Indent"===e?Mt:e=>Pt(t,e))})(t,e,r),t.selection.moveToBookmark(s),t.selection.setRng(Ut(t.selection.getRng())),t.nodeChanged(),o=!0}return o},ge=(t,e)=>!(t=>{const e=Ht(t);return Wt(t,e)})(t)&&pe(t,e),he=t=>ge(t,"Indent"),fe=t=>ge(t,"Outdent"),ye=t=>ge(t,"Flatten");var ve=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager");const Ce=dt.DOM,be=t=>{const e={},n=n=>{let r=t[n?"startContainer":"endContainer"],o=t[n?"startOffset":"endOffset"];if(gt(r)){const t=Ce.create("span",{"data-mce-type":"bookmark"});r.hasChildNodes()?(o=Math.min(o,r.childNodes.length-1),n?r.insertBefore(t,r.childNodes[o]):Ce.insertAfter(t,r.childNodes[o])):r.appendChild(t),r=t,o=0}e[n?"startContainer":"endContainer"]=r,e[n?"startOffset":"endOffset"]=o};return n(!0),t.collapsed||n(),e},Se=t=>{const e=e=>{let n=t[e?"startContainer":"endContainer"],r=t[e?"startOffset":"endOffset"];if(n){if(gt(n)&&n.parentNode){const t=n;r=(t=>{var e;let n=null===(e=t.parentNode)||void 0===e?void 0:e.firstChild,r=0;for(;n;){if(n===t)return r;gt(n)&&"bookmark"===n.getAttribute("data-mce-type")||r++,n=n.nextSibling}return-1})(n),n=n.parentNode,Ce.remove(t),!n.hasChildNodes()&&Ce.isBlock(n)&&n.appendChild(Ce.create("br"))}t[e?"startContainer":"endContainer"]=n,t[e?"startOffset":"endOffset"]=r}};e(!0),e();const n=Ce.createRng();return n.setStart(t.startContainer,t.startOffset),t.endContainer&&n.setEnd(t.endContainer,t.endOffset),Ut(n)},Ne=t=>{switch(t){case"UL":return"ToggleUlList";case"OL":return"ToggleOlList";case"DL":return"ToggleDLList"}},Le=(t,e)=>{ct.each(e,((e,n)=>{t.setAttribute(n,e)}))},Oe=(t,e,n)=>{((t,e,n)=>{const r=n["list-style-type"]?n["list-style-type"]:null;t.setStyle(e,"list-style-type",r)})(t,e,n),((t,e,n)=>{Le(e,n["list-attributes"]),ct.each(t.select("li",e),(t=>{Le(t,n["list-item-attributes"])}))})(t,e,n)},ke=(t,e,n,r)=>{let o=e[n?"startContainer":"endContainer"];const s=e[n?"startOffset":"endOffset"];for(gt(o)&&(o=o.childNodes[Math.min(s,o.childNodes.length-1)]||o),!n&&St(o.nextSibling)&&(o=o.nextSibling);o.parentNode!==r;){const e=o.parentNode;if(Nt(t,o))return o;if(/^(TD|TH)$/.test(e.nodeName))return o;o=e}return o},Te=(t,e,n)=>{const r=t.selection.getRng();let o="LI";const s=Kt(t,t.selection.getStart(!0)),i=t.dom;if("false"===i.getContentEditable(t.selection.getNode()))return;"DL"===(e=e.toUpperCase())&&(o="DT");const a=be(r),l=((t,e,n)=>{const r=[],o=t.dom,s=ke(t,e,!0,n),i=ke(t,e,!1,n);let a;const l=[];for(let t=s;t&&(l.push(t),t!==i);t=t.nextSibling);return ct.each(l,(e=>{var s;if(Nt(t,e))return r.push(e),void(a=null);if(o.isBlock(e)||St(e))return St(e)&&o.remove(e),void(a=null);const i=e.nextSibling;ve.isBookmarkNode(e)&&(ht(i)||Nt(t,i)||!i&&e.parentNode===n)?a=null:(a||(a=o.create("p"),null===(s=e.parentNode)||void 0===s||s.insertBefore(a,e),r.push(a)),a.appendChild(e))})),r})(t,r,s);ct.each(l,(r=>{let s;const a=r.previousSibling,l=r.parentNode;vt(l)||(a&&ht(a)&&a.nodeName===e&&((t,e,n)=>{const r=t.getStyle(e,"list-style-type");let o=n?n["list-style-type"]:"";return o=null===o?"":o,r===o})(i,a,n)?(s=a,r=i.rename(r,o),a.appendChild(r)):(s=i.create(e),l.insertBefore(s,r),s.appendChild(r),r=i.rename(r,o)),((t,e,n)=>{ct.each(["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"],(n=>t.setStyle(e,n,"")))})(i,r),Oe(i,s,n),we(t.dom,s))})),t.selection.setRng(Se(a))},Ae=(t,e,n)=>{return((t,e)=>ht(t)&&t.nodeName===(null==e?void 0:e.nodeName))(e,n)&&((t,e,n)=>t.getStyle(e,"list-style-type",!0)===t.getStyle(n,"list-style-type",!0))(t,e,n)&&(r=n,e.className===r.className);var r},we=(t,e)=>{let n,r=e.nextSibling;if(Ae(t,e,r)){const o=r;for(;n=o.firstChild;)e.appendChild(n);t.remove(o)}if(r=e.previousSibling,Ae(t,e,r)){const o=r;for(;n=o.lastChild;)e.insertBefore(n,e.firstChild);t.remove(o)}},De=t=>"list-style-type"in t,Ee=(t,e,n)=>{const r=Ht(t);if(Zt(t,r))return;const s=(t=>{const e=Ht(t),n=t.selection.getSelectedBlocks();return((t,e)=>a(t)&&1===e.length&&e[0]===t)(e,n)?(t=>N(t.querySelectorAll(_t),ht))(e):N(n,(t=>ht(t)&&e!==t))})(t),i=o(n)?n:{};s.length>0?((t,e,n,r,o)=>{const s=ht(e);if(s&&e.nodeName===r&&!De(o))ye(t);else{Te(t,r,o);const i=be(t.selection.getRng()),a=s?[e,...n]:n;ct.each(a,(e=>{((t,e,n,r)=>{if(e.nodeName!==n){const o=t.dom.rename(e,n);Oe(t.dom,o,r),Jt(t,Ne(n),o)}else Oe(t.dom,e,r),Jt(t,Ne(n),e)})(t,e,r,o)})),t.selection.setRng(Se(i))}})(t,r,s,e,i):((t,e,n,r)=>{if(e!==t.getBody())if(e)if(e.nodeName!==n||De(r)||Qt(e)){const o=be(t.selection.getRng());Oe(t.dom,e,r);const s=t.dom.rename(e,n);we(t.dom,s),t.selection.setRng(Se(o)),Te(t,n,r),Jt(t,Ne(n),s)}else ye(t);else Te(t,n,r),Jt(t,Ne(n),e)})(t,r,e,i)},Be=dt.DOM,xe=(t,e)=>{const n=ct.grep(t.select("ol,ul",e));ct.each(n,(e=>{((t,e)=>{const n=e.parentElement;if(n&&"LI"===n.nodeName&&n.firstChild===e){const r=n.previousSibling;r&&"LI"===r.nodeName?(r.appendChild(e),Ot(t,n)&&Be.remove(n)):Be.setStyle(n,"listStyleType","none")}if(ht(n)){const t=n.previousSibling;t&&"LI"===t.nodeName&&t.appendChild(e)}})(t,e)}))},Ie=(t,e,n,r)=>{let o=e.startContainer;const s=e.startOffset;if(pt(o)&&(n?s0))return o;const i=t.schema.getNonEmptyElements();gt(o)&&(o=Y.getNode(o,s));const a=new tt(o,r);n&&((t,e)=>!!St(e)&&t.isBlock(e.nextSibling)&&!St(e.previousSibling))(t.dom,o)&&a.next();const l=n?a.next.bind(a):a.prev2.bind(a);for(;o=l();){if("LI"===o.nodeName&&!o.hasChildNodes())return o;if(i[o.nodeName])return o;if(pt(o)&&o.data.length>0)return o}return null},Pe=(t,e)=>{const n=e.childNodes;return 1===n.length&&!ht(n[0])&&t.isBlock(n[0])},Me=(t,e,n)=>{let r;const o=e.parentNode;if(!kt(t,e)||!kt(t,n))return;ht(n.lastChild)&&(r=n.lastChild),o===n.lastChild&&St(o.previousSibling)&&t.remove(o.previousSibling);const s=n.lastChild;s&&St(s)&&e.hasChildNodes()&&t.remove(s),Ot(t,n,!0)&&J(R(n)),((t,e,n)=>{let r;const o=Pe(t,n)?n.firstChild:n;if(((t,e)=>{Pe(t,e)&&t.remove(e.firstChild,!0)})(t,e),!Ot(t,e,!0))for(;r=e.firstChild;)o.appendChild(r)})(t,e,n),r&&n.appendChild(r);const i=((t,e)=>{const n=t.dom,r=e.dom;return n!==r&&n.contains(r)})(R(n),R(e))?t.getParents(e,ht,n):[];t.remove(e),S(i,(e=>{Ot(t,e)&&e!==t.getRoot()&&t.remove(e)}))},Re=(t,e)=>{const n=t.dom,r=t.selection,o=r.getStart(),s=Ft(t,o),i=n.getParent(r.getStart(),"LI",s);if(i){const o=i.parentElement;if(o===t.getBody()&&Ot(n,o))return!0;const a=Ut(r.getRng()),l=n.getParent(Ie(t,a,e,s),"LI",s);if(l&&l!==i)return t.undoManager.transact((()=>{var n,r;e?((t,e,n,r)=>{const o=t.dom;if(o.isEmpty(r))((t,e,n)=>{J(R(n)),Me(t.dom,e,n),t.selection.setCursorLocation(n,0)})(t,n,r);else{const s=be(e);Me(o,n,r),t.selection.setRng(Se(s))}})(t,a,l,i):(null===(r=(n=i).parentNode)||void 0===r?void 0:r.firstChild)===n?fe(t):((t,e,n,r)=>{const o=be(e);Me(t.dom,n,r);const s=Se(o);t.selection.setRng(s)})(t,a,i,l)})),!0;if(!l&&!e&&0===a.startOffset&&0===a.endOffset)return t.undoManager.transact((()=>{ye(t)})),!0}return!1},Ue=t=>{const e=t.selection.getStart(),n=Ft(t,e);return t.dom.getParent(e,"LI,DT,DD",n)||jt(t).length>0},$e=(t,e)=>{const n=t.selection;return!Zt(t,n.getNode())&&(n.isCollapsed()?((t,e)=>Re(t,e)||((t,e)=>{const n=t.dom,r=t.selection.getStart(),o=Ft(t,r),s=n.getParent(r,n.isBlock,o);if(s&&n.isEmpty(s)){const r=Ut(t.selection.getRng()),i=n.getParent(Ie(t,r,e,o),"LI",o);if(i){const a=t=>v(["td","th","caption"],$(t)),l=t=>t.dom===o;return!!((t,e,n=u)=>I(t,e,n).getOr(t.isNone()&&e.isNone()))(q(R(i),a,l),q(R(r.startContainer),a,l),U)&&(t.undoManager.transact((()=>{((t,e,n)=>{const r=t.getParent(e.parentNode,t.isBlock,n);t.remove(e),r&&t.isEmpty(r)&&t.remove(r)})(n,s,o),we(n,i.parentNode),t.selection.select(i,!0),t.selection.collapse(e)})),!0)}}return!1})(t,e))(t,e):(t=>!!Ue(t)&&(t.undoManager.transact((()=>{t.execCommand("Delete"),xe(t.dom,t.getBody())})),!0))(t))},_e=t=>{const e=A(Xt(t).split("")),n=b(e,((t,e)=>{const n=t.toUpperCase().charCodeAt(0)-"A".charCodeAt(0)+1;return Math.pow(26,e)*n}));return L(n,((t,e)=>t+e),0)},He=t=>{if(--t<0)return"";{const e=t%26,n=Math.floor(t/26);return He(n)+String.fromCharCode("A".charCodeAt(0)+e)}},je=t=>{const e=parseInt(t.start,10);return x(t.listStyleType,"upper-alpha")?He(e):x(t.listStyleType,"lower-alpha")?He(e).toLowerCase():t.start},Fe=(t,e)=>()=>{const n=Ht(t);return a(n)&&n.nodeName===e},Ke=t=>{t.addCommand("mceListProps",(()=>{(t=>{const e=Ht(t);yt(e)&&!Zt(t,e)&&t.windowManager.open({title:"List Properties",body:{type:"panel",items:[{type:"input",name:"start",label:"Start list at number",inputMode:"numeric"}]},initialData:{start:je({start:t.dom.getAttrib(e,"start","1"),listStyleType:g.from(t.dom.getStyle(e,"list-style-type"))})},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:e=>{(t=>{switch((t=>/^[0-9]+$/.test(t)?2:/^[A-Z]+$/.test(t)?0:/^[a-z]+$/.test(t)?1:t.length>0?4:3)(t)){case 2:return g.some({listStyleType:g.none(),start:t});case 0:return g.some({listStyleType:g.some("upper-alpha"),start:_e(t).toString()});case 1:return g.some({listStyleType:g.some("lower-alpha"),start:_e(t).toString()});case 3:return g.some({listStyleType:g.none(),start:""});case 4:return g.none()}})(e.getData().start).each((e=>{t.execCommand("mceListUpdate",!1,{attrs:{start:"1"===e.start?"":e.start},styles:{"list-style-type":e.listStyleType.getOr("")}})})),e.close()}})})(t)}))},Ve=(t,e)=>n=>Gt(t,(r=>{n.setActive(qt(r.parents,e)),n.setEnabled(!Zt(t,r.element))})),ze=(t,e)=>n=>Gt(t,(r=>n.setEnabled(qt(r.parents,e)&&!Zt(t,r.element))));t.add("lists",(t=>((t=>{(0,t.options.register)("lists_indent_on_tab",{processor:"boolean",default:!0})})(t),t.hasPlugin("rtc",!0)?Ke(t):((t=>{At(t)&&(t=>{t.on("keydown",(e=>{e.keyCode!==et.TAB||et.metaKeyPressed(e)||t.undoManager.transact((()=>{(e.shiftKey?fe(t):he(t))&&e.preventDefault()}))}))})(t),(t=>{t.on("ExecCommand",(e=>{const n=e.command.toLowerCase();"delete"!==n&&"forwarddelete"!==n||!Ue(t)||xe(t.dom,t.getBody())})),t.on("keydown",(e=>{e.keyCode===et.BACKSPACE?$e(t,!1)&&e.preventDefault():e.keyCode===et.DELETE&&$e(t,!0)&&e.preventDefault()}))})(t)})(t),(t=>{t.on("BeforeExecCommand",(e=>{const n=e.command.toLowerCase();"indent"===n?he(t):"outdent"===n&&fe(t)})),t.addCommand("InsertUnorderedList",((e,n)=>{Ee(t,"UL",n)})),t.addCommand("InsertOrderedList",((e,n)=>{Ee(t,"OL",n)})),t.addCommand("InsertDefinitionList",((e,n)=>{Ee(t,"DL",n)})),t.addCommand("RemoveList",(()=>{ye(t)})),Ke(t),t.addCommand("mceListUpdate",((e,n)=>{o(n)&&((t,e)=>{const n=Ht(t);null===n||Zt(t,n)||t.undoManager.transact((()=>{o(e.styles)&&t.dom.setStyles(n,e.styles),o(e.attrs)&&ot(e.attrs,((e,r)=>t.dom.setAttrib(n,r,e)))}))})(t,n)})),t.addQueryStateHandler("InsertUnorderedList",Fe(t,"UL")),t.addQueryStateHandler("InsertOrderedList",Fe(t,"OL")),t.addQueryStateHandler("InsertDefinitionList",Fe(t,"DL"))})(t)),(t=>{const e=e=>()=>t.execCommand(e);t.hasPlugin("advlist")||(t.ui.registry.addToggleButton("numlist",{icon:"ordered-list",active:!1,tooltip:"Numbered list",onAction:e("InsertOrderedList"),onSetup:Ve(t,"OL")}),t.ui.registry.addToggleButton("bullist",{icon:"unordered-list",active:!1,tooltip:"Bullet list",onAction:e("InsertUnorderedList"),onSetup:Ve(t,"UL")}))})(t),(t=>{const e={text:"List properties...",icon:"ordered-list",onAction:()=>t.execCommand("mceListProps"),onSetup:ze(t,"OL")};t.ui.registry.addMenuItem("listprops",e),t.ui.registry.addContextMenu("lists",{update:e=>{const n=Ht(t,e);return yt(n)?["listprops"]:[]}})})(t),(t=>({backspaceDelete:e=>{$e(t,e)}}))(t))))}(); \ No newline at end of file diff --git a/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/media/plugin.min.js b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/media/plugin.min.js new file mode 100644 index 0000000000..bcd600b4f6 --- /dev/null +++ b/web-ui-external-feedback/public-external-feedback/js/tinymce/plugins/media/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.2.0 (2022-09-08) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(r=a=e,(o=String).prototype.isPrototypeOf(r)||(null===(s=a.constructor)||void 0===s?void 0:s.name)===o.name)?"string":t;var r,a,o,s})(t)===e,r=t("string"),a=t("object"),o=t("array"),s=e=>!(e=>null==e)(e);class i{constructor(e,t){this.tag=e,this.value=t}static some(e){return new i(!0,e)}static none(){return i.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?i.some(e(this.value)):i.none()}bind(e){return this.tag?e(this.value):i.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:i.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return s(e)?i.some(e):i.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}i.singletonNone=new i(!1);const n=Array.prototype.push,c=(e,t)=>{for(let r=0,a=e.length;r{const t=[];for(let r=0,a=e.length;rh(e,t)?i.from(e[t]):i.none(),h=(e,t)=>u.call(e,t),p=e=>t=>t.options.get(e),g=p("audio_template_callback"),b=p("video_template_callback"),w=p("iframe_template_callback"),v=p("media_live_embeds"),f=p("media_filter_html"),y=p("media_url_resolver"),x=p("media_alt_source"),_=p("media_poster"),j=p("media_dimensions");var k=tinymce.util.Tools.resolve("tinymce.util.Tools"),O=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),A=tinymce.util.Tools.resolve("tinymce.html.DomParser");const S=O.DOM,C=e=>e.replace(/px$/,""),D=e=>{const t=e.attr("style"),r=t?S.parseStyle(t):{};return{type:"ephox-embed-iri",source:e.attr("data-ephox-embed-iri"),altsource:"",poster:"",width:d(r,"max-width").map(C).getOr(""),height:d(r,"max-height").map(C).getOr("")}},T=(e,t)=>{let r={};for(let a=A({validate:!1,forced_root_block:!1},t).parse(e);a;a=a.walk())if(1===a.type){const e=a.name;if(a.attr("data-ephox-embed-iri")){r=D(a);break}r.source||"param"!==e||(r.source=a.attr("movie")),"iframe"!==e&&"object"!==e&&"embed"!==e&&"video"!==e&&"audio"!==e||(r.type||(r.type=e),r=k.extend(a.attributes.map,r)),"script"===e&&(r={type:"script",source:a.attr("src")}),"source"===e&&(r.source?r.altsource||(r.altsource=a.attr("src")):r.source=a.attr("src")),"img"!==e||r.poster||(r.poster=a.attr("src"))}return r.source=r.source||r.src||"",r.altsource=r.altsource||"",r.poster=r.poster||"",r},$=e=>{var t;const r=null!==(t=e.toLowerCase().split(".").pop())&&void 0!==t?t:"";return d({mp3:"audio/mpeg",m4a:"audio/x-m4a",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"},r).getOr("")};var z=tinymce.util.Tools.resolve("tinymce.html.Node"),M=tinymce.util.Tools.resolve("tinymce.html.Serializer");const F=(e,t={})=>A({forced_root_block:!1,validate:!1,allow_conditional_comments:!0,...t},e),N=O.DOM,R=e=>/^[0-9.]+$/.test(e)?e+"px":e,U=(e,t)=>{const r=t.attr("style"),a=r?N.parseStyle(r):{};s(e.width)&&(a["max-width"]=R(e.width)),s(e.height)&&(a["max-height"]=R(e.height)),t.attr("style",N.serializeStyle(a))},P=["source","altsource"],E=(e,t,r,a)=>{let o=0,s=0;const i=F(a);i.addNodeFilter("source",(e=>o=e.length));const n=i.parse(e);for(let e=n;e;e=e.walk())if(1===e.type){const a=e.name;if(e.attr("data-ephox-embed-iri")){U(t,e);break}switch(a){case"video":case"object":case"embed":case"img":case"iframe":void 0!==t.height&&void 0!==t.width&&(e.attr("width",t.width),e.attr("height",t.height))}if(r)switch(a){case"video":e.attr("poster",t.poster),e.attr("src",null);for(let r=o;r<2;r++)if(t[P[r]]){const a=new z("source",1);a.attr("src",t[P[r]]),a.attr("type",t[P[r]+"mime"]||null),e.append(a)}break;case"iframe":e.attr("src",t.source);break;case"object":const r=e.getAll("img").length>0;if(t.poster&&!r){e.attr("src",t.poster);const r=new z("img",1);r.attr("src",t.poster),r.attr("width",t.width),r.attr("height",t.height),e.append(r)}break;case"source":if(s<2&&(e.attr("src",t[P[s]]),e.attr("type",t[P[s]+"mime"]||null),!t[P[s]])){e.remove();continue}s++;break;case"img":t.poster||e.remove()}}return M({},a).serialize(n)},L=[{regex:/youtu\.be\/([\w\-_\?&=.]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$2?$4",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$2?title=0&byline=0",allowFullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0},{regex:/dai\.ly\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],I=(e,t)=>{const r=(e=>{const t=e.match(/^(https?:\/\/|www\.)(.+)$/i);return t&&t.length>1?"www."===t[1]?"https://":t[1]:"https://"})(t),a=e.regex.exec(t);let o=r+e.url;if(s(a))for(let e=0;ea[e]?a[e]:""));return o.replace(/\?$/,"")},B=(e,t)=>{var r;const a=k.extend({},t);if(!a.source&&(k.extend(a,T(null!==(r=a.embed)&&void 0!==r?r:"",e.schema)),!a.source))return"";a.altsource||(a.altsource=""),a.poster||(a.poster=""),a.source=e.convertURL(a.source,"source"),a.altsource=e.convertURL(a.altsource,"source"),a.sourcemime=$(a.source),a.altsourcemime=$(a.altsource),a.poster=e.convertURL(a.poster,"poster");const o=(e=>{const t=L.filter((t=>t.regex.test(e)));return t.length>0?k.extend({},t[0],{url:I(t[0],e)}):null})(a.source);if(o&&(a.source=o.url,a.type=o.type,a.allowfullscreen=o.allowFullscreen,a.width=a.width||String(o.w),a.height=a.height||String(o.h)),a.embed)return E(a.embed,a,!0,e.schema);{const t=g(e),r=b(e),o=w(e);return a.width=a.width||"300",a.height=a.height||"150",k.each(a,((t,r)=>{a[r]=e.dom.encode(""+t)})),"iframe"===a.type?((e,t)=>{if(t)return t(e);{const t=e.allowfullscreen?' allowFullscreen="1"':"";return'"}})(a,o):"application/x-shockwave-flash"===a.sourcemime?(e=>{let t='';return e.poster&&(t+=''),t+="",t})(a):-1!==a.sourcemime.indexOf("audio")?((e,t)=>t?t(e):'")(a,t):"script"===a.type?(e=>' + +

    hello from test

    + + From 0661d632123fdda6c023b8088498a9cfc8e33188 Mon Sep 17 00:00:00 2001 From: Tim Yates Date: Thu, 14 Nov 2024 19:04:26 +0000 Subject: [PATCH 064/102] Split the configurations so we have one for the webUi and one for the webUiExternalFeedback --- server/build.gradle | 19 +++++++++++++------ web-ui-external-feedback/build.gradle | 6 +++--- web-ui/build.gradle | 6 +++--- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/server/build.gradle b/server/build.gradle index 36434e8899..d48e9a1e19 100755 --- a/server/build.gradle +++ b/server/build.gradle @@ -53,11 +53,18 @@ graalvmNative { } configurations { - yarnBuildElements { + webUi { canBeResolved = true canBeConsumed = false attributes { - attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage, "yarnBuild-elements")) + attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage, "web-ui")) + } + } + webUiExternalFeedback { + canBeResolved = true + canBeConsumed = false + attributes { + attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage, "web-ui-external-feedback")) } } } @@ -77,8 +84,8 @@ dependencies { annotationProcessor("io.micronaut.openapi:micronaut-openapi") annotationProcessor("io.micronaut.security:micronaut-security-annotations") - yarnBuildElements(project(":web-ui")) - yarnBuildElements(project(":web-ui-external-feedback")) + webUi(project(":web-ui")) + webUiExternalFeedback(project(":web-ui-external-feedback")) implementation("io.micronaut:micronaut-jackson-databind") implementation("io.micronaut:micronaut-http-client") @@ -173,12 +180,12 @@ tasks.withType(JavaCompile).configureEach { if(System.getenv("SKIP_WEB_UI") == null || System.getenv("SKIP_WEB_UI") == "false") { processResources { into('public') { - from configurations.named('yarnBuildElements') + from configurations.named('webUi') } } processResources { into('public-external-feedback') { - from configurations.named('yarnBuildElements') + from configurations.named('webUiExternalFeedback') } } } diff --git a/web-ui-external-feedback/build.gradle b/web-ui-external-feedback/build.gradle index 544b8cefc8..403e903da5 100644 --- a/web-ui-external-feedback/build.gradle +++ b/web-ui-external-feedback/build.gradle @@ -41,17 +41,17 @@ def yarnBuildTask = tasks.register("yarnBuild", YarnTask) { } configurations { - yarnBuildElements { + webUiExternalFeedback { canBeResolved = false canBeConsumed = true attributes { - attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage, "yarnBuild-elements")) + attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage, "web-ui-external-feedback")) } } } artifacts { - yarnBuildElements(distDir) { + webUiExternalFeedback(distDir) { builtBy(yarnBuildTask) } } diff --git a/web-ui/build.gradle b/web-ui/build.gradle index 544b8cefc8..cbdd1deba3 100644 --- a/web-ui/build.gradle +++ b/web-ui/build.gradle @@ -41,17 +41,17 @@ def yarnBuildTask = tasks.register("yarnBuild", YarnTask) { } configurations { - yarnBuildElements { + webUi { canBeResolved = false canBeConsumed = true attributes { - attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage, "yarnBuild-elements")) + attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage, "web-ui")) } } } artifacts { - yarnBuildElements(distDir) { + webUi(distDir) { builtBy(yarnBuildTask) } } From 16830e9a00c2e9fbeaa1fac5c59856f913d48439 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Thu, 14 Nov 2024 15:53:34 -0500 Subject: [PATCH 065/102] 2024-11-14 - web-ui - external feedback --- web-ui-external-feedback/index.html | 3 +- .../src/components/routes/Routes.jsx | 195 +----------------- 2 files changed, 3 insertions(+), 195 deletions(-) diff --git a/web-ui-external-feedback/index.html b/web-ui-external-feedback/index.html index 96e540ed44..a806723bcf 100644 --- a/web-ui-external-feedback/index.html +++ b/web-ui-external-feedback/index.html @@ -42,8 +42,7 @@ To create a production bundle, use `npm run build` or `yarn build`. --> -

    hello from test

    - + diff --git a/web-ui-external-feedback/src/components/routes/Routes.jsx b/web-ui-external-feedback/src/components/routes/Routes.jsx index 6f6a10e51d..8eb4953693 100644 --- a/web-ui-external-feedback/src/components/routes/Routes.jsx +++ b/web-ui-external-feedback/src/components/routes/Routes.jsx @@ -1,208 +1,17 @@ import React, { useContext } from 'react'; import { Switch, Route } from 'react-router-dom'; - import { AppContext } from '../../context/AppContext'; - -import AnniversaryReportPage from '../../pages/AnniversaryReportPage'; -import AnnualReviewReportPage from '../../pages/AnnualReviewReportPage'; -import BirthdayReportPage from '../../pages/BirthdayReportPage'; -import CertificationReportPage from '../../pages/CertificationReportPage'; -import CheckinsPage from '../../pages/CheckinsPage'; -import CheckinsReportPage from '../../pages/CheckinsReportPage'; -import EditPermissionsPage from '../../pages/PermissionsPage'; -import EditSkillsPage from '../../pages/EditSkillsPage'; -import GroupIcon from '@mui/icons-material/Group'; -import GuildsPage from '../../pages/GuildsPage'; -import Header from '../header/Header'; -import HomePage from '../../pages/HomePage'; -import MemberProfilePage from '../../pages/MemberProfilePage'; -import PeoplePage from '../../pages/PeoplePage'; -import PulsePage from '../../pages/PulsePage'; -import PulseReportPage from '../../pages/PulseReportPage'; -import Roles from '../admin/roles/Roles'; -import SettingsPage from '../../pages/SettingsPage'; -import SkillReportPage from '../../pages/SkillReportPage'; -import TeamSkillReportPage from '../../pages/TeamSkillReportPage'; -import TeamsPage from '../../pages/TeamsPage'; -import MeritReportPage from '../../pages/MeritReportPage'; -import Users from '../admin/users/Users'; -import VolunteerReportPage from '../../pages/VolunteerReportPage'; - -import { selectIsAdmin } from '../../context/selectors'; -import FeedbackRequestConfirmation from '../feedback_request_confirmation/FeedbackRequestConfirmation'; -import FeedbackRequestPage from '../../pages/FeedbackRequestPage'; -import ViewFeedbackPage from '../../pages/ViewFeedbackPage'; -import ViewFeedbackResponses from '../view_feedback_responses/ViewFeedbackResponses'; import FeedbackSubmitConfirmation from '../feedback_submit_confirmation/FeedbackSubmitConfirmation'; -import FeedbackSubmitPage from '../../pages/FeedbackSubmitPage'; -import ReceivedRequestsPage from '../../pages/ReceivedRequestsPage'; -import EmailPage from '../../pages/EmailPage'; -import ReviewsPage from '../../pages/ReviewsPage'; -import SelfReviewsPage from '../../pages/SelfReviewsPage'; -import KudosPage from '../../pages/KudosPage'; -import ManageKudosPage from '../../pages/ManageKudosPage'; -import SkillCategoriesPage from '../../pages/SkillCategoriesPage'; -import SkillCategoryEditPage from '../../pages/SkillCategoryEditPage'; + export default function Routes() { const { state } = useContext(AppContext); return ( - -
    - -
    - -
    - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - - - - - - - - - - - - - + - - - - - - - - - - - - - -
    - - - - -
    - - - -
    - - - -
    - - - - - - - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - -
    - -
    - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    ); } From e9e04c5dc0390c4cb634a585078f11956ca3aa90 Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Thu, 14 Nov 2024 16:18:09 -0500 Subject: [PATCH 066/102] 2024-11-14 - feedback ext recip --- .../checkins/services/reports/ReportDataCollation.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java b/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java index 67706d02e0..ccb1ca46a8 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/reports/ReportDataCollation.java @@ -222,8 +222,7 @@ private List getFeedbackType(FeedbackType type) { List requests = feedbackRequestServices.findByValues(null, memberId, null, null, null, null, null, null); - feedbackRequestServices.findByValues(null, memberId, null, - reviewPeriod.getPeriodStartDate().toLocalDate(), null, null, null); + feedbackRequestServices.findByValues(null, memberId, null, reviewPeriod.getPeriodStartDate().toLocalDate(), null, null, null, null); List filtered = new LinkedList<>(); // Iterate over each request and find the template. Determine the purpose // of the template. From af4f493565d855c57dda6ec1254d6d1b45e205af Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Fri, 15 Nov 2024 12:45:45 -0500 Subject: [PATCH 067/102] 2024-11-15 - feedback ext recip --- ...ackRequestExternalRecipientController.java | 21 ++ web-ui-external-feedback/src/App.jsx | 3 - web-ui-external-feedback/src/api/api.js | 7 +- web-ui-external-feedback/src/api/feedback.js | 7 + .../src/components/routes/Routes.jsx | 6 +- .../src/context/AppContext.jsx | 248 +----------------- .../FeedbackSubmitExternalRecipientPage.jsx | 160 +++++++++++ web-ui-external-feedback/vite.config.ts | 2 +- 8 files changed, 198 insertions(+), 256 deletions(-) create mode 100644 web-ui-external-feedback/src/pages/FeedbackSubmitExternalRecipientPage.jsx diff --git a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java index 9d1e882020..d56a6d0443 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java @@ -8,6 +8,8 @@ import io.micronaut.http.HttpResponse; import io.micronaut.http.MediaType; import io.micronaut.http.annotation.*; +import io.micronaut.http.cookie.SameSite; +import io.micronaut.http.netty.cookies.NettyCookie; import io.micronaut.scheduling.TaskExecutors; import io.micronaut.scheduling.annotation.ExecuteOn; import io.micronaut.security.annotation.Secured; @@ -20,7 +22,9 @@ import org.slf4j.LoggerFactory; import java.net.URI; +import java.security.SecureRandom; import java.time.LocalDate; +import java.util.Base64; import java.util.List; import java.util.UUID; @@ -34,6 +38,7 @@ public class FeedbackRequestExternalRecipientController { private final FeedbackRequestServices feedbackReqServices; private final FeedbackExternalRecipientServices feedbackExternalRecipientServices; private static final Logger LOG = LoggerFactory.getLogger(FeedbackRequestExternalRecipientController.class); + private static final Base64.Encoder base64Encoder = Base64.getUrlEncoder(); public FeedbackRequestExternalRecipientController(FeedbackRequestServices feedbackRequestServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices) { this.feedbackReqServices = feedbackRequestServices; @@ -121,4 +126,20 @@ private FeedbackRequestResponseDTO feedbackRequestFromEntity(FeedbackRequest fee return dto; } + + + @Get("/csrf/cookie") + public HttpResponse getCsrfToken() { + LOG.info("CsrfModelProcessor, getCsrfToken"); + SecureRandom random = new SecureRandom(); + byte[] randomBytes = new byte[24]; + random.nextBytes(randomBytes); + String cookieValue = base64Encoder.encodeToString(randomBytes); + + return HttpResponse.ok() + // set cookie + .cookie(new NettyCookie("_csrf", cookieValue).path("/").sameSite(SameSite.Strict)).body(cookieValue) + ; + } + } diff --git a/web-ui-external-feedback/src/App.jsx b/web-ui-external-feedback/src/App.jsx index 870391c129..1a3455debe 100644 --- a/web-ui-external-feedback/src/App.jsx +++ b/web-ui-external-feedback/src/App.jsx @@ -95,9 +95,6 @@ function App() {
    - - -
    diff --git a/web-ui-external-feedback/src/api/api.js b/web-ui-external-feedback/src/api/api.js index 284698d235..4d410a0e05 100644 --- a/web-ui-external-feedback/src/api/api.js +++ b/web-ui-external-feedback/src/api/api.js @@ -1,9 +1,12 @@ import { UPDATE_TOAST } from '../context/actions'; import qs from 'qs'; -export const BASE_API_URL = import.meta.env.VITE_APP_API_URL +export const BASE_API_URL = ( + import.meta.env.VITE_APP_API_URL ? import.meta.env.VITE_APP_API_URL - : 'http://localhost:8080'; + : 'http://localhost:8080' + ) + '/services/feedback/requests/external/recipients' +; export const getAvatarURL = email => BASE_API_URL + diff --git a/web-ui-external-feedback/src/api/feedback.js b/web-ui-external-feedback/src/api/feedback.js index 63814c235a..7bbe1472d2 100644 --- a/web-ui-external-feedback/src/api/feedback.js +++ b/web-ui-external-feedback/src/api/feedback.js @@ -134,6 +134,13 @@ export const getFeedbackRequestById = async (id, cookie) => { }); }; +export const getFeedbackRequestByIdForExternalRecipient = async (id, cookie) => { + return resolve({ + url: `/${id}`, + headers: { 'X-CSRF-Header': cookie, Accept: 'application/json' } + }); +}; + export const getAnswerByRequestAndQuestionId = async ( requestId, questionId, diff --git a/web-ui-external-feedback/src/components/routes/Routes.jsx b/web-ui-external-feedback/src/components/routes/Routes.jsx index 8eb4953693..be8e4d088e 100644 --- a/web-ui-external-feedback/src/components/routes/Routes.jsx +++ b/web-ui-external-feedback/src/components/routes/Routes.jsx @@ -1,7 +1,7 @@ import React, { useContext } from 'react'; import { Switch, Route } from 'react-router-dom'; import { AppContext } from '../../context/AppContext'; -import FeedbackSubmitConfirmation from '../feedback_submit_confirmation/FeedbackSubmitConfirmation'; +import FeedbackSubmitExternalRecipientPage from "../../pages/FeedbackSubmitExternalRecipientPage.jsx"; export default function Routes() { @@ -9,8 +9,8 @@ export default function Routes() { return ( - - + + ); diff --git a/web-ui-external-feedback/src/context/AppContext.jsx b/web-ui-external-feedback/src/context/AppContext.jsx index bd08fc7dc2..9bdbe1cadc 100644 --- a/web-ui-external-feedback/src/context/AppContext.jsx +++ b/web-ui-external-feedback/src/context/AppContext.jsx @@ -1,36 +1,10 @@ import React, { useEffect, useReducer, useMemo } from 'react'; import { reducer, initialState } from './reducer'; -import { getCheckins, getAllCheckinsForAdmin } from './thunks'; import { - MY_PROFILE_UPDATE, SET_CSRF, - SET_ROLES, - SET_USER_ROLES, - UPDATE_GUILDS, - UPDATE_MEMBER_SKILLS, - UPDATE_MEMBER_PROFILES, - UPDATE_TERMINATED_MEMBERS, - UPDATE_SKILLS, - UPDATE_CERTIFICATIONS, - UPDATE_TEAMS, - UPDATE_PEOPLE_LOADING, - UPDATE_TEAMS_LOADING } from './actions'; -import { - getCurrentUser, - getAllMembers, - getAllTerminatedMembers -} from '../api/member'; -import { - selectCanViewCheckinsPermission, -} from './selectors'; -import { getAllRoles, getAllUserRoles } from '../api/roles'; -import { getMemberSkills } from '../api/memberskill'; import { BASE_API_URL } from '../api/api'; -import { getAllGuilds } from '../api/guild'; -import { getSkills } from '../api/skill'; -import { getAllTeams } from '../api/team'; -import {getCertifications} from "../api/certification.js"; +; const AppContext = React.createContext(); @@ -50,26 +24,9 @@ const AppContextProvider = props => { reducer, props?.value?.state || initialState ); - const userProfile = - state && state.userProfile ? state.userProfile : undefined; - const memberProfile = - userProfile && userProfile.memberProfile - ? userProfile.memberProfile - : undefined; - const id = memberProfile ? memberProfile.id : undefined; - const pdlId = memberProfile ? memberProfile.pdlId : undefined; const { csrf, - guilds, - teams, - memberSkills, - memberProfiles, - checkins, - skills, - certifications, - roles, - userRoles } = state; const url = `${BASE_API_URL}/csrf/cookie`; useEffect(() => { @@ -92,209 +49,6 @@ const AppContextProvider = props => { getCsrf(); }, [csrf]); - useEffect(() => { - async function getGuilds() { - let res = await getAllGuilds(csrf); - let data = - res.payload && - res.payload.data && - res.payload.status === 200 && - !res.error - ? res.payload.data - : null; - if (data) { - dispatch({ type: UPDATE_GUILDS, payload: data }); - } - } - if (csrf && !guilds) { - getGuilds(); - } - }, [csrf, guilds]); - - useEffect(() => { - async function getTeams() { - let res = await getAllTeams(csrf); - let data = - res.payload && - res.payload.data && - res.payload.status === 200 && - !res.error - ? res.payload.data - : null; - if (data) { - dispatch({ type: UPDATE_TEAMS, payload: data }); - dispatch({ type: UPDATE_TEAMS_LOADING }); - } - } - if (csrf && !teams) { - dispatch({ type: UPDATE_TEAMS_LOADING }); - getTeams(); - } - }, [csrf, teams, dispatch]); - - useEffect(() => { - const updateUserProfile = async () => { - let res = await getCurrentUser(csrf); - let profile = - res.payload && res.payload.data && !res.error - ? res.payload.data - : undefined; - - if (profile) { - dispatch({ type: MY_PROFILE_UPDATE, payload: profile }); - } - }; - if (csrf && !userProfile) { - updateUserProfile(); - } - }, [csrf, userProfile]); - - useEffect(() => { - const getAllMemberSkills = async () => { - const res = await getMemberSkills(csrf); - const memberSkills = - res && res.payload && res.payload.data ? res.payload.data : null; - if (memberSkills) { - dispatch({ type: UPDATE_MEMBER_SKILLS, payload: memberSkills }); - } - }; - if (csrf && !memberSkills) { - getAllMemberSkills(); - } - }, [csrf, memberSkills]); - - useEffect(() => { - async function getMemberProfiles() { - let res = await getAllMembers(csrf); - let profiles = - res.payload && res.payload.data && !res.error - ? res.payload.data - : undefined; - - if (profiles) { - dispatch({ type: UPDATE_MEMBER_PROFILES, payload: profiles }); - dispatch({ type: UPDATE_PEOPLE_LOADING, payload: false }); - } - } - async function getTerminatedMembers() { - let res = await getAllTerminatedMembers(csrf); - let profiles = - res.payload && res.payload.data && !res.error - ? res.payload.data - : undefined; - - if (profiles) { - dispatch({ type: UPDATE_TERMINATED_MEMBERS, payload: profiles }); - } - } - if (csrf && userProfile && !memberProfiles) { - dispatch({ type: UPDATE_PEOPLE_LOADING, payload: true }); - getMemberProfiles(); - if (userProfile.role?.includes('ADMIN')) { - getTerminatedMembers(); - } - } - }, [csrf, userProfile, memberProfiles]); - - useEffect(() => { - function getAllTheCheckins() { - if ( - userProfile && - userProfile.permissions?.some(p => - p?.permission?.includes('CAN_VIEW_CHECKINS_REPORT') - ) && - id && - csrf - ) { - getAllCheckinsForAdmin(dispatch, csrf); - } else if (id && csrf && selectCanViewCheckinsPermission(state)) { - getCheckins(id, pdlId, dispatch, csrf); - } - } - if (csrf && !checkins) { - getAllTheCheckins(); - } - }, [csrf, pdlId, id, userProfile, checkins]); - - useEffect(() => { - const getAllSkills = async () => { - const res = await getSkills(csrf); - const data = - res && - res.payload && - res.payload.data && - res.payload.status === 200 && - !res.error - ? res.payload.data - : null; - if (data && data.length > 0) { - dispatch({ type: UPDATE_SKILLS, payload: data }); - } - }; - if (csrf && !skills) { - getAllSkills(); - } - }, [csrf, skills]); - - useEffect(() => { - const getAllCertifications = async () => { - const res = await getCertifications(csrf); - const data = - res && - res.payload && - res.payload.data && - res.payload.status === 200 && - !res.error - ? res.payload.data - : null; - if (data && data.length > 0) { - dispatch({ type: UPDATE_CERTIFICATIONS, payload: data }); - } - }; - if (csrf && !certifications) { - getAllCertifications(); - } - }, [csrf, certifications]); - - useEffect(() => { - const getRoles = async () => { - const res = await getAllRoles(csrf); - const data = - res && - res.payload && - res.payload.data && - res.payload.status === 200 && - !res.error - ? res.payload.data - : null; - if (data && Array.isArray(data) && data.length > 0) { - dispatch({ type: SET_ROLES, payload: data }); - } - }; - if (csrf && !roles) { - getRoles(); - } - }, [csrf, roles]); - - useEffect(() => { - const getUserRoles = async () => { - // make call to the API - let res = await getAllUserRoles(csrf); - return res.payload && - res.payload.data && - res.payload.status === 200 && - !res.error - ? res.payload.data - : null; - }; - - if (csrf && !userRoles) { - getUserRoles().then(userRoles => { - dispatch({ type: SET_USER_ROLES, payload: userRoles }); - }); - } - }, [csrf, userRoles]); - const value = useMemo(() => { return { state, dispatch }; }, [state]); diff --git a/web-ui-external-feedback/src/pages/FeedbackSubmitExternalRecipientPage.jsx b/web-ui-external-feedback/src/pages/FeedbackSubmitExternalRecipientPage.jsx new file mode 100644 index 0000000000..5e93d6a8fb --- /dev/null +++ b/web-ui-external-feedback/src/pages/FeedbackSubmitExternalRecipientPage.jsx @@ -0,0 +1,160 @@ +import React, {useContext, useEffect, useRef, useState} from 'react'; +import { styled } from '@mui/material/styles'; +import {useHistory, useLocation, useParams} from 'react-router-dom'; +import {AppContext} from "../context/AppContext.jsx"; +import {selectCsrfToken, selectProfile} from "../context/selectors.js"; +import * as queryString from "query-string"; +import Typography from "@mui/material/Typography"; +import TeamMemberReview from "../components/reviews/TeamMemberReview.jsx"; +import FeedbackSubmissionTips from "../components/feedback_submission_tips/FeedbackSubmissionTips.jsx"; +import FeedbackSubmitForm from "../components/feedback_submit_form/FeedbackSubmitForm.jsx"; +import {UPDATE_TOAST} from "../context/actions.js"; +import {getFeedbackRequestById, getFeedbackRequestByIdForExternalRecipient} from "../api/feedback.js"; + +const PREFIX = 'FeedbackSubmitExternalRecipientPage'; +const classes = { + announcement: `${PREFIX}-announcement` +}; + +const Root = styled('div')({ + [`& .${classes.announcement}`]: { + textAlign: 'center', + marginTop: '3em', + ['@media (max-width: 800px)']: { + // eslint-disable-line no-useless-computed-key + fontSize: '22px' + } + } +}); + +const FeedbackSubmitExternalRecipientPage = () => { + const { state } = useContext(AppContext); + const csrf = selectCsrfToken(state); + const location = useLocation(); + const history = useHistory(); + const query = queryString.parse(location?.search); + const requestId = query.request?.toString(); + const tabs = query.tabs?.toString(); + const requestQuery = query.request?.toString(); + const selfRequestQuery = query.selfrequest?.toString(); + const [showTips, setShowTips] = useState(true); + const [feedbackRequest, setFeedbackRequest] = useState(null); + const [selfReviewRequest, setSelfReviewRequest] = useState(null); + const [requestee, setRequestee] = useState(null); + const [recipient, setRecipient] = useState(null); + const [requestSubmitted, setRequestSubmitted] = useState(false); + const [requestCanceled, setRequestCanceled] = useState(false); + const feedbackRequestFetched = useRef(false); + + useEffect(() => { + if (!requestQuery && !selfRequestQuery) { + history.push('/checkins'); + window.snackDispatch({ + type: UPDATE_TOAST, + payload: { + severity: 'error', + toast: 'No request present' + } + }); + } + + async function getFeedbackRequest(query, cookie) { + console.log("FeedbackSubmitExternalRecipientPage, getFeedbackRequest, requestId: ", requestId); + if (!cookie || feedbackRequestFetched.current) { + return null; + } + console.log("FeedbackSubmitExternalRecipientPage, getFeedbackRequest, past if"); + + // make call to the API + let res = await getFeedbackRequestByIdForExternalRecipient(requestId, cookie); + console.log("FeedbackSubmitExternalRecipientPage, getFeedbackRequest, res: ", res); + return res.payload && + res.payload.data && + res.payload.status === 200 && + !res.error + ? res.payload.data + : null; + } + + if (csrf && requestQuery && !feedbackRequestFetched.current) { + getFeedbackRequest(requestQuery, csrf).then(request => { + if (request) { + // Permission to view this feedback request will be checked later. + if ( + request.status.toLowerCase() === 'submitted' || + request.submitDate + ) { + setRequestSubmitted(true); + setFeedbackRequest(request); + } else if (request.status.toLowerCase() === 'canceled') { + setRequestCanceled(true); + } else { + setFeedbackRequest(request); + } + } else { + history.push('/checkins'); + window.snackDispatch({ + type: UPDATE_TOAST, + payload: { + severity: 'error', + toast: "Can't find feedback request with that ID" + } + }); + } + }); + } + + if (csrf && selfRequestQuery) { + getFeedbackRequest(selfRequestQuery, csrf).then(request => { + if (request) { + setSelfReviewRequest(request); + } + }); + } + }, [csrf, requestQuery, history]); + + useEffect(() => { + if (feedbackRequest) { + feedbackRequestFetched.current = true; + } + + if (feedbackRequestFetched.current) { + const requesteeProfile = selectProfile( + state, + feedbackRequest?.requesteeId + ); + setRequestee(requesteeProfile); + } + }, [feedbackRequest, selfReviewRequest, state]); + + return ( + + {requestCanceled ? ( + + This feedback request has been canceled. + + ) : tabs || requestSubmitted || selfReviewRequest ? ( + + ) : ( + <> + {feedbackRequest && + (showTips ? ( + setShowTips(false)} /> + ) : ( + + ))} + + )} + + ); +}; + +export default FeedbackSubmitExternalRecipientPage; diff --git a/web-ui-external-feedback/vite.config.ts b/web-ui-external-feedback/vite.config.ts index 2f103fa0b9..e86efe899c 100644 --- a/web-ui-external-feedback/vite.config.ts +++ b/web-ui-external-feedback/vite.config.ts @@ -3,7 +3,7 @@ import react from '@vitejs/plugin-react-swc'; // https://vitejs.dev/config/ export default defineConfig({ - base: '/', + base: '/externalFeedback', plugins: [react()], test: { globals: true, From cd41d4e1ea147eeb5d0479d74bfc5fd56e9cb48f Mon Sep 17 00:00:00 2001 From: Luciano Belotto Date: Mon, 18 Nov 2024 09:45:57 -0500 Subject: [PATCH 068/102] 2024-11-18 - cleanup web-ui-external --- web-ui-external-feedback/src/App.jsx | 1 - .../action_item/ActionItemsPanel.css | 48 - .../action_item/ActionItemsPanel.jsx | 277 ---- .../action_item/ActionItemsPanel.test.jsx | 160 -- .../ActionItemsPanel.test.jsx.snap | 76 - .../admin/permissions/DesktopTable.jsx | 66 - .../permissions/DesktopTable.stories.jsx | 23 - .../admin/permissions/DesktopTable.test.jsx | 16 - .../admin/permissions/MobileTable.jsx | 135 -- .../admin/permissions/MobileTable.stories.jsx | 27 - .../admin/permissions/MobileTable.test.jsx | 15 - .../admin/permissions/Permissions.jsx | 10 - .../__snapshots__/DesktopTable.test.jsx.snap | 684 -------- .../__snapshots__/MobileTable.test.jsx.snap | 366 ----- .../admin/permissions/sample-data.js | 52 - .../components/admin/roles/RoleUserCards.jsx | 59 - .../src/components/admin/roles/Roles.css | 169 -- .../src/components/admin/roles/Roles.jsx | 409 ----- .../src/components/admin/roles/Roles.test.jsx | 38 - .../roles/__snapshots__/Roles.test.jsx.snap | 368 ----- .../src/components/admin/users/Users.css | 9 - .../src/components/admin/users/Users.jsx | 215 --- .../src/components/admin/users/Users.test.jsx | 49 - .../users/__snapshots__/Users.test.jsx.snap | 146 -- .../src/components/agenda/Agenda.css | 48 - .../src/components/agenda/Agenda.jsx | 275 ---- .../src/components/agenda/Agenda.test.jsx | 53 - .../agenda/__snapshots__/Agenda.test.jsx.snap | 76 - .../AnnualReviewReport.jsx | 316 ---- .../src/components/avatar/Avatar.css | 4 - .../src/components/avatar/Avatar.jsx | 10 - .../src/components/avatar/Avatar.stories.jsx | 17 - .../src/components/avatar/Avatar.test.jsx | 24 - .../avatar/__snapshots__/Avatar.test.jsx.snap | 21 - .../components/celebrations/Anniversaries.css | 181 --- .../components/celebrations/Anniversaries.jsx | 109 -- .../celebrations/Anniversaries.test.jsx | 35 - .../src/components/celebrations/Birthdays.css | 275 ---- .../src/components/celebrations/Birthdays.jsx | 120 -- .../celebrations/Birthdays.test.jsx | 41 - .../components/celebrations/MyAnniversary.css | 201 --- .../components/celebrations/MyAnniversary.jsx | 56 - .../celebrations/MyAnniversary.test.jsx | 25 - .../components/celebrations/MyBirthday.css | 346 ---- .../components/celebrations/MyBirthday.jsx | 45 - .../celebrations/MyBirthday.test.jsx | 20 - .../__snapshots__/Anniversaries.test.jsx.snap | 189 --- .../__snapshots__/Birthdays.test.jsx.snap | 62 - .../DoubleCelebration.test.jsx.snap | 110 -- .../__snapshots__/MyAnniversary.test.jsx.snap | 36 - .../__snapshots__/MyBirthday.test.jsx.snap | 67 - .../certifications/CertificationBadges.css | 10 - .../certifications/CertificationBadges.jsx | 64 - .../certifications/Certifications.css | 18 - .../certifications/Certifications.jsx | 276 ---- .../EarnedCertificationsTable.css | 67 - .../EarnedCertificationsTable.jsx | 591 ------- .../src/components/checkin/Checkin.css | 50 - .../src/components/checkin/CheckinCycle.jsx | 14 - .../checkin/CheckinCycle.stories.jsx | 29 - .../components/checkin/CheckinCycle.test.jsx | 7 - .../src/components/checkin/CheckinHistory.jsx | 133 -- .../checkin/CheckinHistory.stories.jsx | 79 - .../checkin/CheckinHistory.test.jsx | 63 - .../src/components/checkin/CheckinProfile.jsx | 55 - .../checkin/CheckinProfile.stories.jsx | 63 - .../checkin/CheckinProfile.test.jsx | 26 - .../__snapshots__/CheckinCycle.test.jsx.snap | 13 - .../CheckinHistory.test.jsx.snap | 93 -- .../CheckinProfile.test.jsx.snap | 33 - .../src/components/checkin/checkin-cycle.png | Bin 1784800 -> 0 bytes .../checkin/documents/CheckinDocs.css | 10 - .../checkin/documents/CheckinDocs.jsx | 166 -- .../checkin/documents/CheckinDocs.stories.jsx | 86 - .../checkin/documents/CheckinDocs.test.jsx | 48 - .../checkin/documents/FileUploader.jsx | 38 - .../__snapshots__/CheckinDocs.test.jsx.snap | 76 - .../contribution_hours/ProgressBar.jsx | 76 - .../ProgressBar.stories.jsx | 11 - .../contribution_hours/ProgressBar.test.jsx | 11 - .../__snapshots__/ProgressBar.test.jsx.snap | 105 -- .../date-picker-field/DatePickerField.css | 18 - .../date-picker-field/DatePickerField.jsx | 52 - .../src/components/dialogs/AlertDialog.jsx | 36 - .../components/dialogs/ConfirmationDialog.jsx | 59 - .../components/dialogs/OrganizationDialog.jsx | 61 - .../discrete_slider/DiscreteSlider.jsx | 153 -- .../DiscreteSlider.stories.jsx | 27 - .../discrete_slider/DiscreteSlider.test.tsx | 37 - .../DiscreteSlider.test.tsx.snap | 19 - .../EarnedCertificationBadges.css | 10 - .../EarnedCertificationBadges.jsx | 142 -- .../src/components/edit_skills/EditSkills.css | 62 - .../components/edit_skills/EditSkillsCard.jsx | 210 --- .../edit_skills/EditSkillsCard.test.jsx | 110 -- .../edit_skills/EditSkillsModal.jsx | 144 -- .../EditSkillsCard.test.jsx.snap | 183 --- .../src/components/expand-more/ExpandMore.jsx | 20 - .../expand-more/ExpandMore.stories.jsx | 23 - .../expand-more/ExpandMore.test.jsx | 66 - .../feedback_date_selector/SelectDate.jsx | 119 -- .../SelectDate.stories.jsx | 27 - .../FeedbackExternalRecipientCard.css | 55 - .../FeedbackExternalRecipientCard.jsx | 130 -- .../FeedbackExternalRecipientCard.stories.jsx | 48 - .../FeedbackExternalRecipientCard.test.jsx | 14 - ...eedbackExternalRecipientCard.test.jsx.snap | 73 - .../FeedbackExternalRecipientSelector.css | 40 - .../FeedbackExternalRecipientSelector.jsx | 345 ---- ...FeedbackExternalRecipientSelector.test.jsx | 20 - .../NewExternalRecipientModal.jsx | 118 -- ...ackExternalRecipientSelector.test.jsx.snap | 127 -- .../FeedbackRecipientCard.css | 55 - .../FeedbackRecipientCard.jsx | 146 -- .../FeedbackRecipientCard.stories.jsx | 48 - .../FeedbackRecipientCard.test.jsx | 14 - .../FeedbackRecipientCard.test.jsx.snap | 64 - .../FeedbackRecipientSelector.css | 40 - .../FeedbackRecipientSelector.jsx | 260 --- .../FeedbackRecipientSelector.test.jsx | 20 - .../FeedbackRecipientSelector.test.jsx.snap | 99 -- .../FeedbackRequestCard.css | 83 - .../FeedbackRequestCard.jsx | 291 ---- .../FeedbackRequestCard.stories.jsx | 42 - .../FeedbackRequestCard.test.jsx | 30 - .../FeedbackRequestCard.test.jsx.snap | 100 -- .../FeedbackRequestSubcard.css | 17 - .../FeedbackRequestSubcard.jsx | 448 ------ .../FeedbackRequestSubcard.test.jsx | 29 - .../FeedbackRequestSubcard.test.jsx.snap | 109 -- .../FeedbackRequestConfirmation.css | 15 - .../FeedbackRequestConfirmation.jsx | 163 -- .../FeedbackRequestConfirmation.test.jsx | 44 - .../FeedbackRequestConfirmation.test.jsx.snap | 64 - .../FeedbackSubmitConfirmation.css | 11 - .../FeedbackSubmitConfirmation.jsx | 104 -- .../FeedbackSubmitConfirmation.test.jsx | 34 - .../FeedbackSubmitConfirmation.test.jsx.snap | 36 - .../FeedbackTemplateSelector.css | 29 - .../FeedbackTemplateSelector.jsx | 252 --- .../FeedbackTemplateSelector.test.jsx | 11 - .../FeedbackTemplateSelector.test.jsx.snap | 93 -- .../src/components/feelings/Feelings.jsx | 65 - .../src/components/feelings/Feelings.test.jsx | 23 - .../__snapshots__/Feelings.test.jsx.snap | 317 ---- .../src/components/guides/GuideLink.css | 0 .../src/components/guides/GuideLink.jsx | 31 - .../src/components/guides/GuideLink.test.jsx | 19 - .../src/components/guides/GuidesPanel.css | 0 .../src/components/guides/GuidesPanel.jsx | 83 - .../components/guides/GuidesPanel.test.jsx | 45 - .../src/components/guides/PDLGuidesPanel.jsx | 41 - .../components/guides/PDLGuidesPanel.test.jsx | 61 - .../__snapshots__/GuideLink.test.jsx.snap | 46 - .../__snapshots__/GuidesPanel.test.jsx.snap | 77 - .../PDLGuidesPanel.test.jsx.snap | 59 - .../guild-results/EditGuildModal.css | 37 - .../guild-results/EditGuildModal.jsx | 284 ---- .../guild-results/EditGuildModal.spec.jsx | 114 -- .../components/guild-results/GuildResults.css | 37 - .../components/guild-results/GuildResults.jsx | 154 -- .../guild-results/GuildResults.test.jsx | 49 - .../guild-results/GuildSummaryCard.jsx | 241 --- .../guild-results/GuildSummaryCard.test.jsx | 78 - .../__snapshots__/GuildResults.test.jsx.snap | 225 --- .../GuildSummaryCard.test.jsx.snap | 221 --- .../__snapshots__/GuildsActions.test.jsx.snap | 9 - .../src/components/header/Header.css | 26 - .../src/components/header/Header.jsx | 13 - .../src/components/header/Header.stories.jsx | 15 - .../src/components/header/Header.test.jsx | 7 - .../header/__snapshots__/Header.test.jsx.snap | 13 - .../src/components/kudos/PublicKudos.css | 9 - .../src/components/kudos/PublicKudos.jsx | 83 - .../src/components/kudos/PublicKudosCard.css | 3 - .../src/components/kudos/PublicKudosCard.jsx | 122 -- .../src/components/kudos_card/KudosCard.css | 66 - .../src/components/kudos_card/KudosCard.jsx | 278 ---- .../components/kudos_dialog/KudosDialog.css | 10 - .../components/kudos_dialog/KudosDialog.jsx | 343 ---- .../member-directory/AdminMemberCard.jsx | 279 ---- .../member-directory/MemberModal.css | 41 - .../member-directory/MemberModal.jsx | 345 ---- .../member-directory/MemberModal.test.jsx | 68 - .../member-directory/MemberSummaryCard.css | 46 - .../member-directory/MemberSummaryCard.jsx | 141 -- .../MemberSummaryCard.test.jsx | 50 - .../__snapshots__/MemberModal.test.jsx.snap | 76 - .../MemberSummaryCard.test.jsx.snap | 78 - .../member_selector/MemberSelector.css | 33 - .../member_selector/MemberSelector.jsx | 193 --- .../member_selector/MemberSelector.test.jsx | 67 - .../MemberSelector.test.jsx.snap | 226 --- .../MemberSelectorDialog.css | 99 -- .../MemberSelectorDialog.jsx | 625 -------- .../MemberSelectorDialog.spec.jsx | 202 --- .../MemberSelectorDialog.test.jsx | 76 - .../MemberSelectorDialog.test.jsx.snap | 571 ------- .../member_skill_radar/MemberSkillRadar.jsx | 79 - .../member_skill_radar/RadarColors.jsx | 21 - .../src/components/menu/Menu.css | 120 -- .../src/components/menu/Menu.jsx | 508 ------ .../src/components/menu/Menu.test.jsx | 124 -- .../menu/__snapshots__/Menu.test.jsx.snap | 1321 ---------------- .../src/components/notes/Note.css | 29 - .../src/components/notes/Note.jsx | 155 -- .../src/components/notes/Note.test.jsx | 68 - .../notes/__snapshots__/Note.test.jsx.snap | 66 - .../opportunity/OpportunityCard.jsx | 42 - .../opportunity/OpportunityCard.stories.jsx | 33 - .../opportunity/OpportunityCard.test.jsx | 20 - .../OpportunityCard.test.jsx.snap | 60 - .../src/components/personnel/Personnel.css | 24 - .../src/components/personnel/Personnel.jsx | 148 -- .../components/personnel/Personnel.test.jsx | 11 - .../__snapshots__/Personnel.test.jsx.snap | 57 - .../components/private-note/PrivateNote.css | 29 - .../components/private-note/PrivateNote.jsx | 163 -- .../private-note/PrivateNote.test.jsx | 68 - .../__snapshots__/PrivateNote.test.jsx.snap | 3 - .../src/components/profile/Profile.css | 0 .../src/components/profile/Profile.jsx | 165 -- .../src/components/profile/Profile.test.jsx | 57 - .../src/components/profile/Search.css | 25 - .../src/components/profile/Search.jsx | 76 - .../__snapshots__/Profile.test.jsx.snap | 63 - .../src/components/pulse/Pulse.css | 31 - .../src/components/pulse/Pulse.jsx | 81 - .../src/components/pulse/Pulse.test.jsx | 42 - .../pulse/__snapshots__/Pulse.test.jsx.snap | 235 --- .../ReceivedRequestCard.css | 19 - .../ReceivedRequestCard.jsx | 140 -- .../checkin-report/CheckinReport.css | 24 - .../checkin-report/CheckinReport.jsx | 219 --- .../HorizontalLinearStepper.jsx | 37 - .../checkin-report/LinkSection.css | 6 - .../checkin-report/LinkSection.jsx | 35 - .../checkin-report/TeamMemberMap.css | 32 - .../checkin-report/TeamMemberMap.jsx | 147 -- .../checkin-report/TeamMemberMap.test.jsx | 79 - .../checkin-report/checkin-utils.js | 76 - .../checkin-report/checkin-utils.test.js | 205 --- .../components/reviews/SelectUserModal.jsx | 80 - .../src/components/reviews/SelfReview.jsx | 145 -- .../src/components/reviews/TeamReviews.css | 24 - .../src/components/reviews/TeamReviews.jsx | 1158 -------------- .../reviews/periods/ReviewPeriodCard.css | 22 - .../reviews/periods/ReviewPeriodCard.jsx | 216 --- .../reviews/periods/ReviewPeriodStepper.jsx | 28 - .../periods/ReviewPeriodStepper.stories.jsx | 38 - .../periods/ReviewPeriodStepper.test.jsx | 23 - .../reviews/periods/ReviewPeriods.jsx | 504 ------ .../ReviewPeriodStepper.test.jsx.snap | 183 --- .../reviews/periods/reviewStatus.json | 6 - .../SearchBirthdayAnniversaryResults.jsx | 143 -- .../search-results/SearchResults.jsx | 72 - .../SelectSkillsDialog.jsx | 164 -- .../SelectSkillsDialog.test.jsx | 93 -- .../SelectSkillsDialog.test.jsx.snap | 248 --- .../sentiment_icon/SentimentIcon.css | 15 - .../sentiment_icon/SentimentIcon.jsx | 223 --- .../sentiment_icon/SentimentIcon.stories.jsx | 28 - .../sentiment_icon/SentimentIcon.test.jsx | 6 - .../__snapshots__/SentimentIcon.test.jsx.snap | 38 - .../src/components/settings/index.js | 5 - .../src/components/settings/types/boolean.jsx | 40 - .../settings/types/boolean.stories.jsx | 26 - .../src/components/settings/types/color.jsx | 38 - .../settings/types/color.stories.jsx | 27 - .../src/components/settings/types/file.jsx | 54 - .../settings/types/file.stories.jsx | 29 - .../src/components/settings/types/number.jsx | 56 - .../settings/types/number.stories.jsx | 25 - .../src/components/settings/types/string.jsx | 65 - .../settings/types/string.stories.jsx | 25 - .../skill-category-card/SkillCategoryCard.jsx | 66 - .../SkillCategoryCard.test.jsx | 14 - .../SkillCategoryCard.test.jsx.snap | 91 -- .../SkillCategoryNewDialog.jsx | 86 - .../SkillCategoryNewDialog.test.jsx | 18 - .../SkillCategoryNewDialog.test.jsx.snap | 7 - .../src/components/skills/SkillSection.css | 107 -- .../src/components/skills/SkillSection.jsx | 356 ----- .../src/components/skills/SkillSlider.css | 21 - .../src/components/skills/SkillSlider.jsx | 105 -- .../components/split-button/SplitButton.jsx | 110 -- .../split-button/SplitButton.stories.jsx | 23 - .../split-button/SplitButton.test.jsx | 7 - .../__snapshots__/SplitButton.test.jsx.snap | 46 - .../src/components/team-member/MemberIcon.jsx | 21 - .../team-member/MemberIcon.test.jsx | 8 - .../src/components/team-member/TeamMember.css | 34 - .../team-member/TeamMemberContainer.jsx | 181 --- .../team-member/TeamMemberContainer.test.jsx | 16 - .../team-member/TeamMemberSelect.css | 34 - .../team-member/TeamMemberSelect.jsx | 70 - .../team-member/TeamMemberSelect.test.jsx | 64 - .../__snapshots__/MemberIcon.test.jsx.snap | 15 - .../TeamMemberContainer.test.jsx.snap | 15 - .../TeamMemberSelect.test.jsx.snap | 127 -- .../components/team-results/EditTeamModal.css | 37 - .../components/team-results/EditTeamModal.jsx | 261 --- .../team-results/EditTeamModal.spec.jsx | 159 -- .../components/team-results/TeamResults.css | 37 - .../components/team-results/TeamResults.jsx | 124 -- .../team-results/TeamResults.test.jsx | 72 - .../team-results/TeamSummaryCard.jsx | 219 --- .../team-results/TeamSummaryCard.test.jsx | 77 - .../components/team-results/TeamsActions.jsx | 48 - .../team-results/TeamsActions.test.jsx | 39 - .../__snapshots__/TeamResults.test.jsx.snap | 233 --- .../TeamSummaryCard.test.jsx.snap | 206 --- .../__snapshots__/TeamsActions.test.jsx.snap | 35 - .../components/template-card/TemplateCard.css | 76 - .../components/template-card/TemplateCard.jsx | 132 -- .../template-card/TemplateCard.stories.jsx | 28 - .../template-card/TemplateCard.test.jsx | 15 - .../__snapshots__/TemplateCard.test.jsx.snap | 63 - .../TemplatePreviewModal.css | 15 - .../TemplatePreviewModal.jsx | 223 --- .../AdHocCreationForm.jsx | 75 - .../ViewFeedbackResponses.css | 61 - .../ViewFeedbackResponses.jsx | 335 ---- .../ViewFeedbackResponses.stories.jsx | 141 -- .../ViewFeedbackResponses.test.jsx | 34 - .../ViewFeedbackResponses.test.jsx.snap | 183 --- .../FeedbackResponseCard.css | 95 -- .../FeedbackResponseCard.jsx | 61 - .../FeedbackResponseCard.stories.jsx | 27 - .../FeedbackResponseCard.test.tsx | 69 - .../FeedbackResponseCard.test.tsx.snap | 193 --- .../components/volunteer/Organizations.jsx | 331 ---- .../components/volunteer/VolunteerBadges.jsx | 96 -- .../components/volunteer/VolunteerEvents.jsx | 549 ------- .../volunteer/VolunteerRelationships.jsx | 431 ----- .../components/volunteer/VolunteerTables.css | 113 -- .../components/volunteer/VolunteerTables.jsx | 110 -- .../src/pages/AnniversaryReportPage.jsx | 148 -- .../src/pages/AnniversaryReportPage.test.jsx | 41 - .../src/pages/AnnualReviewReportPage.css | 27 - .../src/pages/AnnualReviewReportPage.jsx | 80 - .../pages/BirthdayAnniversaryReportPage.css | 44 - .../src/pages/BirthdayReportPage.jsx | 162 -- .../src/pages/BirthdayReportPage.test.jsx | 42 - .../src/pages/CertificationReportPage.css | 12 - .../src/pages/CertificationReportPage.jsx | 39 - .../src/pages/CheckinsPage.css | 39 - .../src/pages/CheckinsPage.jsx | 240 --- .../src/pages/CheckinsPage.test.jsx | 74 - .../src/pages/CheckinsReportPage.css | 27 - .../src/pages/CheckinsReportPage.jsx | 278 ---- .../src/pages/EditPermissionsPage.css | 7 - .../src/pages/EditPermissionsPage.jsx | 1397 ----------------- .../src/pages/EditPermissionsPage.test.jsx | 11 - .../src/pages/EditPermissionsPageRoles.jsx | 43 - .../src/pages/EditSkillsPage.css | 29 - .../src/pages/EditSkillsPage.jsx | 111 -- .../src/pages/EditSkillsPage.test.jsx | 34 - .../src/pages/EmailPage.css | 89 -- .../src/pages/EmailPage.jsx | 632 -------- .../src/pages/FeedbackRequestPage.css | 99 -- .../src/pages/FeedbackRequestPage.jsx | 547 ------- .../src/pages/FeedbackRequestPage.test.jsx | 34 - .../src/pages/GuildsPage.jsx | 16 - .../src/pages/GuildsPage.test.jsx | 11 - .../src/pages/HomePage.css | 35 - .../src/pages/HomePage.jsx | 116 -- .../src/pages/HomePage.test.jsx | 16 - .../src/pages/KudosPage.css | 68 - .../src/pages/KudosPage.jsx | 201 --- .../src/pages/ManageKudosPage.css | 24 - .../src/pages/ManageKudosPage.jsx | 194 --- .../src/pages/MemberProfilePage.css | 54 - .../src/pages/MemberProfilePage.jsx | 344 ---- .../src/pages/MemberProfilePage.test.jsx | 31 - .../src/pages/MeritReportPage.css | 29 - .../src/pages/MeritReportPage.jsx | 591 ------- .../src/pages/PeoplePage.css | 3 - .../src/pages/PeoplePage.jsx | 109 -- .../src/pages/PeoplePage.test.jsx | 11 - .../src/pages/PermissionsPage.css | 7 - .../src/pages/PermissionsPage.jsx | 224 --- .../src/pages/PermissionsPage.test.jsx | 30 - .../src/pages/ProfilePage.css | 32 - .../src/pages/ProfilePage.jsx | 253 --- .../src/pages/PulsePage.css | 14 - .../src/pages/PulsePage.jsx | 155 -- .../src/pages/PulsePage.test.jsx | 11 - .../src/pages/PulseReportPage.css | 32 - .../src/pages/PulseReportPage.jsx | 563 ------- .../src/pages/PulseReportPage.test.jsx | 29 - .../src/pages/ReceivedRequestsPage.css | 146 -- .../src/pages/ReceivedRequestsPage.jsx | 407 ----- .../src/pages/ReviewsPage.jsx | 105 -- .../src/pages/SelfReviewsPage.jsx | 130 -- .../src/pages/SelfReviewsPage.test.jsx | 19 - .../src/pages/SettingsPage.css | 74 - .../src/pages/SettingsPage.jsx | 232 --- .../src/pages/SettingsPage.test.jsx | 77 - .../src/pages/SkillCategoriesPage.css | 57 - .../src/pages/SkillCategoriesPage.jsx | 302 ---- .../src/pages/SkillCategoriesPage.test.jsx | 29 - .../src/pages/SkillCategoryEditPage.css | 14 - .../src/pages/SkillCategoryEditPage.jsx | 272 ---- .../src/pages/SkillCategoryEditPage.test.jsx | 14 - .../src/pages/SkillReportPage.css | 29 - .../src/pages/SkillReportPage.jsx | 155 -- .../src/pages/SkillReportPage.test.jsx | 29 - .../src/pages/TeamSkillReportPage.css | 32 - .../src/pages/TeamSkillReportPage.jsx | 249 --- .../src/pages/TeamSkillReportPage.test.jsx | 37 - .../src/pages/TeamsPage.jsx | 16 - .../src/pages/ViewFeedbackPage.css | 50 - .../src/pages/ViewFeedbackPage.jsx | 472 ------ .../src/pages/ViewFeedbackPage.test.jsx | 34 - .../src/pages/VolunteerReportPage.jsx | 5 - .../AnniversaryReportPage.test.jsx.snap | 164 -- .../BirthdayReportPage.test.jsx.snap | 194 --- .../__snapshots__/CheckinsPage.test.jsx.snap | 275 ---- .../__snapshots__/DirectoryPage.test.js.snap | 598 ------- .../EditPermissionsPage.test.jsx.snap | 13 - .../EditSkillsPage.test.jsx.snap | 104 -- .../FeedbackRequestPage.test.jsx.snap | 286 ---- .../__snapshots__/GuildsPage.test.jsx.snap | 92 -- .../__snapshots__/HomePage.test.jsx.snap | 70 - .../MemberProfilePage.test.jsx.snap | 121 -- .../__snapshots__/PeoplePage.test.js.snap | 598 ------- .../__snapshots__/PeoplePage.test.jsx.snap | 82 - .../PermissionsPage.test.jsx.snap | 72 - .../__snapshots__/PulsePage.test.jsx.snap | 470 ------ .../PulseReportPage.test.jsx.snap | 153 -- .../SelfReviewsPage.test.jsx.snap | 49 - .../__snapshots__/SettingsPage.test.jsx.snap | 129 -- .../SkillCategoriesPage.test.jsx.snap | 190 --- .../SkillCategoryEditPage.test.jsx.snap | 138 -- .../SkillReportPage.test.jsx.snap | 118 -- .../TeamSkillReportPage.test.jsx.snap | 167 -- .../ViewFeedbackPage.test.jsx.snap | 251 --- 438 files changed, 50554 deletions(-) delete mode 100644 web-ui-external-feedback/src/components/action_item/ActionItemsPanel.css delete mode 100644 web-ui-external-feedback/src/components/action_item/ActionItemsPanel.jsx delete mode 100644 web-ui-external-feedback/src/components/action_item/ActionItemsPanel.test.jsx delete mode 100644 web-ui-external-feedback/src/components/action_item/__snapshots__/ActionItemsPanel.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/admin/permissions/DesktopTable.jsx delete mode 100644 web-ui-external-feedback/src/components/admin/permissions/DesktopTable.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/admin/permissions/DesktopTable.test.jsx delete mode 100644 web-ui-external-feedback/src/components/admin/permissions/MobileTable.jsx delete mode 100644 web-ui-external-feedback/src/components/admin/permissions/MobileTable.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/admin/permissions/MobileTable.test.jsx delete mode 100644 web-ui-external-feedback/src/components/admin/permissions/Permissions.jsx delete mode 100644 web-ui-external-feedback/src/components/admin/permissions/__snapshots__/DesktopTable.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/admin/permissions/__snapshots__/MobileTable.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/admin/permissions/sample-data.js delete mode 100644 web-ui-external-feedback/src/components/admin/roles/RoleUserCards.jsx delete mode 100644 web-ui-external-feedback/src/components/admin/roles/Roles.css delete mode 100644 web-ui-external-feedback/src/components/admin/roles/Roles.jsx delete mode 100644 web-ui-external-feedback/src/components/admin/roles/Roles.test.jsx delete mode 100644 web-ui-external-feedback/src/components/admin/roles/__snapshots__/Roles.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/admin/users/Users.css delete mode 100644 web-ui-external-feedback/src/components/admin/users/Users.jsx delete mode 100644 web-ui-external-feedback/src/components/admin/users/Users.test.jsx delete mode 100644 web-ui-external-feedback/src/components/admin/users/__snapshots__/Users.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/agenda/Agenda.css delete mode 100644 web-ui-external-feedback/src/components/agenda/Agenda.jsx delete mode 100644 web-ui-external-feedback/src/components/agenda/Agenda.test.jsx delete mode 100644 web-ui-external-feedback/src/components/agenda/__snapshots__/Agenda.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/annual-review-report/AnnualReviewReport.jsx delete mode 100644 web-ui-external-feedback/src/components/avatar/Avatar.css delete mode 100644 web-ui-external-feedback/src/components/avatar/Avatar.jsx delete mode 100644 web-ui-external-feedback/src/components/avatar/Avatar.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/avatar/Avatar.test.jsx delete mode 100644 web-ui-external-feedback/src/components/avatar/__snapshots__/Avatar.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/celebrations/Anniversaries.css delete mode 100644 web-ui-external-feedback/src/components/celebrations/Anniversaries.jsx delete mode 100644 web-ui-external-feedback/src/components/celebrations/Anniversaries.test.jsx delete mode 100644 web-ui-external-feedback/src/components/celebrations/Birthdays.css delete mode 100644 web-ui-external-feedback/src/components/celebrations/Birthdays.jsx delete mode 100644 web-ui-external-feedback/src/components/celebrations/Birthdays.test.jsx delete mode 100644 web-ui-external-feedback/src/components/celebrations/MyAnniversary.css delete mode 100644 web-ui-external-feedback/src/components/celebrations/MyAnniversary.jsx delete mode 100644 web-ui-external-feedback/src/components/celebrations/MyAnniversary.test.jsx delete mode 100644 web-ui-external-feedback/src/components/celebrations/MyBirthday.css delete mode 100644 web-ui-external-feedback/src/components/celebrations/MyBirthday.jsx delete mode 100644 web-ui-external-feedback/src/components/celebrations/MyBirthday.test.jsx delete mode 100644 web-ui-external-feedback/src/components/celebrations/__snapshots__/Anniversaries.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/celebrations/__snapshots__/Birthdays.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/celebrations/__snapshots__/DoubleCelebration.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/celebrations/__snapshots__/MyAnniversary.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/celebrations/__snapshots__/MyBirthday.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/certifications/CertificationBadges.css delete mode 100644 web-ui-external-feedback/src/components/certifications/CertificationBadges.jsx delete mode 100644 web-ui-external-feedback/src/components/certifications/Certifications.css delete mode 100644 web-ui-external-feedback/src/components/certifications/Certifications.jsx delete mode 100644 web-ui-external-feedback/src/components/certifications/EarnedCertificationsTable.css delete mode 100644 web-ui-external-feedback/src/components/certifications/EarnedCertificationsTable.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/Checkin.css delete mode 100644 web-ui-external-feedback/src/components/checkin/CheckinCycle.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/CheckinCycle.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/CheckinCycle.test.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/CheckinHistory.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/CheckinHistory.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/CheckinHistory.test.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/CheckinProfile.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/CheckinProfile.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/CheckinProfile.test.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinCycle.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinHistory.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinProfile.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/checkin/checkin-cycle.png delete mode 100644 web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.css delete mode 100644 web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.test.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/documents/FileUploader.jsx delete mode 100644 web-ui-external-feedback/src/components/checkin/documents/__snapshots__/CheckinDocs.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/contribution_hours/ProgressBar.jsx delete mode 100644 web-ui-external-feedback/src/components/contribution_hours/ProgressBar.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/contribution_hours/ProgressBar.test.jsx delete mode 100644 web-ui-external-feedback/src/components/contribution_hours/__snapshots__/ProgressBar.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/date-picker-field/DatePickerField.css delete mode 100644 web-ui-external-feedback/src/components/date-picker-field/DatePickerField.jsx delete mode 100644 web-ui-external-feedback/src/components/dialogs/AlertDialog.jsx delete mode 100644 web-ui-external-feedback/src/components/dialogs/ConfirmationDialog.jsx delete mode 100644 web-ui-external-feedback/src/components/dialogs/OrganizationDialog.jsx delete mode 100644 web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.jsx delete mode 100644 web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.test.tsx delete mode 100644 web-ui-external-feedback/src/components/discrete_slider/__snapshots__/DiscreteSlider.test.tsx.snap delete mode 100644 web-ui-external-feedback/src/components/earned-certifications/EarnedCertificationBadges.css delete mode 100644 web-ui-external-feedback/src/components/earned-certifications/EarnedCertificationBadges.jsx delete mode 100644 web-ui-external-feedback/src/components/edit_skills/EditSkills.css delete mode 100644 web-ui-external-feedback/src/components/edit_skills/EditSkillsCard.jsx delete mode 100644 web-ui-external-feedback/src/components/edit_skills/EditSkillsCard.test.jsx delete mode 100644 web-ui-external-feedback/src/components/edit_skills/EditSkillsModal.jsx delete mode 100644 web-ui-external-feedback/src/components/edit_skills/__snapshots__/EditSkillsCard.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/expand-more/ExpandMore.jsx delete mode 100644 web-ui-external-feedback/src/components/expand-more/ExpandMore.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/expand-more/ExpandMore.test.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_date_selector/SelectDate.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_date_selector/SelectDate.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.css delete mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.test.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_card/__snapshots__/FeedbackExternalRecipientCard.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.css delete mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.test.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_external_recipient_selector/__snapshots__/FeedbackExternalRecipientSelector.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.css delete mode 100644 web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.test.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_recipient_card/__snapshots__/FeedbackRecipientCard.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.css delete mode 100644 web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.test.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_recipient_selector/__snapshots__/FeedbackRecipientSelector.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.css delete mode 100644 web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.test.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_request_card/__snapshots__/FeedbackRequestCard.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.css delete mode 100644 web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.test.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/__snapshots__/FeedbackRequestSubcard.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.css delete mode 100644 web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.test.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_request_confirmation/__snapshots__/FeedbackRequestConfirmation.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.css delete mode 100644 web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.test.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_submit_confirmation/__snapshots__/FeedbackSubmitConfirmation.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.css delete mode 100644 web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.test.jsx delete mode 100644 web-ui-external-feedback/src/components/feedback_template_selector/__snapshots__/FeedbackTemplateSelector.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/feelings/Feelings.jsx delete mode 100644 web-ui-external-feedback/src/components/feelings/Feelings.test.jsx delete mode 100644 web-ui-external-feedback/src/components/feelings/__snapshots__/Feelings.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/guides/GuideLink.css delete mode 100644 web-ui-external-feedback/src/components/guides/GuideLink.jsx delete mode 100644 web-ui-external-feedback/src/components/guides/GuideLink.test.jsx delete mode 100644 web-ui-external-feedback/src/components/guides/GuidesPanel.css delete mode 100644 web-ui-external-feedback/src/components/guides/GuidesPanel.jsx delete mode 100644 web-ui-external-feedback/src/components/guides/GuidesPanel.test.jsx delete mode 100644 web-ui-external-feedback/src/components/guides/PDLGuidesPanel.jsx delete mode 100644 web-ui-external-feedback/src/components/guides/PDLGuidesPanel.test.jsx delete mode 100644 web-ui-external-feedback/src/components/guides/__snapshots__/GuideLink.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/guides/__snapshots__/GuidesPanel.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/guides/__snapshots__/PDLGuidesPanel.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/guild-results/EditGuildModal.css delete mode 100644 web-ui-external-feedback/src/components/guild-results/EditGuildModal.jsx delete mode 100644 web-ui-external-feedback/src/components/guild-results/EditGuildModal.spec.jsx delete mode 100644 web-ui-external-feedback/src/components/guild-results/GuildResults.css delete mode 100644 web-ui-external-feedback/src/components/guild-results/GuildResults.jsx delete mode 100644 web-ui-external-feedback/src/components/guild-results/GuildResults.test.jsx delete mode 100644 web-ui-external-feedback/src/components/guild-results/GuildSummaryCard.jsx delete mode 100644 web-ui-external-feedback/src/components/guild-results/GuildSummaryCard.test.jsx delete mode 100644 web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildResults.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildSummaryCard.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildsActions.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/header/Header.css delete mode 100644 web-ui-external-feedback/src/components/header/Header.jsx delete mode 100644 web-ui-external-feedback/src/components/header/Header.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/header/Header.test.jsx delete mode 100644 web-ui-external-feedback/src/components/header/__snapshots__/Header.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/kudos/PublicKudos.css delete mode 100644 web-ui-external-feedback/src/components/kudos/PublicKudos.jsx delete mode 100644 web-ui-external-feedback/src/components/kudos/PublicKudosCard.css delete mode 100644 web-ui-external-feedback/src/components/kudos/PublicKudosCard.jsx delete mode 100644 web-ui-external-feedback/src/components/kudos_card/KudosCard.css delete mode 100644 web-ui-external-feedback/src/components/kudos_card/KudosCard.jsx delete mode 100644 web-ui-external-feedback/src/components/kudos_dialog/KudosDialog.css delete mode 100644 web-ui-external-feedback/src/components/kudos_dialog/KudosDialog.jsx delete mode 100644 web-ui-external-feedback/src/components/member-directory/AdminMemberCard.jsx delete mode 100644 web-ui-external-feedback/src/components/member-directory/MemberModal.css delete mode 100644 web-ui-external-feedback/src/components/member-directory/MemberModal.jsx delete mode 100644 web-ui-external-feedback/src/components/member-directory/MemberModal.test.jsx delete mode 100644 web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.css delete mode 100644 web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.jsx delete mode 100644 web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.test.jsx delete mode 100644 web-ui-external-feedback/src/components/member-directory/__snapshots__/MemberModal.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/member-directory/__snapshots__/MemberSummaryCard.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/member_selector/MemberSelector.css delete mode 100644 web-ui-external-feedback/src/components/member_selector/MemberSelector.jsx delete mode 100644 web-ui-external-feedback/src/components/member_selector/MemberSelector.test.jsx delete mode 100644 web-ui-external-feedback/src/components/member_selector/__snapshots__/MemberSelector.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.css delete mode 100644 web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.jsx delete mode 100644 web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.spec.jsx delete mode 100644 web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.test.jsx delete mode 100644 web-ui-external-feedback/src/components/member_selector/member_selector_dialog/__snapshots__/MemberSelectorDialog.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/member_skill_radar/MemberSkillRadar.jsx delete mode 100644 web-ui-external-feedback/src/components/member_skill_radar/RadarColors.jsx delete mode 100644 web-ui-external-feedback/src/components/menu/Menu.css delete mode 100644 web-ui-external-feedback/src/components/menu/Menu.jsx delete mode 100644 web-ui-external-feedback/src/components/menu/Menu.test.jsx delete mode 100644 web-ui-external-feedback/src/components/menu/__snapshots__/Menu.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/notes/Note.css delete mode 100644 web-ui-external-feedback/src/components/notes/Note.jsx delete mode 100644 web-ui-external-feedback/src/components/notes/Note.test.jsx delete mode 100644 web-ui-external-feedback/src/components/notes/__snapshots__/Note.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/opportunity/OpportunityCard.jsx delete mode 100644 web-ui-external-feedback/src/components/opportunity/OpportunityCard.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/opportunity/OpportunityCard.test.jsx delete mode 100644 web-ui-external-feedback/src/components/opportunity/__snapshots__/OpportunityCard.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/personnel/Personnel.css delete mode 100644 web-ui-external-feedback/src/components/personnel/Personnel.jsx delete mode 100644 web-ui-external-feedback/src/components/personnel/Personnel.test.jsx delete mode 100644 web-ui-external-feedback/src/components/personnel/__snapshots__/Personnel.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/private-note/PrivateNote.css delete mode 100644 web-ui-external-feedback/src/components/private-note/PrivateNote.jsx delete mode 100644 web-ui-external-feedback/src/components/private-note/PrivateNote.test.jsx delete mode 100644 web-ui-external-feedback/src/components/private-note/__snapshots__/PrivateNote.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/profile/Profile.css delete mode 100644 web-ui-external-feedback/src/components/profile/Profile.jsx delete mode 100644 web-ui-external-feedback/src/components/profile/Profile.test.jsx delete mode 100644 web-ui-external-feedback/src/components/profile/Search.css delete mode 100644 web-ui-external-feedback/src/components/profile/Search.jsx delete mode 100644 web-ui-external-feedback/src/components/profile/__snapshots__/Profile.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/pulse/Pulse.css delete mode 100644 web-ui-external-feedback/src/components/pulse/Pulse.jsx delete mode 100644 web-ui-external-feedback/src/components/pulse/Pulse.test.jsx delete mode 100644 web-ui-external-feedback/src/components/pulse/__snapshots__/Pulse.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/received_request_card/ReceivedRequestCard.css delete mode 100644 web-ui-external-feedback/src/components/received_request_card/ReceivedRequestCard.jsx delete mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/CheckinReport.css delete mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/CheckinReport.jsx delete mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/HorizontalLinearStepper.jsx delete mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/LinkSection.css delete mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/LinkSection.jsx delete mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/TeamMemberMap.css delete mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/TeamMemberMap.jsx delete mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/TeamMemberMap.test.jsx delete mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/checkin-utils.js delete mode 100644 web-ui-external-feedback/src/components/reports-section/checkin-report/checkin-utils.test.js delete mode 100644 web-ui-external-feedback/src/components/reviews/SelectUserModal.jsx delete mode 100644 web-ui-external-feedback/src/components/reviews/SelfReview.jsx delete mode 100644 web-ui-external-feedback/src/components/reviews/TeamReviews.css delete mode 100644 web-ui-external-feedback/src/components/reviews/TeamReviews.jsx delete mode 100644 web-ui-external-feedback/src/components/reviews/periods/ReviewPeriodCard.css delete mode 100644 web-ui-external-feedback/src/components/reviews/periods/ReviewPeriodCard.jsx delete mode 100644 web-ui-external-feedback/src/components/reviews/periods/ReviewPeriodStepper.jsx delete mode 100644 web-ui-external-feedback/src/components/reviews/periods/ReviewPeriodStepper.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/reviews/periods/ReviewPeriodStepper.test.jsx delete mode 100644 web-ui-external-feedback/src/components/reviews/periods/ReviewPeriods.jsx delete mode 100644 web-ui-external-feedback/src/components/reviews/periods/__snapshots__/ReviewPeriodStepper.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/reviews/periods/reviewStatus.json delete mode 100644 web-ui-external-feedback/src/components/search-results/SearchBirthdayAnniversaryResults.jsx delete mode 100644 web-ui-external-feedback/src/components/search-results/SearchResults.jsx delete mode 100644 web-ui-external-feedback/src/components/select-skills-dialog/SelectSkillsDialog.jsx delete mode 100644 web-ui-external-feedback/src/components/select-skills-dialog/SelectSkillsDialog.test.jsx delete mode 100644 web-ui-external-feedback/src/components/select-skills-dialog/__snapshots__/SelectSkillsDialog.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/sentiment_icon/SentimentIcon.css delete mode 100644 web-ui-external-feedback/src/components/sentiment_icon/SentimentIcon.jsx delete mode 100644 web-ui-external-feedback/src/components/sentiment_icon/SentimentIcon.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/sentiment_icon/SentimentIcon.test.jsx delete mode 100644 web-ui-external-feedback/src/components/sentiment_icon/__snapshots__/SentimentIcon.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/settings/index.js delete mode 100644 web-ui-external-feedback/src/components/settings/types/boolean.jsx delete mode 100644 web-ui-external-feedback/src/components/settings/types/boolean.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/settings/types/color.jsx delete mode 100644 web-ui-external-feedback/src/components/settings/types/color.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/settings/types/file.jsx delete mode 100644 web-ui-external-feedback/src/components/settings/types/file.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/settings/types/number.jsx delete mode 100644 web-ui-external-feedback/src/components/settings/types/number.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/settings/types/string.jsx delete mode 100644 web-ui-external-feedback/src/components/settings/types/string.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/skill-category-card/SkillCategoryCard.jsx delete mode 100644 web-ui-external-feedback/src/components/skill-category-card/SkillCategoryCard.test.jsx delete mode 100644 web-ui-external-feedback/src/components/skill-category-card/__snapshots__/SkillCategoryCard.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/skill-category-new-dialog/SkillCategoryNewDialog.jsx delete mode 100644 web-ui-external-feedback/src/components/skill-category-new-dialog/SkillCategoryNewDialog.test.jsx delete mode 100644 web-ui-external-feedback/src/components/skill-category-new-dialog/__snapshots__/SkillCategoryNewDialog.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/skills/SkillSection.css delete mode 100644 web-ui-external-feedback/src/components/skills/SkillSection.jsx delete mode 100644 web-ui-external-feedback/src/components/skills/SkillSlider.css delete mode 100644 web-ui-external-feedback/src/components/skills/SkillSlider.jsx delete mode 100644 web-ui-external-feedback/src/components/split-button/SplitButton.jsx delete mode 100644 web-ui-external-feedback/src/components/split-button/SplitButton.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/split-button/SplitButton.test.jsx delete mode 100644 web-ui-external-feedback/src/components/split-button/__snapshots__/SplitButton.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/team-member/MemberIcon.jsx delete mode 100644 web-ui-external-feedback/src/components/team-member/MemberIcon.test.jsx delete mode 100644 web-ui-external-feedback/src/components/team-member/TeamMember.css delete mode 100644 web-ui-external-feedback/src/components/team-member/TeamMemberContainer.jsx delete mode 100644 web-ui-external-feedback/src/components/team-member/TeamMemberContainer.test.jsx delete mode 100644 web-ui-external-feedback/src/components/team-member/TeamMemberSelect.css delete mode 100644 web-ui-external-feedback/src/components/team-member/TeamMemberSelect.jsx delete mode 100644 web-ui-external-feedback/src/components/team-member/TeamMemberSelect.test.jsx delete mode 100644 web-ui-external-feedback/src/components/team-member/__snapshots__/MemberIcon.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/team-member/__snapshots__/TeamMemberContainer.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/team-member/__snapshots__/TeamMemberSelect.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/team-results/EditTeamModal.css delete mode 100644 web-ui-external-feedback/src/components/team-results/EditTeamModal.jsx delete mode 100644 web-ui-external-feedback/src/components/team-results/EditTeamModal.spec.jsx delete mode 100644 web-ui-external-feedback/src/components/team-results/TeamResults.css delete mode 100644 web-ui-external-feedback/src/components/team-results/TeamResults.jsx delete mode 100644 web-ui-external-feedback/src/components/team-results/TeamResults.test.jsx delete mode 100644 web-ui-external-feedback/src/components/team-results/TeamSummaryCard.jsx delete mode 100644 web-ui-external-feedback/src/components/team-results/TeamSummaryCard.test.jsx delete mode 100644 web-ui-external-feedback/src/components/team-results/TeamsActions.jsx delete mode 100644 web-ui-external-feedback/src/components/team-results/TeamsActions.test.jsx delete mode 100644 web-ui-external-feedback/src/components/team-results/__snapshots__/TeamResults.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/team-results/__snapshots__/TeamSummaryCard.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/team-results/__snapshots__/TeamsActions.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/template-card/TemplateCard.css delete mode 100644 web-ui-external-feedback/src/components/template-card/TemplateCard.jsx delete mode 100644 web-ui-external-feedback/src/components/template-card/TemplateCard.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/template-card/TemplateCard.test.jsx delete mode 100644 web-ui-external-feedback/src/components/template-card/__snapshots__/TemplateCard.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/template-preview-modal/TemplatePreviewModal.css delete mode 100644 web-ui-external-feedback/src/components/template-preview-modal/TemplatePreviewModal.jsx delete mode 100644 web-ui-external-feedback/src/components/template-preview-modal/ad_hoc_creation_form/AdHocCreationForm.jsx delete mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/ViewFeedbackResponses.css delete mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/ViewFeedbackResponses.jsx delete mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/ViewFeedbackResponses.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/ViewFeedbackResponses.test.jsx delete mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/__snapshots__/ViewFeedbackResponses.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/feedback_response_card/FeedbackResponseCard.css delete mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/feedback_response_card/FeedbackResponseCard.jsx delete mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/feedback_response_card/FeedbackResponseCard.stories.jsx delete mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/feedback_response_card/FeedbackResponseCard.test.tsx delete mode 100644 web-ui-external-feedback/src/components/view_feedback_responses/feedback_response_card/__snapshots__/FeedbackResponseCard.test.tsx.snap delete mode 100644 web-ui-external-feedback/src/components/volunteer/Organizations.jsx delete mode 100644 web-ui-external-feedback/src/components/volunteer/VolunteerBadges.jsx delete mode 100644 web-ui-external-feedback/src/components/volunteer/VolunteerEvents.jsx delete mode 100644 web-ui-external-feedback/src/components/volunteer/VolunteerRelationships.jsx delete mode 100644 web-ui-external-feedback/src/components/volunteer/VolunteerTables.css delete mode 100644 web-ui-external-feedback/src/components/volunteer/VolunteerTables.jsx delete mode 100644 web-ui-external-feedback/src/pages/AnniversaryReportPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/AnniversaryReportPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/AnnualReviewReportPage.css delete mode 100644 web-ui-external-feedback/src/pages/AnnualReviewReportPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/BirthdayAnniversaryReportPage.css delete mode 100644 web-ui-external-feedback/src/pages/BirthdayReportPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/BirthdayReportPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/CertificationReportPage.css delete mode 100644 web-ui-external-feedback/src/pages/CertificationReportPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/CheckinsPage.css delete mode 100644 web-ui-external-feedback/src/pages/CheckinsPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/CheckinsPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/CheckinsReportPage.css delete mode 100644 web-ui-external-feedback/src/pages/CheckinsReportPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/EditPermissionsPage.css delete mode 100644 web-ui-external-feedback/src/pages/EditPermissionsPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/EditPermissionsPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/EditPermissionsPageRoles.jsx delete mode 100644 web-ui-external-feedback/src/pages/EditSkillsPage.css delete mode 100644 web-ui-external-feedback/src/pages/EditSkillsPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/EditSkillsPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/EmailPage.css delete mode 100644 web-ui-external-feedback/src/pages/EmailPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/FeedbackRequestPage.css delete mode 100644 web-ui-external-feedback/src/pages/FeedbackRequestPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/FeedbackRequestPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/GuildsPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/GuildsPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/HomePage.css delete mode 100644 web-ui-external-feedback/src/pages/HomePage.jsx delete mode 100644 web-ui-external-feedback/src/pages/HomePage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/KudosPage.css delete mode 100644 web-ui-external-feedback/src/pages/KudosPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/ManageKudosPage.css delete mode 100644 web-ui-external-feedback/src/pages/ManageKudosPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/MemberProfilePage.css delete mode 100644 web-ui-external-feedback/src/pages/MemberProfilePage.jsx delete mode 100644 web-ui-external-feedback/src/pages/MemberProfilePage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/MeritReportPage.css delete mode 100644 web-ui-external-feedback/src/pages/MeritReportPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/PeoplePage.css delete mode 100644 web-ui-external-feedback/src/pages/PeoplePage.jsx delete mode 100644 web-ui-external-feedback/src/pages/PeoplePage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/PermissionsPage.css delete mode 100644 web-ui-external-feedback/src/pages/PermissionsPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/PermissionsPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/ProfilePage.css delete mode 100644 web-ui-external-feedback/src/pages/ProfilePage.jsx delete mode 100644 web-ui-external-feedback/src/pages/PulsePage.css delete mode 100644 web-ui-external-feedback/src/pages/PulsePage.jsx delete mode 100644 web-ui-external-feedback/src/pages/PulsePage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/PulseReportPage.css delete mode 100644 web-ui-external-feedback/src/pages/PulseReportPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/PulseReportPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/ReceivedRequestsPage.css delete mode 100644 web-ui-external-feedback/src/pages/ReceivedRequestsPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/ReviewsPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/SelfReviewsPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/SelfReviewsPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/SettingsPage.css delete mode 100644 web-ui-external-feedback/src/pages/SettingsPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/SettingsPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/SkillCategoriesPage.css delete mode 100644 web-ui-external-feedback/src/pages/SkillCategoriesPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/SkillCategoriesPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/SkillCategoryEditPage.css delete mode 100644 web-ui-external-feedback/src/pages/SkillCategoryEditPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/SkillCategoryEditPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/SkillReportPage.css delete mode 100644 web-ui-external-feedback/src/pages/SkillReportPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/SkillReportPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/TeamSkillReportPage.css delete mode 100644 web-ui-external-feedback/src/pages/TeamSkillReportPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/TeamSkillReportPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/TeamsPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/ViewFeedbackPage.css delete mode 100644 web-ui-external-feedback/src/pages/ViewFeedbackPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/ViewFeedbackPage.test.jsx delete mode 100644 web-ui-external-feedback/src/pages/VolunteerReportPage.jsx delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/AnniversaryReportPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/BirthdayReportPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/CheckinsPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/DirectoryPage.test.js.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/EditPermissionsPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/EditSkillsPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/FeedbackRequestPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/GuildsPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/HomePage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/MemberProfilePage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/PeoplePage.test.js.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/PeoplePage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/PermissionsPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/PulsePage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/PulseReportPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/SelfReviewsPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/SettingsPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/SkillCategoriesPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/SkillCategoryEditPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/SkillReportPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/TeamSkillReportPage.test.jsx.snap delete mode 100644 web-ui-external-feedback/src/pages/__snapshots__/ViewFeedbackPage.test.jsx.snap diff --git a/web-ui-external-feedback/src/App.jsx b/web-ui-external-feedback/src/App.jsx index 1a3455debe..822ad53eb0 100644 --- a/web-ui-external-feedback/src/App.jsx +++ b/web-ui-external-feedback/src/App.jsx @@ -4,7 +4,6 @@ import { ErrorBoundary } from 'react-error-boundary'; import { createBrowserHistory } from 'history'; import Routes from './components/routes/Routes'; -import Menu from './components/menu/Menu'; import ErrorFallback from './pages/ErrorBoundaryPage'; import { AppContextProvider } from './context/AppContext'; import SnackBarWithContext from './components/snackbar/SnackBarWithContext'; diff --git a/web-ui-external-feedback/src/components/action_item/ActionItemsPanel.css b/web-ui-external-feedback/src/components/action_item/ActionItemsPanel.css deleted file mode 100644 index 4d03a28f54..0000000000 --- a/web-ui-external-feedback/src/components/action_item/ActionItemsPanel.css +++ /dev/null @@ -1,48 +0,0 @@ -.action-items-container { - height: fit-content; - margin: 0 auto; -} - -.add-action-item-div { - display: flex; - padding: 12px 8px; -} - -.action-items .description-field { - text-align: left; - width: 100%; - align-items: center; - display: flex; - flex-direction: row; -} - -.action-items-info { - text-align: left; - display: inline-block; - margin-bottom: 1px; - margin-top: 1px; -} - -.action-items .drag-icon { - display: flex; - align-items: center; -} - -.action-items .skeleton { - padding-right: 10px; - width: 100%; -} - -.action-items-container .skeleton-div { - display: flex; -} - -.action-item-button-div { - display: flex; - flex-direction: row; -} - -.action-items .text-input { - padding: 5px; - width: 100%; -} diff --git a/web-ui-external-feedback/src/components/action_item/ActionItemsPanel.jsx b/web-ui-external-feedback/src/components/action_item/ActionItemsPanel.jsx deleted file mode 100644 index 8ea5f2fbe9..0000000000 --- a/web-ui-external-feedback/src/components/action_item/ActionItemsPanel.jsx +++ /dev/null @@ -1,277 +0,0 @@ -import React, { useState, useEffect, useContext } from 'react'; -import { useParams } from 'react-router-dom'; -import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'; -import { - findActionItem, - deleteActionItem, - updateActionItem, - createActionItem -} from '../../api/actionitem.js'; -import { AppContext } from '../../context/AppContext'; -import { UPDATE_TOAST } from '../../context/actions'; -import { - selectCsrfToken, - selectCurrentUser, - selectCheckin -} from '../../context/selectors'; -import { debounce } from 'lodash/function'; -import DragIndicator from '@mui/icons-material/DragIndicator'; -import Skeleton from '@mui/material/Skeleton'; -import IconButton from '@mui/material/IconButton'; -import SaveIcon from '@mui/icons-material/Done'; -import RemoveIcon from '@mui/icons-material/Remove'; -import ArrowForwardIcon from '@mui/icons-material/ArrowForward'; -import Card from '@mui/material/Card'; -import CardHeader from '@mui/material/CardHeader'; -import CardContent from '@mui/material/CardContent'; - -import './ActionItemsPanel.css'; - -const doUpdate = async (actionItem, csrf) => { - if (actionItem && csrf) { - await updateActionItem(actionItem, csrf); - } -}; - -const updateItem = debounce(doUpdate, 1500); - -const ActionItemsPanel = () => { - const { state, dispatch } = useContext(AppContext); - const { checkinId } = useParams(); - const csrf = selectCsrfToken(state); - const memberProfile = selectCurrentUser(state); - const currentUserId = memberProfile?.id; - const currentCheckin = selectCheckin(state, checkinId); - - const [actionItems, setActionItems] = useState([]); - const [description, setDescription] = useState(''); - const [isLoading, setIsLoading] = useState(false); - - const getActionItems = async (checkinId, csrf) => { - setIsLoading(true); - let res = await findActionItem(checkinId, null, csrf); - let actionItemList; - if (res && res.payload) { - actionItemList = - res.payload.data && !res.error ? res.payload.data : undefined; - if (actionItemList) { - setActionItems(actionItemList); - } - } - setIsLoading(false); - }; - - const deleteItem = async (id, csrf) => { - if (id && csrf) { - await deleteActionItem(id, csrf); - } - }; - - const doUpdate = async (actionItem, csrf) => { - if (actionItem && csrf) { - await updateActionItem(actionItem, csrf); - } - }; - - useEffect(() => { - if (csrf) { - getActionItems(checkinId, csrf); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [checkinId, csrf]); - - const reorder = (list, startIndex, endIndex) => { - const [removed] = list.splice(startIndex, 1); - list.splice(endIndex, 0, removed); - }; - - const getItemStyle = (isDragging, draggableStyle) => ({ - display: 'flex', - background: isDragging ? 'lightgreen' : undefined, - ...draggableStyle - }); - - const onDragEnd = result => { - if (!result || !result.destination) { - return; - } - - const { index } = result.destination; - const sourceIndex = result.source.index; - if (index !== sourceIndex) { - const lastIndex = actionItems.length - 1; - const precedingPriority = - index === 0 ? 0 : actionItems[index - 1].priority; - const followingPriority = - index === lastIndex - ? actionItems[lastIndex].priority - : actionItems[index].priority; - - let newPriority = (precedingPriority + followingPriority) / 2; - if (actionItems[sourceIndex].priority <= followingPriority) { - newPriority += 1; - } - - setActionItems(actionItems => { - actionItems[sourceIndex].priority = newPriority; - reorder(actionItems, sourceIndex, index); - return actionItems; - }); - - doUpdate(actionItems[result.destination.index], csrf); - } - }; - - const makeActionItem = async () => { - if (!checkinId || !currentUserId || description === '' || !csrf) { - return; - } - let newActionItem = { - checkinid: checkinId, - createdbyid: currentUserId, - description: description - }; - const res = await createActionItem(newActionItem, csrf); - if (!res.error && res.payload && res.payload.data) { - newActionItem.id = res.payload.data.id; - newActionItem.priority = res.payload.data.priority; - setDescription(''); - setActionItems([...actionItems, newActionItem]); - } - }; - - const handleDescriptionChange = (index, e) => { - if (actionItems[index].createdbyid !== currentUserId) { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'Action Items can only be edited by creator' - } - }); - return; - } - const { value } = e.target; - actionItems[index].description = value; - setActionItems(() => { - updateItem(actionItems[index], csrf); - return [...actionItems]; - }); - }; - - const killActionItem = id => { - if (csrf) { - deleteItem(id, csrf); - let newItems = actionItems.filter(actionItem => { - return actionItem.id !== id; - }); - setActionItems(newItems); - } - }; - - const createActionItemEntries = () => { - if (actionItems && actionItems.length > 0) { - return actionItems.map((actionItem, index) => ( - - {(provided, snapshot) => ( -
    -
    - - - - {isLoading ? ( -
    - - - -
    - ) : ( - handleDescriptionChange(index, e)} - value={actionItem.description} - /> - )} -
    - killActionItem(actionItem.id)} - size="large" - > - - -
    -
    -
    - )} -
    - )); - } - }; - - return ( - - } - title="Action Items" - titleTypographyProps={{ variant: 'h5', component: 'h2' }} - /> - - - - {(provided, snapshot) => ( -
    - {createActionItemEntries()} - {provided.placeholder} -
    - )} -
    -
    -
    - setDescription(e.target.value)} - onKeyPress={e => { - if (e.key === 'Enter' && description !== '') { - makeActionItem(); - } - }} - value={description ? description : ''} - /> - makeActionItem()} - size="large" - > - - -
    -
    -
    - ); -}; - -export default ActionItemsPanel; diff --git a/web-ui-external-feedback/src/components/action_item/ActionItemsPanel.test.jsx b/web-ui-external-feedback/src/components/action_item/ActionItemsPanel.test.jsx deleted file mode 100644 index 5476f74548..0000000000 --- a/web-ui-external-feedback/src/components/action_item/ActionItemsPanel.test.jsx +++ /dev/null @@ -1,160 +0,0 @@ -import React from 'react'; -import { render } from '@testing-library/react'; -import ActionItemsPanel from './ActionItemsPanel'; -import { AppContextProvider } from '../../context/AppContext'; -import { http, HttpResponse } from 'msw'; -import { setupServer } from 'msw/node'; -import { createMemoryHistory } from 'history'; -import { Router } from 'react-router-dom'; - -const mockMemberId = '912834091823'; -const mockCheckinId = '837465917381'; - -const initialState = { - state: { - csrf: 'O_3eLX2-e05qpS_yOeg1ZVAs9nDhspEi', - userProfile: { - memberProfile: { - id: mockMemberId, - name: 'mr. test' - } - }, - checkins: [ - { - id: mockCheckinId, - completed: false - } - ], - guilds: [], - teams: [], - skills: [], - roles: [], - userRoles: [], - memberSkills: [], - memberProfiles: [] - } -}; - -const history = createMemoryHistory( - `/checkins/${mockMemberId}/${mockCheckinId}` -); - -vi.mock('react-router-dom', async () => ({ - ...(await vi.importActual('react-router-dom')), // use actual for all non-hook parts - useParams: () => ({ - memberId: mockMemberId, - checkinId: mockCheckinId - }), - useRouteMatch: () => ({ url: `/checkins/${mockMemberId}/${mockCheckinId}` }) -})); - -window.snackDispatch = vi.fn(); - -const actionItems = [ - { id: 'a1', description: 'first action item' }, - { id: 'a2', description: 'second action item' }, - { id: 'a3', description: 'third action item' } -]; - -const server = setupServer( - http.get('http://localhost:8080/services/member-profiles/current', () => { - return HttpResponse.json({ id: '12345', name: 'Test User' }); - }), - http.get('http://localhost:8080/services/teams/members', () => { - return HttpResponse.json([{ id: '12345', name: 'Test User' }]); - }), - http.get( - 'http://localhost:8080/services/action-items?checkinid=394810298371&createdbyid=912834091823', - () => { - return HttpResponse.json(actionItems); - } - ) -); - -beforeAll(() => server.listen()); -afterEach(() => server.resetHandlers()); -afterAll(() => server.close()); - -global.requestAnimationFrame = function (callback) { - setTimeout(callback, 0); -}; - -describe('ActionItemsPanel', () => { - it('renders correctly', () => { - snapshot( - - - - - - ); - }); - - // we tried making it work according to the example here but wasted too much time - // https://www.freecodecamp.org/news/how-to-write-better-tests-for-drag-and-drop-operations-in-the-browser-f9a131f0b281/ - it.skip('handles drag and drop', () => { - const checkinid = 'a1'; - const createdbyid = 'a2'; - const actionItems = [ - { - checkinid, - createdbyid, - description: 'stuff', - id: 'f2d929a4-887d-43d8-82b1-decf4bb64926', - priority: 1.5 - }, - { - checkinid, - createdbyid, - description: 'description', - id: '887d-43d8-82b1-decf4bb64926', - priority: 2.5 - } - ]; - const { container } = render( - - - - - - ); - - const createBubbledEvent = (type, props = {}) => { - const event = new Event(type, { bubbles: true }); - Object.assign(event, props); - return event; - }; - - let aic = container.querySelector('.action-items-container'); - expect(aic).not.toBeNull(); - let droppable = aic.firstChild; - let firstChild = droppable.firstChild; - let secondChild = firstChild.nextSibling; - - expect(firstChild).not.toBeNull(); - expect(secondChild).not.toBeNull(); - - const firstText = firstChild.querySelector('.text-input').value; - const secondText = secondChild.querySelector('.text-input').value; - - const dragHandle1 = firstChild.querySelector('span'); - - dragHandle1.dispatchEvent( - createBubbledEvent('dragstart', { - clientX: 0, - clientY: 0 - }) - ); - droppable.dispatchEvent( - createBubbledEvent('drop', { clientX: 0, clientY: 73 }) - ); - firstChild = droppable.firstChild; - secondChild = firstChild.nextSibling; - - const newFirstText = firstChild.querySelector('.text-input').value; - const newSecondText = secondChild.querySelector('.text-input').value; - - expect(newFirstText).toBe(secondText); - expect(newSecondText).toBe(firstText); - }); -}); diff --git a/web-ui-external-feedback/src/components/action_item/__snapshots__/ActionItemsPanel.test.jsx.snap b/web-ui-external-feedback/src/components/action_item/__snapshots__/ActionItemsPanel.test.jsx.snap deleted file mode 100644 index 640ad85d48..0000000000 --- a/web-ui-external-feedback/src/components/action_item/__snapshots__/ActionItemsPanel.test.jsx.snap +++ /dev/null @@ -1,76 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`ActionItemsPanel > renders correctly 1`] = ` -
    -
    -
    -
    - -
    -
    -

    - Action Items -

    -
    -
    -
    -
    -
    - - -
    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/admin/permissions/DesktopTable.jsx b/web-ui-external-feedback/src/components/admin/permissions/DesktopTable.jsx deleted file mode 100644 index 0fe5703c6b..0000000000 --- a/web-ui-external-feedback/src/components/admin/permissions/DesktopTable.jsx +++ /dev/null @@ -1,66 +0,0 @@ -import { - Paper, - Table, - TableBody, - TableCell, - TableRow, - TableHead, - TableContainer, - Checkbox -} from '@mui/material'; -import { styled } from '@mui/material/styles'; -import React from 'react'; - -const PREFIX = 'DesktopTable'; -const classes = { - table: `${PREFIX}-table` -}; - -const StyledTableContainer = styled(TableContainer)({ - [`& .${classes.table}`]: { - minWidth: 650 - } -}); - -export default function DesktopTable({ roles, allPermissions, handleChange }) { - return ( - - - - - Permissions - {roles.map(role => ( - - {role.name} - - ))} - - - - {allPermissions.map(permission => ( - - - {permission} - - {roles.map(role => ( - - handleChange(role, permission)} - inputProps={{ 'aria-label': 'primary checkbox' }} - /> - - ))} - - ))} - -
    -
    - ); -} diff --git a/web-ui-external-feedback/src/components/admin/permissions/DesktopTable.stories.jsx b/web-ui-external-feedback/src/components/admin/permissions/DesktopTable.stories.jsx deleted file mode 100644 index cb70373463..0000000000 --- a/web-ui-external-feedback/src/components/admin/permissions/DesktopTable.stories.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import { allPermissions, roles, handleChange } from './sample-data'; -import DesktopTable from './DesktopTable'; - -export default { - component: DesktopTable, - title: 'Check Ins/PermissionsTable(Desktop)' -}; - -const Template = args => { - return ; -}; - -const tableProps = { - roles: roles, - allPermissions: allPermissions, - handleChange: handleChange -}; - -export const PermissionsTableOnDesktop = Template.bind({}); -PermissionsTableOnDesktop.args = { - ...tableProps -}; diff --git a/web-ui-external-feedback/src/components/admin/permissions/DesktopTable.test.jsx b/web-ui-external-feedback/src/components/admin/permissions/DesktopTable.test.jsx deleted file mode 100644 index 19d6737449..0000000000 --- a/web-ui-external-feedback/src/components/admin/permissions/DesktopTable.test.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; -import renderer from 'react-test-renderer'; -import DesktopTable from './DesktopTable'; -import { roles, allPermissions, handleChange } from './sample-data'; - -describe('DesktopTable', () => { - it('renders correctly', () => { - snapshot( - - ); - }); -}); diff --git a/web-ui-external-feedback/src/components/admin/permissions/MobileTable.jsx b/web-ui-external-feedback/src/components/admin/permissions/MobileTable.jsx deleted file mode 100644 index 8413cbb807..0000000000 --- a/web-ui-external-feedback/src/components/admin/permissions/MobileTable.jsx +++ /dev/null @@ -1,135 +0,0 @@ -import { - Paper, - Table, - TableBody, - TableCell, - TableRow, - TableHead, - TableContainer, - Checkbox, - IconButton, - TextField -} from '@mui/material'; -import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos'; -import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos'; -import React, { useState } from 'react'; -import Autocomplete from '@mui/material/Autocomplete'; - -export default function MobileTable({ roles, allPermissions, handleChange }) { - const [roleIndex, setRoleIndex] = useState(0); - const [searchPermission, setSearchPermission] = useState(''); - - const selectedRole = roles[roleIndex]; - const matchedPermission = searchPermission - ? allPermissions.find(permission => permission === searchPermission) - : null; - - const nextRole = () => { - if (roleIndex !== roles.length - 1) { - setRoleIndex(prevIndex => prevIndex + 1); - } - }; - - const prevRole = () => { - if (roleIndex !== 0) { - setRoleIndex(prevIndex => prevIndex - 1); - } - }; - - return ( - - - - - - setSearchPermission(value)} - options={allPermissions} - getOptionLabel={option => option} - renderInput={params => ( - - )} - /> - - - - - - - - - - - - - - Permissions - - {selectedRole.name} - - - - - {matchedPermission ? ( - - - {matchedPermission} - - - handleChange(selectedRole, matchedPermission)} - inputProps={{ 'aria-label': 'primary checkbox' }} - /> - - - ) : ( - allPermissions.map(permission => ( - - - {permission} - - - handleChange(selectedRole, permission)} - inputProps={{ 'aria-label': 'primary checkbox' }} - /> - - - )) - )} - -
    -
    - ); -} diff --git a/web-ui-external-feedback/src/components/admin/permissions/MobileTable.stories.jsx b/web-ui-external-feedback/src/components/admin/permissions/MobileTable.stories.jsx deleted file mode 100644 index 8d813cafd0..0000000000 --- a/web-ui-external-feedback/src/components/admin/permissions/MobileTable.stories.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { allPermissions, roles, handleChange } from './sample-data'; -import PermissionsTableMobile from './MobileTable'; - -export default { - component: PermissionsTableMobile, - title: 'Check Ins/PermissionsTable(Mobile)' -}; - -const MobileTemplate = args => { - return ( -
    - -
    - ); -}; - -const tableProps = { - roles: roles, - allPermissions: allPermissions, - handleChange: handleChange -}; - -export const PermissionTableOnMobile = MobileTemplate.bind({}); -PermissionTableOnMobile.args = { - ...tableProps -}; diff --git a/web-ui-external-feedback/src/components/admin/permissions/MobileTable.test.jsx b/web-ui-external-feedback/src/components/admin/permissions/MobileTable.test.jsx deleted file mode 100644 index 53042908df..0000000000 --- a/web-ui-external-feedback/src/components/admin/permissions/MobileTable.test.jsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import MobileTable from './MobileTable'; -import { roles, allPermissions, handleChange } from './sample-data'; - -describe('MobileTable', () => { - it('renders correctly', () => { - snapshot( - - ); - }); -}); diff --git a/web-ui-external-feedback/src/components/admin/permissions/Permissions.jsx b/web-ui-external-feedback/src/components/admin/permissions/Permissions.jsx deleted file mode 100644 index 7148d85511..0000000000 --- a/web-ui-external-feedback/src/components/admin/permissions/Permissions.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import { useMediaQuery } from '@mui/material'; -import React from 'react'; -import DesktopTable from './DesktopTable'; -import MobileTable from './MobileTable'; - -export default function Permissions() { - const showDesktop = useMediaQuery('(min-width:650px)', { noSsr: true }); - - return
    {showDesktop ? : }
    ; -} diff --git a/web-ui-external-feedback/src/components/admin/permissions/__snapshots__/DesktopTable.test.jsx.snap b/web-ui-external-feedback/src/components/admin/permissions/__snapshots__/DesktopTable.test.jsx.snap deleted file mode 100644 index b661154118..0000000000 --- a/web-ui-external-feedback/src/components/admin/permissions/__snapshots__/DesktopTable.test.jsx.snap +++ /dev/null @@ -1,684 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`DesktopTable > renders correctly 1`] = ` -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - Permissions - - Admin - - PDL - - Team Lead - - Team Member -
    - View Action Items - - - - - - - - - - - - - - - - - - - - - - - - -
    - Edit Action Items - - - - - - - - - - - - - - - - - - - - - - - - -
    - Create Action Items - - - - - - - - - - - - - - - - - - - - - - - - -
    - Add Team Members - - - - - - - - - - - - - - - - - - - - - - - - -
    - Delete Team Members - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/admin/permissions/__snapshots__/MobileTable.test.jsx.snap b/web-ui-external-feedback/src/components/admin/permissions/__snapshots__/MobileTable.test.jsx.snap deleted file mode 100644 index 4cff4eb31d..0000000000 --- a/web-ui-external-feedback/src/components/admin/permissions/__snapshots__/MobileTable.test.jsx.snap +++ /dev/null @@ -1,366 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`MobileTable > renders correctly 1`] = ` -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    - -
    - -
    - -
    -
    -
    -
    - - -
    - Permissions - - Admin -
    - View Action Items - - - - - - -
    - Edit Action Items - - - - - - -
    - Create Action Items - - - - - - -
    - Add Team Members - - - - - - -
    - Delete Team Members - - - - - - -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/admin/permissions/sample-data.js b/web-ui-external-feedback/src/components/admin/permissions/sample-data.js deleted file mode 100644 index b2ce0acfd6..0000000000 --- a/web-ui-external-feedback/src/components/admin/permissions/sample-data.js +++ /dev/null @@ -1,52 +0,0 @@ -const allPermissions = [ - 'View Action Items', - 'Edit Action Items', - 'Create Action Items', - 'Add Team Members', - 'Delete Team Members' -]; - -const admin = { - id: 1, - name: 'Admin', - permissions: [ - 'View Action Items', - 'Edit Action Items', - 'Create Action Items', - 'Add Team Members', - 'Delete Team Members' - ] -}; - -const PDL = { - id: 2, - name: 'PDL', - permissions: [ - 'View Action Items', - 'Edit Action Items', - 'Create Action Items', - 'Add Team Members' - ] -}; - -const teamLead = { - id: 3, - name: 'Team Lead', - permissions: ['View Action Items', 'Add Team Members'] -}; - -const teamMembers = { - id: 4, - name: 'Team Member', - permissions: ['View Action Items'] -}; - -const roles = [admin, PDL, teamLead, teamMembers]; - -const handleChange = (role, permission) => { - alert(`toggle the permission titled "${permission}" for role: ${role.name}`); - console.log(role); - console.log(permission); -}; - -export { allPermissions, roles, handleChange }; diff --git a/web-ui-external-feedback/src/components/admin/roles/RoleUserCards.jsx b/web-ui-external-feedback/src/components/admin/roles/RoleUserCards.jsx deleted file mode 100644 index 5fe687f4dc..0000000000 --- a/web-ui-external-feedback/src/components/admin/roles/RoleUserCards.jsx +++ /dev/null @@ -1,59 +0,0 @@ -import React from 'react'; -import { getAvatarURL } from '../../../api/api.js'; - -import DeleteIcon from '@mui/icons-material/Delete'; -import { - Avatar, - Divider, - ListItem, - ListItemText, - ListItemAvatar, - Typography -} from '@mui/material'; - -const RoleUserCards = ({ roleMembers, onRemove, memberQuery }) => { - roleMembers?.sort((a, b) => a.name?.localeCompare(b.name) || -1); - return ( - roleMembers?.map( - member => - member && - (memberQuery && memberQuery.trim() - ? member.name.toLowerCase().includes(memberQuery.trim().toLowerCase()) - : true) && ( -
    - - - - - - {member.name} - - } - secondary={ - - {member.title} - - } - /> -
    onRemove(member)}> - -
    -
    - -
    - ) - ) || null - ); -}; - -export default RoleUserCards; diff --git a/web-ui-external-feedback/src/components/admin/roles/Roles.css b/web-ui-external-feedback/src/components/admin/roles/Roles.css deleted file mode 100644 index 079f0af32a..0000000000 --- a/web-ui-external-feedback/src/components/admin/roles/Roles.css +++ /dev/null @@ -1,169 +0,0 @@ -.role-header { - display: flex; - flex-direction: row; - align-items: center; - height: 100px; - justify-content: space-between; - padding: 0 1rem 0 1rem; -} - -.role-header-title { - width: 50%; -} - -.role-modal { - position: absolute; - min-width: 400px; - max-width: 600px; - background-color: var(--checkins-palette-background-default); - top: 50%; - left: 50%; - padding: 0.5rem; - transform: translate(-50%, -50%); - border: 2px solid var(--checkins-palette-background-default); -} - -.role-modal h2 { - margin-block-end: 0rem; - margin-left: 0.5rem; -} - -.role-modal-actions { - margin-top: 1rem; - width: calc(100% - 1rem); - display: flex; - flex-direction: row; - justify-content: flex-end; -} - -.role-modal .MuiTextField-root.fullWidth { - width: calc(100% - 1rem); -} - -.role-modal .MuiTextField-root.halfWidth { - width: calc(50% - 0.5rem); -} - -.role-modal .MuiTextField-root { - margin: 0.5rem; - width: 25ch; -} - -.roles-content { - margin-left: 1rem; - margin-right: 1rem; -} - -.roles-content .icon { - cursor: pointer; -} - -.roles-content .roles-list-item { - align-items: center; - padding-left: 2rem; - padding-right: 2rem; -} - -.roles-content .roles-search { - margin-bottom: 1rem; -} - -@media (max-width: 750px) { - .roles-content .roles { - display: block !important; - } - .roles-content .roles .role { - max-height: unset !important; - min-height: unset !important; - overflow: visible !important; - } - - .roles-content .roles .roles-bot { - display: block !important; - } -} - -.roles-content .roles .role { - height: 100%; - max-height: 40rem; - min-height: 40rem; - margin: 1rem; - overflow-y: scroll; -} - -.role-header-buttons { - display: flex; - flex-direction: row; -} - -.roles-content .roles .role-header-buttons .role-add { - cursor: pointer; - display: flex; - align-items: center; - margin-left: 0.5rem; -} - -.roles-content .roles .role-header-buttons .role-edit { - cursor: pointer; - display: flex; - align-items: center; - margin-left: 0.5rem; -} - -.roles-content .roles .role-header-buttons span { - margin-right: 0.5rem; -} - -.roles-content .roles .roles-bot { - display: grid; - grid-template-columns: 1fr 1fr; -} - -.roles-content .roles .roles-top { - display: flex; - justify-content: space-between; -} - -.roles-content .roles .roles-top .roles-top-left { - display: flex; -} -.roles-content .roles .roles-top .roles-top-right { - display: flex; -} - -.roles-content .roles .roles-top-search-fields { - display: flex; - flex-direction: row; - align-items: flex-start; - width: 100%; -} - -.roles-content .roles .roles-top-search-fields .role-select { - width: 50%; - margin-right: 2rem; -} - -.roles-content .roles .roles-top-search-fields .member-role-search { - width: 50%; -} - -@media screen and (max-width: 600px) { - .roles-content .roles .roles-top .roles-top-search-fields { - flex-direction: column; - } - - .roles-content .roles .roles-top .roles-top-search-fields .role-select { - width: 300px; - margin-top: 0; - margin-right: 0; - } - - .roles-content - .roles - .roles-top - .roles-top-search-fields - .member-role-search { - width: 300px; - margin-bottom: 1rem; - } -} diff --git a/web-ui-external-feedback/src/components/admin/roles/Roles.jsx b/web-ui-external-feedback/src/components/admin/roles/Roles.jsx deleted file mode 100644 index 10b720787d..0000000000 --- a/web-ui-external-feedback/src/components/admin/roles/Roles.jsx +++ /dev/null @@ -1,409 +0,0 @@ -import React, { useContext, useEffect, useState } from 'react'; - -import { AppContext } from '../../../context/AppContext'; -import { - SET_ROLES, - SET_USER_ROLES, - UPDATE_TOAST -} from '../../../context/actions'; -import { - addUserToRole, - addNewRole, - removeUserFromRole, - updateRole -} from '../../../api/roles'; -import { - selectHasRoleAssignmentPermission, - noPermission, -} from '../../../context/selectors'; -import RoleUserCards from './RoleUserCards'; - -import { - Button, - Card, - CardActions, - CardContent, - List, - ListSubheader, - Modal, - TextField, - Typography, - Autocomplete, - InputAdornment, - FormControl, - InputLabel, - Select, - OutlinedInput, - MenuItem, - Checkbox, - ListItemText, - FormHelperText, - Divider -} from '@mui/material'; -import AddIcon from '@mui/icons-material/Add'; -import EditIcon from '@mui/icons-material/Edit'; -import PersonAddIcon from '@mui/icons-material/PersonAdd'; -import SearchIcon from '@mui/icons-material/Search'; - -import { isArrayPresent } from '../../../helpers/checks'; -import { useQueryParameters } from '../../../helpers/query-parameters'; - -import './Roles.css'; - -const Roles = () => { - const { state, dispatch } = useContext(AppContext); - // roles here is all possible roles, not the selected roles. - const { csrf, memberProfiles, roles, userRoles } = state; - - const [showAddUser, setShowAddUser] = useState(false); - const [showEditRole, setShowEditRole] = useState(false); - const [editedRole, setEditedRole] = useState(null); - const [searchText, setSearchText] = useState(''); - const [selectedMember, setSelectedMember] = useState({}); - const [selectedRoles, setSelectedRoles] = useState([]); - const [roleToMemberMap, setRoleToMemberMap] = useState({}); - const [currentRole, setCurrentRole] = useState(''); - - memberProfiles?.sort((a, b) => a.name.localeCompare(b.name)); - - if (!roles) console.error('Roles.jsx: state.roles is not set!'); - const allRoles = roles?.map(r => r.role).sort() ?? []; - useQueryParameters([ - { - name: 'roles', - default: allRoles, - value: selectedRoles, - setter(value) { - setSelectedRoles(isArrayPresent(value) ? value.sort() : allRoles); - }, - toQP() { - return selectedRoles?.join(','); - } - }, - { - name: 'search', - default: '', - value: searchText, - setter: setSearchText - } - ]); - - useEffect(() => { - const memberMap = {}; - if (memberProfiles && memberProfiles.length > 0) { - for (const member of memberProfiles) { - memberMap[member.id] = member; - } - } - - const newRoleToMemberMap = {}; - for (const userRole of userRoles || []) { - const role = roles.find( - role => role.id === userRole?.memberRoleId?.roleId - ); - if (role) { - let memberList = newRoleToMemberMap[role.role]; - if (!memberList) { - memberList = newRoleToMemberMap[role.role] = []; - } - if (memberMap[userRole?.memberRoleId?.memberId] !== undefined) { - memberList.push({ - ...memberMap[userRole?.memberRoleId?.memberId], - roleId: role.id - }); - } - } - } - setRoleToMemberMap(newRoleToMemberMap); - }, [userRoles, memberProfiles, roles]); - - const getRoleStats = role => { - let members = roleToMemberMap[role]; - return isArrayPresent(members) ? members.length : 0; - }; - - const removeFromRole = async (member, role) => { - const members = roleToMemberMap[role]; - const { roleId } = members.find(m => member.id === m.id); - let res = await removeUserFromRole(roleId, member.id, csrf); - let data = - res.payload && res.payload.status === 200 && !res.error - ? res.payload - : null; - if (data) { - // TODO: Remove role from map.... - const filtered = userRoles.filter( - userRole => - userRole?.memberRoleId?.roleId !== roleId || - userRole?.memberRoleId?.memberId !== member.id - ); - dispatch({ - type: SET_USER_ROLES, - payload: filtered - }); - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'success', - toast: `${member.name} removed from ${role}s` - } - }); - } - }; - - const addToRole = async member => { - const role = roles.find(role => role.role === currentRole.role); - let res = await addUserToRole(role.id, member.id, csrf); - let data = - res.payload && res.payload.data && !res.error ? res.payload.data : null; - if (data) { - setShowAddUser(false); - dispatch({ - type: SET_USER_ROLES, - payload: [...userRoles, data] - }); - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'success', - toast: `${member.name} added to ${currentRole.role}s` - } - }); - } - setSelectedMember({}); - }; - - const saveRole = async role => { - let res = role.id - ? await updateRole(role, csrf) - : await addNewRole(role, csrf); - let data = - res.payload && res.payload.data && !res.error ? res.payload.data : null; - if (data) { - setShowEditRole(false); - const updatedRoles = [ - ...roles.filter(role => role?.id !== data.id), - data - ]; - dispatch({ - type: SET_ROLES, - payload: updatedRoles - }); - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'success', - toast: `Role Updated: ${role.role}` - } - }); - } - }; - - const closeAddUser = () => { - setShowAddUser(false); - }; - - const closeEditRole = () => { - setShowEditRole(false); - }; - - const setRoleName = event => { - setEditedRole({ ...editedRole, role: event?.target?.value }); - }; - - const setRoleDescription = event => { - setEditedRole({ ...editedRole, description: event?.target?.value }); - }; - - return selectHasRoleAssignmentPermission(state) ? ( -
    -
    -
    -
    -
    - - Roles - - {`Showing ${selectedRoles?.length}/${roles?.length} roles`} - - { - setSearchText(e.target.value); - }} - InputProps={{ - endAdornment: ( - - - - ) - }} - /> -
    -
    -
    - -
    -
    - -
    - { - return !roleToMemberMap[currentRole.role]?.find( - m => m.id === member.id - ); - }) || [] - } - value={selectedMember} - onChange={(event, newValue) => setSelectedMember(newValue)} - getOptionLabel={option => option.name || ''} - renderInput={params => ( - - )} - /> - -
    -
    -
    - {roles?.map(roleObj => - selectedRoles?.includes(roleObj.role) ? ( - - - -
    - -
    -
    - {roleObj.role} - - {roleObj.description || ''} - - - {getRoleStats(roleObj.role)} Users - -
    -
    - - -
    -
    - -
    - - removeFromRole(member, roleObj.role) - } - memberQuery={searchText} - /> -
    -
    -
    - - -
    - - - -
    -
    -
    -
    - ) : null - )} -
    -
    -
    - ) : ( -

    {noPermission}

    - ); -}; - -export default Roles; diff --git a/web-ui-external-feedback/src/components/admin/roles/Roles.test.jsx b/web-ui-external-feedback/src/components/admin/roles/Roles.test.jsx deleted file mode 100644 index 6455c50aeb..0000000000 --- a/web-ui-external-feedback/src/components/admin/roles/Roles.test.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; -import Roles from './Roles'; -import { AppContextProvider } from '../../../context/AppContext'; - -const initialState = { - state: { - memberProfiles: [ - { id: 1, name: 'Señior Test' }, - { id: 2, name: 'Señora Test' }, - { id: 3, name: 'Herr Test' } - ], - roles: [ - { id: 1, role: 'ADMIN', memberid: 1 }, - { id: 2, role: 'PDL', memberid: 2 } - ], - userProfile: { - name: 'Current User', - role: ['MEMBER'], - permissions: [{ permission: 'CAN_ASSIGN_ROLE_PERMISSIONS' }], - }, - } -}; - -it('renders correctly', () => { - snapshot( - - - - ); -}); - -it('renders an error if user does not have appropriate permission', () => { - snapshot( - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/admin/roles/__snapshots__/Roles.test.jsx.snap b/web-ui-external-feedback/src/components/admin/roles/__snapshots__/Roles.test.jsx.snap deleted file mode 100644 index 024be00164..0000000000 --- a/web-ui-external-feedback/src/components/admin/roles/__snapshots__/Roles.test.jsx.snap +++ /dev/null @@ -1,368 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders an error if user does not have appropriate permission 1`] = ` -
    -

    - You do not have permission to view this page. -

    -
    -`; - -exports[`renders correctly 1`] = ` -
    -
    -
    -
    -
    -
    -
    - -
    - - - - -
    -

    - Showing 2/2 roles -

    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -
      -
      -
    • -
      -
      -

      - ADMIN -

      -
      -
      - 0 - Users -
      -
      -
      - - -
      -
      -
      -
    • -
      -
    -
    -
    -
    -
    -
    -
      -
      -
    • -
      -
      -

      - PDL -

      -
      -
      - 0 - Users -
      -
      -
      - - -
      -
      -
      -
    • -
      -
    -
    -
    -
    -
    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/admin/users/Users.css b/web-ui-external-feedback/src/components/admin/users/Users.css deleted file mode 100644 index 0068926379..0000000000 --- a/web-ui-external-feedback/src/components/admin/users/Users.css +++ /dev/null @@ -1,9 +0,0 @@ -.add-member { - align-items: center; - display: flex; - justify-content: flex-end; -} - -.user-page { - padding: 12px; -} diff --git a/web-ui-external-feedback/src/components/admin/users/Users.jsx b/web-ui-external-feedback/src/components/admin/users/Users.jsx deleted file mode 100644 index e55ffc8d1b..0000000000 --- a/web-ui-external-feedback/src/components/admin/users/Users.jsx +++ /dev/null @@ -1,215 +0,0 @@ -import fileDownload from 'js-file-download'; -import React, { useContext, useState } from 'react'; - -import DownloadIcon from '@mui/icons-material/FileDownload'; -import PersonIcon from '@mui/icons-material/Person'; -import { Button, Grid, TextField } from '@mui/material'; -import { styled } from '@mui/material/styles'; - -import AdminMemberCard from '../../member-directory/AdminMemberCard'; -import MemberModal from '../../member-directory/MemberModal'; -import { - createMember, - reportAllMembersCsv -} from '../../../api/member'; -import { AppContext } from '../../../context/AppContext'; -import { UPDATE_MEMBER_PROFILES, UPDATE_TOAST } from '../../../context/actions'; -import { - selectHasProfileReportPermission, - selectNormalizedMembers, - selectNormalizedMembersAdmin, - selectHasCreateMembersPermission, -} from '../../../context/selectors'; -import { useQueryParameters } from '../../../helpers/query-parameters'; - -import './Users.css'; - -const PREFIX = 'Users'; -const classes = { - page: `${PREFIX}-page`, - search: `${PREFIX}-search`, - searchInput: `${PREFIX}-searchInput`, - members: `${PREFIX}-members` -}; - -const Root = styled('div')({ - '& .MuiGrid-spacing-xs-3 > .MuiGrid-item': { - padding: '12px' - }, - '& .MuiGrid-root.MuiGrid-container': { - width: 'calc(100% + 24px)', - margin: '-12px' - }, - [`& .${classes.search}`]: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center' - }, - [`& .${classes.searchInput}`]: { - width: '20em' - }, - [`& .${classes.members}`]: { - display: 'flex', - flexWrap: 'wrap', - justifyContent: 'space-evenly', - width: '100%' - } -}); - -const Users = () => { - const { state, dispatch } = useContext(AppContext); - const { csrf, memberProfiles, userProfile } = state; - const [open, setOpen] = useState(false); - const [searchText, setSearchText] = useState(''); - const [includeTerminated, setIncludeTerminated] = useState(false); - const handleIncludeTerminated = () => { - setIncludeTerminated(!includeTerminated); - }; - - const isAdmin = - userProfile && userProfile.role && userProfile.role.includes('ADMIN'); - - const normalizedMembers = - isAdmin && includeTerminated - ? selectNormalizedMembersAdmin(state, searchText) - : selectNormalizedMembers(state, searchText); - - useQueryParameters([ - { - name: 'addUser', - default: false, - value: open, - setter: setOpen - }, - { - name: 'includeTerminated', - default: false, - value: includeTerminated, - setter: setIncludeTerminated - }, - { - name: 'search', - default: '', - value: searchText, - setter: setSearchText - } - ]); - - const handleOpen = () => setOpen(true); - - const handleClose = () => setOpen(false); - - const createMemberCards = normalizedMembers.map((member, index) => { - return ( - - ); - }); - - const downloadMembers = async () => { - let res = await reportAllMembersCsv(csrf); - if (res?.error) { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'Hmm...Something went wrong.' - } - }); - } else { - fileDownload(res?.payload?.data, 'members.csv'); - - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'success', - toast: `Member export has been saved!` - } - }); - } - }; - - return ( - -
    - - - { - setSearchText(e.target.value); - }} - /> - {selectHasCreateMembersPermission(state) && ( -
    - - {selectHasProfileReportPermission(state) && ( - - )} - - { - if ( - member.location && - member.firstName && - member.lastName && - member.startDate && - member.title && - member.workEmail && - csrf - ) { - const res = await createMember(member, csrf); - const data = - res.payload?.data && !res.error - ? res.payload.data - : null; - if (data) { - dispatch({ - type: UPDATE_MEMBER_PROFILES, - payload: [...memberProfiles, data] - }); - } - handleClose(); - } - }} - /> -
    - )} -
    -
    - - -
    - - {createMemberCards} - -
    -
    -
    - ); -}; - -export default Users; diff --git a/web-ui-external-feedback/src/components/admin/users/Users.test.jsx b/web-ui-external-feedback/src/components/admin/users/Users.test.jsx deleted file mode 100644 index 14517db027..0000000000 --- a/web-ui-external-feedback/src/components/admin/users/Users.test.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import Users from './Users'; -import { AppContextProvider } from '../../../context/AppContext'; -import { createMemoryHistory } from 'history'; -import { Router } from 'react-router-dom'; - -const history = createMemoryHistory(`/people`); - -const currentUserProfile = { - id: 9876, - pdlId: 8765, - name: 'Current User', - firstName: 'Current', - lastName: 'User' -}; - -const initialState = { - state: { - csrf: 'O_3eLX2-e05qpS_yOeg1ZVAs9nDhspEi', - userProfile: { - name: 'Current User', - firstName: 'Current', - lastName: 'User', - role: ['MEMBER'], - imageUrl: - 'https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg', - memberProfile: currentUserProfile - }, - checkins: [], - guilds: [], - teams: [], - skills: [], - roles: [], - userRoles: [], - memberSkills: [], - index: 0, - memberProfiles: [currentUserProfile] - } -}; - -it('renders correctly', () => { - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/admin/users/__snapshots__/Users.test.jsx.snap b/web-ui-external-feedback/src/components/admin/users/__snapshots__/Users.test.jsx.snap deleted file mode 100644 index ff20f1d3fa..0000000000 --- a/web-ui-external-feedback/src/components/admin/users/__snapshots__/Users.test.jsx.snap +++ /dev/null @@ -1,146 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    -
    -
    - -
    - - -
    - -
    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/agenda/Agenda.css b/web-ui-external-feedback/src/components/agenda/Agenda.css deleted file mode 100644 index 53efb658cb..0000000000 --- a/web-ui-external-feedback/src/components/agenda/Agenda.css +++ /dev/null @@ -1,48 +0,0 @@ -.agenda-items-container { - height: fit-content; - margin: 0 auto; -} - -.add-agenda-item-div { - display: flex; - padding: 12px 8px; -} - -.agenda-items .description-field { - text-align: left; - width: 100%; - align-items: center; - display: flex; - flex-direction: row; -} - -.agenda-items-info { - text-align: left; - display: inline-block; - margin-bottom: 1px; - margin-top: 1px; -} - -.agenda-items .drag-icon { - display: flex; - align-items: center; -} - -.agenda-items .skeleton { - padding-right: 10px; - width: 100%; -} - -.agenda-items-container .skeleton-div { - display: flex; -} - -.agenda-item-button-div { - display: flex; - flex-direction: row; -} - -.agenda-items .text-input { - padding: 5px; - width: 100%; -} diff --git a/web-ui-external-feedback/src/components/agenda/Agenda.jsx b/web-ui-external-feedback/src/components/agenda/Agenda.jsx deleted file mode 100644 index e005b9bf02..0000000000 --- a/web-ui-external-feedback/src/components/agenda/Agenda.jsx +++ /dev/null @@ -1,275 +0,0 @@ -import React, { useContext, useState, useEffect } from 'react'; -import { useParams } from 'react-router-dom'; -import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'; -import { - getAgendaItem, - deleteAgendaItem, - updateAgendaItem, - createAgendaItem -} from '../../api/agenda.js'; -import { AppContext } from '../../context/AppContext'; -import { UPDATE_TOAST } from '../../context/actions'; -import { - selectCsrfToken, - selectCurrentUser, - selectCheckin -} from '../../context/selectors'; -import { debounce } from 'lodash/function'; -import DragIndicator from '@mui/icons-material/DragIndicator'; -import AdjustIcon from '@mui/icons-material/Adjust'; -import Skeleton from '@mui/material/Skeleton'; -import IconButton from '@mui/material/IconButton'; -import SaveIcon from '@mui/icons-material/Done'; -import RemoveIcon from '@mui/icons-material/Remove'; -import Card from '@mui/material/Card'; -import CardHeader from '@mui/material/CardHeader'; -import CardContent from '@mui/material/CardContent'; - -import './Agenda.css'; - -const doUpdate = async (agendaItem, csrf) => { - if (agendaItem && csrf) { - await updateAgendaItem(agendaItem, csrf); - } -}; - -const updateItem = debounce(doUpdate, 1500); - -const AgendaItems = () => { - const { state, dispatch } = useContext(AppContext); - const { checkinId } = useParams(); - const csrf = selectCsrfToken(state); - const memberProfile = selectCurrentUser(state); - const currentUserId = memberProfile?.id; - const currentCheckin = selectCheckin(state, checkinId); - - const [agendaItems, setAgendaItems] = useState(); - const [description, setDescription] = useState(''); - const [isLoading, setIsLoading] = useState(false); - - const getAgendaItems = async (checkinId, csrf) => { - setIsLoading(true); - let res = await getAgendaItem(checkinId, null, csrf); - let agendaItemList; - if (res && res.payload) { - agendaItemList = - res.payload.data && !res.error ? res.payload.data : undefined; - if (agendaItemList) { - agendaItemList.sort((a, b) => { - return a.priority - b.priority; - }); - setAgendaItems(agendaItemList); - } - } - setIsLoading(false); - }; - - const deleteItem = async (id, csrf) => { - if (id && csrf) { - await deleteAgendaItem(id, csrf); - } - }; - - useEffect(() => { - if (csrf) { - getAgendaItems(checkinId, csrf); - } - }, [checkinId, csrf]); - - const reorder = (list, startIndex, endIndex) => { - const [removed] = list.splice(startIndex, 1); - list.splice(endIndex, 0, removed); - }; - - const getItemStyle = (isDragging, draggableStyle) => ({ - display: 'flex', - background: isDragging ? 'lightgreen' : undefined, - ...draggableStyle - }); - - const onDragEnd = result => { - if (!result || !result.destination) { - return; - } - - const { index } = result.destination; - const sourceIndex = result.source.index; - if (index !== sourceIndex) { - const lastIndex = agendaItems.length - 1; - const precedingPriority = - index === 0 ? 0 : agendaItems[index - 1].priority; - const followingPriority = - index === lastIndex - ? agendaItems[lastIndex].priority + 1 - : agendaItems[index].priority; - - let newPriority = (precedingPriority + followingPriority) / 2; - if (agendaItems[sourceIndex].priority <= followingPriority) { - newPriority += 1; - } - - setAgendaItems(agendaItems => { - agendaItems[sourceIndex].priority = newPriority; - reorder(agendaItems, sourceIndex, index); - return agendaItems; - }); - - doUpdate(agendaItems[result.destination.index], csrf); - } - }; - - const makeAgendaItem = async () => { - if (!checkinId || !currentUserId || description === '' || !csrf) { - return; - } - let newAgendaItem = { - checkinid: checkinId, - createdbyid: currentUserId, - description: description - }; - const res = await createAgendaItem(newAgendaItem, csrf); - if (!res.error && res.payload && res.payload.data) { - newAgendaItem.id = res.payload.data.id; - newAgendaItem.priority = res.payload.data.priority; - setDescription(''); - setAgendaItems([...agendaItems, newAgendaItem]); - } - }; - - const killAgendaItem = id => { - if (csrf) { - deleteItem(id, csrf); - let newItems = agendaItems.filter(agendaItem => { - return agendaItem.id !== id; - }); - setAgendaItems(newItems); - } - }; - - const handleDescriptionChange = (index, e) => { - if (agendaItems[index].createdbyid !== currentUserId) { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'Agenda Items can only be edited by creator' - } - }); - return; - } - const { value } = e.target; - agendaItems[index].description = value; - setAgendaItems(() => { - if (csrf) { - updateItem(agendaItems[index], csrf); - return [...agendaItems]; - } - }); - }; - - const createAgendaItemEntries = () => { - if (agendaItems && agendaItems.length > 0) { - return agendaItems.map((agendaItem, index) => ( - - {(provided, snapshot) => ( -
    -
    - - - - {isLoading ? ( -
    - - - -
    - ) : ( - handleDescriptionChange(index, e)} - value={agendaItem.description} - /> - )} -
    - killAgendaItem(agendaItem.id)} - size="large" - > - - -
    -
    -
    - )} -
    - )); - } - }; - - return ( - - } - title="Agenda Items" - titleTypographyProps={{ variant: 'h5', component: 'h2' }} - /> - - - - {(provided, snapshot) => ( -
    - {createAgendaItemEntries()} - {provided.placeholder} -
    - )} -
    -
    -
    - setDescription(e.target.value)} - onKeyPress={e => { - if (e.key === 'Enter' && description !== '') { - makeAgendaItem(); - } - }} - value={description ? description : ''} - /> - makeAgendaItem()} - size="large" - > - - -
    -
    -
    - ); -}; - -export default AgendaItems; diff --git a/web-ui-external-feedback/src/components/agenda/Agenda.test.jsx b/web-ui-external-feedback/src/components/agenda/Agenda.test.jsx deleted file mode 100644 index a191185222..0000000000 --- a/web-ui-external-feedback/src/components/agenda/Agenda.test.jsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react'; -import Agenda from './Agenda'; -import { AppContextProvider } from '../../context/AppContext'; -import { createMemoryHistory } from 'history'; -import { Router } from 'react-router-dom'; - -const mockMemberId = '912834091823'; -const mockCheckinId = '837465917381'; - -const initialState = { - state: { - userProfile: { - memberProfile: { - id: mockMemberId - } - }, - checkins: [ - { - id: mockCheckinId, - completed: false - } - ] - } -}; - -const history = createMemoryHistory( - `/checkins/${mockMemberId}/${mockCheckinId}` -); - -vi.mock('react-router-dom', async () => ({ - ...(await vi.importActual('react-router-dom')), // use actual for all non-hook parts - useParams: () => ({ - memberId: mockMemberId, - checkinId: mockCheckinId - }), - useRouteMatch: () => ({ url: `/checkins/${mockMemberId}/${mockCheckinId}` }) -})); - -global.requestAnimationFrame = function (callback) { - setTimeout(callback, 0); -}; - -describe('Agenda', () => { - it('renders correctly', () => { - snapshot( - - - - - - ); - }); -}); diff --git a/web-ui-external-feedback/src/components/agenda/__snapshots__/Agenda.test.jsx.snap b/web-ui-external-feedback/src/components/agenda/__snapshots__/Agenda.test.jsx.snap deleted file mode 100644 index 3f123d37fa..0000000000 --- a/web-ui-external-feedback/src/components/agenda/__snapshots__/Agenda.test.jsx.snap +++ /dev/null @@ -1,76 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Agenda > renders correctly 1`] = ` -
    -
    -
    -
    - -
    -
    -

    - Agenda Items -

    -
    -
    -
    -
    -
    - - -
    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/annual-review-report/AnnualReviewReport.jsx b/web-ui-external-feedback/src/components/annual-review-report/AnnualReviewReport.jsx deleted file mode 100644 index b7c40beac1..0000000000 --- a/web-ui-external-feedback/src/components/annual-review-report/AnnualReviewReport.jsx +++ /dev/null @@ -1,316 +0,0 @@ -import React, { useContext, useEffect, useState } from 'react'; - -import { getAvatarURL } from '../../api/api.js'; -import { AppContext } from '../../context/AppContext'; -import { selectProfile } from '../../context/selectors'; -import { getFeedbackRequestsByRequestee } from '../../api/feedback.js'; -import { getFeedbackTemplateWithQuestions } from '../../api/feedbacktemplate.js'; -import { getAnswersFromRequest } from '../../api/feedbackanswer'; -import DateFnsAdapter from '@date-io/date-fns'; -import { - Avatar, - Card, - CardHeader, - CardContent, - Typography, - List, - ListItem, - Grid -} from '@mui/material'; -import { styled } from '@mui/material/styles'; - -const dateFns = new DateFnsAdapter(); - -const PREFIX = 'FeedbackRequestSubcard'; -const classes = { - redTypography: `${PREFIX}-redTypography`, - yellowTypography: `${PREFIX}-yellowTypography`, - greenTypography: `${PREFIX}-greenTypography`, - darkGrayTypography: `${PREFIX}-darkGrayTypography` -}; - -// TODO jss-to-styled codemod: The Fragment root was replaced by div. Change the tag if needed. -const Root = styled('div')({ - marginBottom: '1em', - [`& .${classes.redTypography}`]: { - color: '#FF0000', - marginRight: '1em' - }, - [`& .${classes.yellowTypography}`]: { - color: '#EE8C00', - marginRight: '1em' - }, - [`& .${classes.greenTypography}`]: { - color: '#006400', - marginRight: '1em' - }, - [`& .${classes.darkGrayTypography}`]: { - color: '#333333', - marginRight: '1em' - } -}); - -const Submitted = ({ submitDate, dueDate }) => { - if (dueDate) { - let today = new Date(); - let due = new Date(dueDate); - if (!submitDate && today > due) { - return Overdue; - } - } - if (submitDate) { - return ( - - Submitted - - {dateFns.format(new Date(submitDate.join('/')), 'LLLL dd, yyyy')} - - - ); - } else - return ( - - Not Submitted - - ); -}; - -const QuestionResponse = ({ - fromProfile, - responseText, - submitDate, - dueDate -}) => ( - - - - - - - - {fromProfile?.name} - - {fromProfile?.title} - - - - - - - {responseText} - - - - -); - -const findRequestById = (requests, requestId) => - requests?.find(request => request.id === requestId); - -const QuestionResults = ({ question, responses, requests }) => { - const { state } = useContext(AppContext); - return ( - - {question.question} - {responses?.map(response => { - const request = findRequestById(requests, response.requestId); - const fromProfile = selectProfile(state, request?.recipientId); - return ( - - ); - })} - - ); -}; - -const FeedbackTemplateResults = ({ - includeUnsubmitted, - template, - requests, - answers, - state -}) => ( - -

    {template?.title}

    - {includeUnsubmitted && - requests - .filter(request => request.status !== 'submitted') - .map(request => { - const fromProfile = selectProfile(state, request?.recipientId); - const submitDate = request?.submitDate; - const dueDate = request?.dueDate; - return ( - - - - - - - {fromProfile?.name} - - - {fromProfile?.title} - - - - - - - ); - })} - {template?.questions?.map(question => ( - - ))} -
    -); - -const AnnualReviewReport = ({ userId, includeUnsubmitted }) => { - const { state } = useContext(AppContext); - const { csrf } = state; - const [feedbackRequests, setFeedbackRequests] = useState([]); - const [templateRequestMap, setTemplateRequestMap] = useState({}); - const [templatesMap, setTemplatesMap] = useState({}); - const [answers, setAnswers] = useState({}); - - const userProfile = selectProfile(state, userId); - - useEffect(() => { - const loadRequests = async () => { - const res = await getFeedbackRequestsByRequestee(userId, null, csrf); - let feedbackRequests = - res.payload && res.payload.data && !res.error ? res.payload.data : []; - if (!includeUnsubmitted) { - feedbackRequests = feedbackRequests.filter( - request => request.status === 'submitted' - ); - } - setFeedbackRequests(feedbackRequests); - }; - - if (csrf && userId) { - loadRequests(); - } - }, [userId, includeUnsubmitted, csrf]); - - useEffect(() => { - const newRequestMap = {}; - for (let i = 0; i < feedbackRequests.length; i++) { - if (!newRequestMap[feedbackRequests[i].templateId]) { - newRequestMap[feedbackRequests[i].templateId] = []; - } - newRequestMap[feedbackRequests[i].templateId].push(feedbackRequests[i]); - } - - setTemplateRequestMap(newRequestMap); - }, [feedbackRequests]); - - useEffect(() => { - const refreshAnswers = async () => { - const requests = []; - feedbackRequests.forEach(feedbackRequest => - requests.push(getAnswersFromRequest(feedbackRequest.id)) - ); - const answers = await Promise.all(requests); - setAnswers( - answers.reduce((answerMap, res) => { - const questionAnswers = - res.payload && res.payload.data && !res.error - ? res.payload.data - : null; - questionAnswers?.forEach(answer => { - answerMap[answer.questionId] = answerMap[answer.questionId] - ? answerMap[answer.questionId] - : []; - answerMap[answer.questionId].push(answer); - }); - - return answerMap; - }, {}) - ); - }; - if (csrf && feedbackRequests && feedbackRequests.length > 0) { - refreshAnswers(); - } - }, [csrf, feedbackRequests]); - - useEffect(() => { - const refreshTemplates = async templateIds => { - const requests = []; - templateIds.forEach(templateId => - requests.push(getFeedbackTemplateWithQuestions(templateId)) - ); - const templates = await Promise.all(requests); - setTemplatesMap( - templates.reduce((templates, template) => { - templates[template.id] = template; - return templates; - }, {}) - ); - }; - const templateIds = Object.keys(templateRequestMap); - if (csrf && templateIds && templateIds.length > 0) { - refreshTemplates(templateIds); - } - }, [templateRequestMap, csrf]); - - return ( - - - {userProfile?.name} - - } - subheader={ - - {userProfile?.title} - - } - disableTypography - avatar={ - - } - /> - - - {Object.entries(templateRequestMap).map( - ([templateId, feedbackRequests]) => ( - - - - ) - )} - - - - ); -}; -export default AnnualReviewReport; diff --git a/web-ui-external-feedback/src/components/avatar/Avatar.css b/web-ui-external-feedback/src/components/avatar/Avatar.css deleted file mode 100644 index 919ed30252..0000000000 --- a/web-ui-external-feedback/src/components/avatar/Avatar.css +++ /dev/null @@ -1,4 +0,0 @@ -.avatar { - background-color: #72c7d5; - cursor: pointer; -} diff --git a/web-ui-external-feedback/src/components/avatar/Avatar.jsx b/web-ui-external-feedback/src/components/avatar/Avatar.jsx deleted file mode 100644 index e6b64abb2d..0000000000 --- a/web-ui-external-feedback/src/components/avatar/Avatar.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; -import './Avatar.css'; - -import Avatar from '@mui/material/Avatar'; - -const AvatarComponent = ({ imageUrl, ...props }) => { - return ; -}; - -export default AvatarComponent; diff --git a/web-ui-external-feedback/src/components/avatar/Avatar.stories.jsx b/web-ui-external-feedback/src/components/avatar/Avatar.stories.jsx deleted file mode 100644 index e79287756e..0000000000 --- a/web-ui-external-feedback/src/components/avatar/Avatar.stories.jsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Avatar from './Avatar'; -import image from '../../logo.svg'; - -export default { - title: 'Check Ins/Avatar', - component: Avatar -}; - -const Template = args => ; - -export const ProfileImage = Template.bind({}); -ProfileImage.args = { - imageUrl: image -}; -export const NoProfileImage = Template.bind({}); -NoProfileImage.args = {}; diff --git a/web-ui-external-feedback/src/components/avatar/Avatar.test.jsx b/web-ui-external-feedback/src/components/avatar/Avatar.test.jsx deleted file mode 100644 index 3fa84dbba1..0000000000 --- a/web-ui-external-feedback/src/components/avatar/Avatar.test.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import AvatarComponent from './Avatar'; -import { AppContextProvider } from '../../context/AppContext'; -import renderer from 'react-test-renderer'; - -const initialState = { - state: { - userProfile: { - memberProfile: { - id: '912834091823' - } - } - } -}; - -describe('AvatarComponent', () => { - it('renders correctly', () => { - snapshot( - - - - ); - }); -}); diff --git a/web-ui-external-feedback/src/components/avatar/__snapshots__/Avatar.test.jsx.snap b/web-ui-external-feedback/src/components/avatar/__snapshots__/Avatar.test.jsx.snap deleted file mode 100644 index 73525a341d..0000000000 --- a/web-ui-external-feedback/src/components/avatar/__snapshots__/Avatar.test.jsx.snap +++ /dev/null @@ -1,21 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`AvatarComponent > renders correctly 1`] = ` -
    -
    - -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/celebrations/Anniversaries.css b/web-ui-external-feedback/src/components/celebrations/Anniversaries.css deleted file mode 100644 index 2cc1b468e4..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/Anniversaries.css +++ /dev/null @@ -1,181 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Raleway:200'); - -body { - font-family: 'Raleway', sans-serif; - background-color: #f0e2db; - font-size: 20px; - transition: var(--transition-timing-long); -} - -body.open { - animation: bg-change 1s 1; - background-color: #72c8d5; - transition: var(--transition-timing-long); -} -@keyframes bg-change { - 0% { - background-color: #f0e2db; - } - 100% { - background-color: #72c8d5; - } -} -.anniversaries { - position: relative; -} -.anniversaries .anniversary-title { - display: flex; - justify-content: center; -} -.anniversaries-card { - min-width: 450px; -} -.anniversaries-card span { - color: var(--checkins-palette-primary-light); - font-weight: bold; -} -.anniversary-gift { - position: absolute; - top: -2rem; - left: 15rem; - width: 100px; - height: 100px; - transform-origin: 0% 0%; - transform: translate(-50%, -50%); - transition: var(--transition-timing-long); - /* animation: box 0.5s infinite; */ -} -.box { - transform-origin: 0% 0%; - animation: box 0.5s infinite; -} -@keyframes box { - 0% { - transform: rotate(0deg) translate(-50%, -50%); - } - 25% { - transform: rotate(1deg) translate(-50%, -50%); - } - 50% { - transform: rotate(0deg) translate(-50%, -50%); - } - 70% { - transform: rotate(-1deg) translate(-50%, -50%); - } - 100% { - transform: rotate(0deg) translate(-50%, -50%); - } -} -.anniversary-gift-top { - position: relative; - width: 110%; - height: 25%; - background: #2559a7; - border-radius: 5px 5px 0 0; - transform: translate3d(-5%, 0, 0); - background-image: linear-gradient( - to right, - #2559a7 0%, - #2559a7 44%, - #feb672 44%, - #feb672 56%, - #2559a7 56%, - #2559a7 100% - ); - transition: var(--transition-timing-long); -} -.anniversary-gift-top.boxOpen { - animation: box-open 1s; - opacity: 0; -} -@keyframes box-open { - 0% { - top: 0px; - opacity: 1; - } - 100% { - top: -50px; - opacity: 0; - } -} -.anniversary-gift-top::before, -.anniversary-gift-top::after { - content: ''; - width: 15px; - height: 15px; - border: 10px solid #feb672; - border-radius: 50% 50% 0 50%; - position: absolute; - top: 0; - left: 50%; - transform: translate3d(-100%, -100%, 0) skew(10deg, 10deg); -} - -.anniversary-gift-top::after { - border-radius: 50% 50% 50% 0; - transform: translate3d(0, -100%, 0) skew(-10deg, -10deg); -} - -.anniversary-gift-text { - position: absolute; - top: 50%; - left: 50%; - margin: 0; - color: #ffffff; - white-space: nowrap; - transform: translate3d(-50%, -50%, 0) scale(0.5); - transform-origin: center center; - z-index: -1; - opacity: 1; - transition: 5s; -} - -.anniversary-gift-box { - width: 100%; - height: 75%; - position: relative; - background-image: linear-gradient( - to right, - #2559a7 0%, - #2559a7 45%, - #feb672 45%, - #feb672 55%, - #2559a7 55%, - #2559a7 100% - ); - border-radius: 0 0 5px 5px; - transition: var(--transition-timing-long); -} -.anniversary-gift-box.boxDown { - animation: box-down var(--transition-timing-long); - opacity: 0; -} -@keyframes box-down { - 0% { - top: 0px; - opacity: 1; - } - 100% { - top: 50px; - opacity: 0; - } -} -@media (max-width: 600px) { - .anniversaries-card { - min-width: unset; - /* margin: 0 1rem; */ - } - .anniversary-gift { - left: 12rem; - } -} - -@media (max-width: 400px) { - .anniversaries-card { - min-width: unset; - margin: 0 1rem; - } - .anniversary-gift { - left: 10rem; - } -} diff --git a/web-ui-external-feedback/src/components/celebrations/Anniversaries.jsx b/web-ui-external-feedback/src/components/celebrations/Anniversaries.jsx deleted file mode 100644 index bda80d3748..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/Anniversaries.jsx +++ /dev/null @@ -1,109 +0,0 @@ -import React, { useContext } from 'react'; -import { Link } from 'react-router-dom'; -import { AppContext } from '../../context/AppContext'; - -import { styled } from '@mui/material/styles'; -import { getAvatarURL } from '../../api/api.js'; -import { - selectMemberProfilesLoading, - selectProfile -} from '../../context/selectors'; -import SkeletonLoader from '../skeleton_loader/SkeletonLoader'; - -import { Card, CardHeader, Grid, Typography } from '@mui/material'; -import Avatar from '@mui/material/Avatar'; - -import './Anniversaries.css'; - -const PREFIX = 'MemberSummaryCard'; -const classes = { - header: `${PREFIX}-header` -}; -const Root = styled('div')({ - [`& .${classes.search}`]: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center' - }, - [`& .${classes.searchInput}`]: { - width: '20em' - }, - [`& .${classes.members}`]: { - display: 'flex', - flexWrap: 'wrap', - justifyContent: 'space-evenly', - width: '100%' - } -}); - -const Anniversaries = ({ anniversaries }) => { - const { state } = useContext(AppContext); - - const loading = selectMemberProfilesLoading(state); - - const createAnniversaryCards = anniversaries.map((anniv, index) => { - let user = selectProfile(state, anniv.userId); - return ( - - - - {anniv.name} ({anniv.anniversary}) - - } - subheader={ - - Thank you for{' '} - - {anniv.yearsOfService.toFixed(0)} - {anniv.yearsOfService > 1 ? ' years' : ' year'}{' '} - - of service! - - } - disableTypography - avatar={ - - } - /> - - - ); - }); - - return ( -
    -
    -
    -
    -
    -
    - -
    -

    Anniversaries

    -
    - - - {loading - ? Array.from({ length: 20 }).map((_, index) => ( - - )) - : !loading - ? createAnniversaryCards - : null} - - -
    -
    - ); -}; - -export default Anniversaries; diff --git a/web-ui-external-feedback/src/components/celebrations/Anniversaries.test.jsx b/web-ui-external-feedback/src/components/celebrations/Anniversaries.test.jsx deleted file mode 100644 index 84dee93091..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/Anniversaries.test.jsx +++ /dev/null @@ -1,35 +0,0 @@ -import React from 'react'; -import Anniversaries from './Anniversaries'; -import { AppContextProvider } from '../../context/AppContext'; -import { BrowserRouter } from 'react-router-dom'; - -const anniversaries = [ - { - name: 'Jesse Hanner', - anniversary: '12/20/2012', - yearsOfService: 10.03, - userId: '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3' - }, - { - name: 'Mohit Bhatia', - anniversary: '12/10/2016', - yearsOfService: 6.06, - userId: 'b2d35288-7f1e-4549-aa2b-68396b162490' - }, - { - name: 'Zack Brown', - anniversary: '12/29/2019', - yearsOfService: 3.01, - userId: '43ee8e79-b33d-44cd-b23c-e183894ebfef' - } -]; - -it('renders correctly', () => { - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/celebrations/Birthdays.css b/web-ui-external-feedback/src/components/celebrations/Birthdays.css deleted file mode 100644 index ca1286edea..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/Birthdays.css +++ /dev/null @@ -1,275 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Wendy+One'); - -body { - font-family: 'Wendy One', sans-serif; -} - -.birthdays-container p { - text-transform: uppercase; -} - -.birthdays-container .bday-title { - display: flex; - justify-content: center; -} -.birthdays-card { - min-width: 450px; -} -.birthdays-card span { - color: var(--checkins-palette-primary-light); - font-weight: bold; -} -.birthdays-container { - position: relative; -} -.balloons { - margin: 0 auto; - position: absolute; - left: 5rem; - top: -3.5rem; -} -.balloons > div { - width: 80px; - height: 100px; - background: rgba(182, 15, 97, 0.9); - border-radius: 0; - border-radius: 80% 80% 80% 80%; - margin: 0 auto; - position: absolute; - padding: 10px; - box-shadow: inset 17px 7px 10px rgba(182, 15, 97, 0.9); - -webkit-transform-origin: bottom center; -} -.balloons > div:nth-child(1) { - background: rgba(182, 15, 97, 0.9); - left: 0; - box-shadow: inset 10px 10px 10px rgba(135, 11, 72, 0.9); - -webkit-animation: balloon1 6s ease-in-out infinite; - -moz-animation: balloon1 6s ease-in-out infinite; - -o-animation: balloon1 6s ease-in-out infinite; - animation: balloon1 6s ease-in-out infinite; -} -.balloons > div:nth-child(1):before { - color: rgba(182, 15, 97, 0.9); -} -.balloons > div:nth-child(2) { - background: rgba(242, 194, 58, 0.9); - left: 8rem; - top: -1.5rem; - box-shadow: inset 10px 10px 10px rgba(192, 154, 43, 0.9); - -webkit-animation: balloon2 6s ease-in-out infinite; - -moz-animation: balloon2 6s ease-in-out infinite; - -o-animation: balloon2 6s ease-in-out infinite; - animation: balloon2 6s ease-in-out infinite; -} -.balloons > div:nth-child(2):before { - color: rgba(242, 194, 58, 0.9); -} -.balloons > div:nth-child(3) { - background: rgba(45, 181, 167, 0.9); - left: 240px; - box-shadow: inset 10px 10px 10px rgba(35, 140, 129, 0.9); - -webkit-animation: balloon4 6s ease-in-out infinite; - -moz-animation: balloon4 6s ease-in-out infinite; - -o-animation: balloon4 6s ease-in-out infinite; - animation: balloon4 6s ease-in-out infinite; -} -.balloons > div:nth-child(3):before { - color: rgba(45, 181, 167, 0.9); -} - -.balloons > div:before { - position: absolute; - bottom: -11px; - left: 32px; - content: '▲'; - font-size: 1em; -} -.balloons p { - font-size: 0.75em; - font-weight: bold; - line-height: 0.5em; - text-align: center; - color: white; - position: relative; - top: 25%; -} -.balloons:hover { - cursor: pointer; -} -/*BALLOON 1 4*/ -@-webkit-keyframes balloon1 { - 0%, - 100% { - } - 50% { - -webkit-transform: translateY(-20px) rotate(8deg); - } -} -@-moz-keyframes balloon1 { - 0%, - 100% { - -moz-transform: translateY(0) rotate(-6deg); - } - 50% { - -moz-transform: translateY(-20px) rotate(8deg); - } -} -@-o-keyframes balloon1 { - 0%, - 100% { - -o-transform: translateY(0) rotate(-6deg); - } - 50% { - -o-transform: translateY(-20px) rotate(8deg); - } -} -@keyframes balloon1 { - 0%, - 100% { - transform: translateY(0) rotate(-6deg); - } - 50% { - transform: translateY(-20px) rotate(8deg); - } -} -/* BAllOON 2 5*/ -@-webkit-keyframes balloon2 { - 0%, - 100% { - -webkit-transform: translateY(0) rotate(6deg); - } - 50% { - -webkit-transform: translateY(-30px) rotate(-8deg); - } -} -@-moz-keyframes balloon2 { - 0%, - 100% { - -moz-transform: translateY(0) rotate(6deg); - } - 50% { - -moz-transform: translateY(-30px) rotate(-8deg); - } -} -@-o-keyframes balloon2 { - 0%, - 100% { - -o-transform: translateY(0) rotate(6deg); - } - 50% { - -o-transform: translateY(-30px) rotate(-8deg); - } -} -@keyframes balloon2 { - 0%, - 100% { - transform: translateY(0) rotate(6deg); - } - 50% { - transform: translateY(-30px) rotate(-8deg); - } -} -/* BAllOON 0*/ -@-webkit-keyframes balloon3 { - 0%, - 100% { - -webkit-transform: translate(0, -10px) rotate(6deg); - } - 50% { - -webkit-transform: translate(-20px, 30px) rotate(-8deg); - } -} -@-moz-keyframes balloon3 { - 0%, - 100% { - -moz-transform: translate(0, -10px) rotate(6deg); - } - 50% { - -moz-transform: translate(-20px, 30px) rotate(-8deg); - } -} -@-o-keyframes balloon3 { - 0%, - 100% { - -o-transform: translate(0, -10px) rotate(6deg); - } - 50% { - -o-transform: translate(-20px, 30px) rotate(-8deg); - } -} -@keyframes balloon3 { - 0%, - 100% { - transform: translate(0, -10px) rotate(6deg); - } - 50% { - transform: translate(-20px, 30px) rotate(-8deg); - } -} -/* BAllOON 3*/ -@-webkit-keyframes balloon4 { - 0%, - 100% { - -webkit-transform: translate(10px, -10px) rotate(-8deg); - } - 50% { - -webkit-transform: translate(-15px, 20px) rotate(10deg); - } -} -@-moz-keyframes balloon4 { - 0%, - 100% { - -moz-transform: translate(10px, -10px) rotate(-8deg); - } - 50% { - -moz-transform: translate(-15px, 10px) rotate(10deg); - } -} -@-o-keyframes balloon4 { - 0%, - 100% { - -o-transform: translate(10px, -10px) rotate(-8deg); - } - 50% { - -o-transform: translate(-15px, 10px) rotate(10deg); - } -} -@keyframes balloon4 { - 0%, - 100% { - transform: translate(10px, -10px) rotate(-8deg); - } - 50% { - transform: translate(-15px, 10px) rotate(10deg); - } -} -@media (max-width: 1526px) { - .birthdays-container { - margin-top: 6rem; - } -} -@media (max-width: 600px) { - .birthdays-card { - margin: 0 1rem; - min-width: unset; - } - .birthdays-card h5 { - font-size: 1rem; - } - .birthdays-container .balloons { - left: 3rem; - } -} - -@media (max-width: 320px) { - .balloons > div:nth-child(1) { - left: -2rem; - } - .balloons > div:nth-child(2) { - left: 4.5rem; - } - .balloons > div:nth-child(3) { - left: 10.5rem; - } -} diff --git a/web-ui-external-feedback/src/components/celebrations/Birthdays.jsx b/web-ui-external-feedback/src/components/celebrations/Birthdays.jsx deleted file mode 100644 index 173c50bee1..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/Birthdays.jsx +++ /dev/null @@ -1,120 +0,0 @@ -import React, { useContext } from 'react'; -import { Link } from 'react-router-dom'; - -import { Card, CardHeader, Grid, Typography } from '@mui/material'; -import Avatar from '@mui/material/Avatar'; -import { styled } from '@mui/material/styles'; - -import { getAvatarURL } from '../../api/api.js'; -import SkeletonLoader from '../skeleton_loader/SkeletonLoader'; - -import { AppContext } from '../../context/AppContext'; -import { - selectMemberProfilesLoading, - selectProfile -} from '../../context/selectors'; -import { randomConfetti } from '../../context/util'; - -import { formatBirthday } from '../../helpers/celebration.js'; - -import './Birthdays.css'; - -const PREFIX = 'MemberSummaryCard'; -const classes = { - header: `${PREFIX}-header` -}; -const Root = styled('div')({ - [`& .${classes.search}`]: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center' - }, - [`& .${classes.searchInput}`]: { - width: '20em' - }, - [`& .${classes.members}`]: { - display: 'flex', - flexWrap: 'wrap', - justifyContent: 'space-evenly', - width: '100%' - } -}); - -const Birthdays = ({ birthdays, xPos = 0.75 }) => { - const { state } = useContext(AppContext); - - const loading = selectMemberProfilesLoading(state); - - const createBirthdayCards = birthdays.map((bday, index) => { - let user = selectProfile(state, bday.userId); - if (user) { - return ( - - - - Happy Birthday{' '} - {user.firstName + ' ' + user.lastName}! - - } - subheader={ - - {formatBirthday(bday.birthDay)} - - } - disableTypography - avatar={ - - } - /> - - - ); - } else return null; - }); - - return ( -
    -
    randomConfetti(0.6, xPos)}> -
    -

    Happy

    -

    Birthday!

    -
    -
    -

    Happy

    -

    Birthday!

    -
    -
    -

    Happy

    -

    Birthday!

    -
    -
    - -
    -

    Birthdays

    -
    - - - {loading - ? Array.from({ length: 20 }).map((_, index) => ( - - )) - : !loading - ? createBirthdayCards - : null} - - -
    -
    - ); -}; - -export default Birthdays; diff --git a/web-ui-external-feedback/src/components/celebrations/Birthdays.test.jsx b/web-ui-external-feedback/src/components/celebrations/Birthdays.test.jsx deleted file mode 100644 index f7e64b999f..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/Birthdays.test.jsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import Birthdays from './Birthdays'; -import { formatBirthday } from '../../helpers/celebration'; -import { AppContextProvider } from '../../context/AppContext'; -import { BrowserRouter } from 'react-router-dom'; - -const birthdays = [ - { - name: 'SumanMaroju', - birthDay: '12/29', - userId: '1b4f99da-ef70-4a76-9b37-8bb783b749ad' - }, - { - name: 'MohitBhatia', - birthDay: '12/29', - userId: 'b2d35288-7f1e-4549-aa2b-68396b162490' - }, - { - name: 'JackKeller', - birthDay: '2/3', - userId: '6000ba9c-7a3c-4836-a434-f3fe52992868' - } -]; -const hideMyBirthday = false; - -it('renders correctly', () => { - snapshot( - - - - - - ); -}); - -it('should format a "##/##" birthday to "MONTH ##(ordinal)', () => { - const user1 = formatBirthday(birthdays[0].birthDay); - const user3 = formatBirthday(birthdays[2].birthDay); - expect(user1).toBe('December 29th'); - expect(user3).toBe('February 3rd'); -}); diff --git a/web-ui-external-feedback/src/components/celebrations/MyAnniversary.css b/web-ui-external-feedback/src/components/celebrations/MyAnniversary.css deleted file mode 100644 index afdcf99d9d..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/MyAnniversary.css +++ /dev/null @@ -1,201 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Raleway:200'); - -body { - font-family: 'Raleway', sans-serif; - font-size: 20px; - transition: var(--transition-timing-long); -} - -.my-anniversary.open { - animation: bg-change 1s 1; - background-color: #72c8d5; - transition: var(--transition-timing-long); -} -@keyframes bg-change { - 0% { - background-color: #f0e2db; - } - 100% { - background-color: #72c8d5; - } -} -.hide-my-anniversary { - display: flex; - justify-content: flex-end; - font-weight: bold; -} -.hide-my-anniversary:hover { - cursor: pointer; -} -.my-anniversary-container { - position: relative; -} -.my-anniversary h1 { - color: #2559a7; - font-weight: bolder; - position: relative; - top: 10rem; - text-align: center; - font-size: 3.5em; -} -.my-anniversary-gift { - position: absolute; - top: 7rem; - left: 50%; - width: 150px; - height: 150px; - transform-origin: 0% 0%; - cursor: pointer; - transform: translate(-50%, -50%); - transition: var(--transition-timing-long); - animation: box 0.5s infinite; -} -.my-anniversary-gift .box { - transform-origin: 0% 0%; - cursor: pointer; - animation: box 0.5s infinite; -} -@keyframes box { - 0% { - transform: rotate(0deg) translate(-50%, -50%); - } - 25% { - transform: rotate(1deg) translate(-50%, -50%); - } - 50% { - transform: rotate(0deg) translate(-50%, -50%); - } - 70% { - transform: rotate(-1deg) translate(-50%, -50%); - } - 100% { - transform: rotate(0deg) translate(-50%, -50%); - } -} -.my-anniversary-gift-top { - position: relative; - width: 110%; - height: 25%; - background: #2559a7; - border-radius: 5px 5px 0 0; - transform: translate3d(-5%, 0, 0); - background-image: linear-gradient( - to right, - #2559a7 0%, - #2559a7 44%, - #feb672 44%, - #feb672 56%, - #2559a7 56%, - #2559a7 100% - ); - transition: var(--transition-timing-long); -} -.my-anniversary-gift-top.boxOpen { - animation: box-open var(--transition-timing-long); - opacity: 0; -} -@keyframes box-open { - 0% { - top: 0px; - opacity: 1; - } - 100% { - top: -50px; - opacity: 0; - } -} -.my-anniversary-gift-top::before, -.my-anniversary-gift-top::after { - content: ''; - width: 15px; - height: 15px; - border: 10px solid #feb672; - border-radius: 50% 50% 0 50%; - position: absolute; - top: 0; - left: 50%; - transform: translate3d(-100%, -100%, 0) skew(10deg, 10deg); -} - -.my-anniversary-gift-top::after { - border-radius: 50% 50% 50% 0; - transform: translate3d(0, -100%, 0) skew(-10deg, -10deg); -} - -.my-anniversary-gift-text.open { - position: absolute; - top: 50%; - left: 50%; - margin: 0; - white-space: nowrap; - transform: translate3d(-50%, 0, 0) scale(2.5); - transform-origin: center center; - z-index: -1; - opacity: 1; - transition: 3s; -} -.my-anniversary-gift-text.open span { - color: #2559a7; - font-weight: bolder; - font-size: 1rem; -} -.my-anniversary-gift-box { - width: 100%; - height: 75%; - position: relative; - background-image: linear-gradient( - to right, - #2559a7 0%, - #2559a7 45%, - #feb672 45%, - #feb672 55%, - #2559a7 55%, - #2559a7 100% - ); - border-radius: 0 0 5px 5px; - transition: 1s; -} -.my-anniversary-gift-box.boxDown { - animation: box-down 1s; - opacity: 0; -} -@keyframes box-down { - 0% { - top: 0px; - opacity: 1; - } - 100% { - top: 50px; - opacity: 0; - } -} - -@media (max-width: 800px) { - .my-anniversary h1 { - font-size: 2.5rem; - } -} - -@media (max-width: 600px) { - .my-anniversary-gift-text.open { - transform: translate3d(-50%, 0, 0) scale(1.5); - } - .my-anniversary-gift { - top: 5rem; - width: 100px; - height: 100px; - } - .my-anniversary h1 { - font-size: 1.75rem; - top: 7rem; - } -} -@media (max-width: 400px) { - .my-anniversary-gift { - width: 100px; - height: 100px; - } - .my-anniversary h1 { - font-size: 1.25rem; - } -} diff --git a/web-ui-external-feedback/src/components/celebrations/MyAnniversary.jsx b/web-ui-external-feedback/src/components/celebrations/MyAnniversary.jsx deleted file mode 100644 index 6ac97022f7..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/MyAnniversary.jsx +++ /dev/null @@ -1,56 +0,0 @@ -import React, { useState } from 'react'; - -import './MyAnniversary.css'; - -const MyAnniversary = props => { - const { hideMyAnniversary, myAnniversary } = props; - const fullName = myAnniversary[0]?.name; - const firstName = fullName?.substring(0, fullName.indexOf(' ')); - const yearsOfService = myAnniversary[0]?.yearsOfService; - const [open, setOpen] = useState(false); - - const text = ( -

    - Thank you for {yearsOfService?.toFixed(0)} years!!! -

    - ); - - return ( -
    -
    - X -
    -
    setOpen(!open)} - > -
    -
    - {open ? text : ''} -
    -
    -
    -
    -

    Happy Anniversary {firstName}!!!

    -
    -
    - ); -}; - -export default MyAnniversary; diff --git a/web-ui-external-feedback/src/components/celebrations/MyAnniversary.test.jsx b/web-ui-external-feedback/src/components/celebrations/MyAnniversary.test.jsx deleted file mode 100644 index ae44737e12..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/MyAnniversary.test.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import MyAnniversary from './MyAnniversary'; -import { AppContextProvider } from '../../context/AppContext'; -import { BrowserRouter } from 'react-router-dom'; - -const hideMyAnniversary = false; -const myAnniversary = { - name: 'Suman Maroju', - anniversary: '12/29/2012', - yearsOfService: 10, - userId: '1b4f99da-ef70-4a76-9b37-8bb783b749ad' -}; - -it('renders correctly', () => { - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/celebrations/MyBirthday.css b/web-ui-external-feedback/src/components/celebrations/MyBirthday.css deleted file mode 100644 index e8f3ee165e..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/MyBirthday.css +++ /dev/null @@ -1,346 +0,0 @@ -@import url('https://fonts.googleapis.com/css?family=Wendy+One'); - -body { - font-family: 'Wendy One', sans-serif; -} - -.my-birthday p { - text-transform: uppercase; -} -.hide-my-birthday { - display: flex; - justify-content: flex-end; - font-weight: bold; -} -.hide-my-birthday:hover { - cursor: pointer; -} -.my-birthday-container { - position: relative; -} -.my-birthday h1 { - color: #2559a7; - font-weight: bolder; - position: relative; - top: 12rem; - text-align: center; - font-size: 3.5em; -} -.my-balloons { - margin: 0 auto; - position: absolute; - top: -2rem; -} -.my-balloons > div { - width: 104px; - height: 140px; - background: rgba(182, 15, 97, 0.9); - border-radius: 0; - border-radius: 80% 80% 80% 80%; - margin: 0 auto; - position: absolute; - padding: 10px; - box-shadow: inset 17px 7px 10px rgba(182, 15, 97, 0.9); - -webkit-transform-origin: bottom center; -} -.my-balloons > div:nth-child(1) { - background: rgba(182, 15, 97, 0.9); - left: 0; - top: 7rem; - box-shadow: inset 10px 10px 10px rgba(135, 11, 72, 0.9); - -webkit-animation: balloon1 6s ease-in-out infinite; - -moz-animation: balloon1 6s ease-in-out infinite; - -o-animation: balloon1 6s ease-in-out infinite; - animation: balloon1 6s ease-in-out infinite; -} -.my-balloons > div:nth-child(1):before { - color: rgba(182, 15, 97, 0.9); -} -.my-balloons > div:nth-child(2) { - background: rgba(242, 194, 58, 0.9); - left: 8rem; - top: 4rem; - box-shadow: inset 10px 10px 10px rgba(192, 154, 43, 0.9); - -webkit-animation: balloon2 6s ease-in-out infinite; - -moz-animation: balloon2 6s ease-in-out infinite; - -o-animation: balloon2 6s ease-in-out infinite; - animation: balloon2 6s ease-in-out infinite; -} -.my-balloons > div:nth-child(2):before { - color: rgba(242, 194, 58, 0.9); -} -.my-balloons > div:nth-child(3) { - background: rgba(45, 181, 167, 0.9); - left: 16rem; - box-shadow: inset 10px 10px 10px rgba(35, 140, 129, 0.9); - -webkit-animation: balloon4 6s ease-in-out infinite; - -moz-animation: balloon4 6s ease-in-out infinite; - -o-animation: balloon4 6s ease-in-out infinite; - animation: balloon4 6s ease-in-out infinite; -} -.my-balloons > div:nth-child(3):before { - color: rgba(45, 181, 167, 0.9); -} -.my-balloons > div:nth-child(4) { - background: rgba(190, 61, 244, 0.9); - left: 24rem; - top: 4rem; - box-shadow: inset 10px 10px 10px rgba(160, 31, 204, 0.9); - -webkit-animation: balloon1 5s ease-in-out infinite; - -moz-animation: balloon1 5s ease-in-out infinite; - -o-animation: balloon1 5s ease-in-out infinite; - animation: balloon1 5s ease-in-out infinite; -} -.my-balloons > div:nth-child(4):before { - color: rgba(190, 61, 244, 0.9); -} -.my-balloons > div:nth-child(5) { - background: rgba(180, 224, 67, 0.9); - left: 32rem; - top: 7rem; - box-shadow: inset 10px 10px 10px rgba(140, 179, 47, 0.9); - -webkit-animation: balloon3 5s ease-in-out infinite; - -moz-animation: balloon3 5s ease-in-out infinite; - -o-animation: balloon3 5s ease-in-out infinite; - animation: balloon3 5s ease-in-out infinite; -} -.my-balloons > div:nth-child(5):before { - color: rgba(180, 224, 67, 0.9); -} -.my-balloons > div:before { - position: absolute; - bottom: -11px; - left: 45px; - content: '▲'; - font-size: 1em; -} -.my-balloons:hover { - cursor: pointer; -} -.my-birthday-container p { - font-size: 1em; - font-weight: bold; - line-height: 0.5em; - text-align: center; - color: white; - position: relative; - top: 25%; -} -/*BALLOON 1 4*/ -@-webkit-keyframes balloon1 { - 0%, - 100% { - } - 50% { - -webkit-transform: translateY(-20px) rotate(8deg); - } -} -@-moz-keyframes balloon1 { - 0%, - 100% { - -moz-transform: translateY(0) rotate(-6deg); - } - 50% { - -moz-transform: translateY(-20px) rotate(8deg); - } -} -@-o-keyframes balloon1 { - 0%, - 100% { - -o-transform: translateY(0) rotate(-6deg); - } - 50% { - -o-transform: translateY(-20px) rotate(8deg); - } -} -@keyframes balloon1 { - 0%, - 100% { - transform: translateY(0) rotate(-6deg); - } - 50% { - transform: translateY(-20px) rotate(8deg); - } -} -/* BAllOON 2 5*/ -@-webkit-keyframes balloon2 { - 0%, - 100% { - -webkit-transform: translateY(0) rotate(6deg); - } - 50% { - -webkit-transform: translateY(-30px) rotate(-8deg); - } -} -@-moz-keyframes balloon2 { - 0%, - 100% { - -moz-transform: translateY(0) rotate(6deg); - } - 50% { - -moz-transform: translateY(-30px) rotate(-8deg); - } -} -@-o-keyframes balloon2 { - 0%, - 100% { - -o-transform: translateY(0) rotate(6deg); - } - 50% { - -o-transform: translateY(-30px) rotate(-8deg); - } -} -@keyframes balloon2 { - 0%, - 100% { - transform: translateY(0) rotate(6deg); - } - 50% { - transform: translateY(-30px) rotate(-8deg); - } -} -/* BAllOON 0*/ -@-webkit-keyframes balloon3 { - 0%, - 100% { - -webkit-transform: translate(0, -10px) rotate(6deg); - } - 50% { - -webkit-transform: translate(-20px, 30px) rotate(-8deg); - } -} -@-moz-keyframes balloon3 { - 0%, - 100% { - -moz-transform: translate(0, -10px) rotate(6deg); - } - 50% { - -moz-transform: translate(-20px, 30px) rotate(-8deg); - } -} -@-o-keyframes balloon3 { - 0%, - 100% { - -o-transform: translate(0, -10px) rotate(6deg); - } - 50% { - -o-transform: translate(-20px, 30px) rotate(-8deg); - } -} -@keyframes balloon3 { - 0%, - 100% { - transform: translate(0, -10px) rotate(6deg); - } - 50% { - transform: translate(-20px, 30px) rotate(-8deg); - } -} -/* BAllOON 3*/ -@-webkit-keyframes balloon4 { - 0%, - 100% { - -webkit-transform: translate(10px, -10px) rotate(-8deg); - } - 50% { - -webkit-transform: translate(-15px, 20px) rotate(10deg); - } -} -@-moz-keyframes balloon4 { - 0%, - 100% { - -moz-transform: translate(10px, -10px) rotate(-8deg); - } - 50% { - -moz-transform: translate(-15px, 10px) rotate(10deg); - } -} -@-o-keyframes balloon4 { - 0%, - 100% { - -o-transform: translate(10px, -10px) rotate(-8deg); - } - 50% { - -o-transform: translate(-15px, 10px) rotate(10deg); - } -} -@keyframes balloon4 { - 0%, - 100% { - transform: translate(10px, -10px) rotate(-8deg); - } - 50% { - transform: translate(-15px, 10px) rotate(10deg); - } -} -@media (max-width: 800px) { - .my-birthday h1 { - font-size: 2.5rem; - } -} -@media (max-width: 600px) { - .my-birthday-container { - bottom: 0rem; - } - .my-birthday-container p { - font-size: 0.5rem; - text-align: center; - position: relative; - top: 25%; - } - .my-birthday h1 { - top: 10rem; - text-align: center; - font-size: 1.75rem; - } - .my-birthday-container .my-balloons > div { - width: 64px; - height: 85px; - } - .my-balloons > div:before { - left: 1.65rem; - } - .my-balloons > div:nth-child(1) { - left: 1rem; - top: 7rem; - } - .my-balloons > div:nth-child(2) { - left: 5rem; - top: 4rem; - } - .my-balloons > div:nth-child(3) { - left: 10rem; - } - .my-balloons > div:nth-child(4) { - left: 14rem; - top: 4rem; - } - .my-balloons > div:nth-child(5) { - left: 18rem; - top: 7rem; - } -} -@media (max-width: 400px) { - .my-birthday h1 { - font-size: 1.25rem; - } - .my-birthday-container .my-balloons > div { - width: 64px; - height: 85px; - } - .my-balloons > div:nth-child(1) { - left: -1rem; - } - .my-balloons > div:nth-child(2) { - left: 3rem; - } - .my-balloons > div:nth-child(3) { - left: 8rem; - } - .my-balloons > div:nth-child(4) { - left: 12rem; - } - .my-balloons > div:nth-child(5) { - left: 16rem; - } -} diff --git a/web-ui-external-feedback/src/components/celebrations/MyBirthday.jsx b/web-ui-external-feedback/src/components/celebrations/MyBirthday.jsx deleted file mode 100644 index 3848e2c40e..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/MyBirthday.jsx +++ /dev/null @@ -1,45 +0,0 @@ -import React from 'react'; - -import { randomConfetti } from '../../context/util'; - -import './MyBirthday.css'; -import './Birthdays.css'; - -const MyBirthday = props => { - const { me, hideMyBirthday } = props; - - return ( -
    -
    - X -
    -
    randomConfetti(0.6, 0.5)}> -
    -

    Happy

    -

    Birthday!

    -
    -
    -

    Happy

    -

    Birthday!

    -
    -
    -

    Happy

    -

    Birthday!

    -
    -
    -

    Happy

    -

    Birthday!

    -
    -
    -

    Happy

    -

    Birthday!

    -
    -
    -
    -

    Happy Birthday {me.firstName}!!!

    -
    -
    - ); -}; - -export default MyBirthday; diff --git a/web-ui-external-feedback/src/components/celebrations/MyBirthday.test.jsx b/web-ui-external-feedback/src/components/celebrations/MyBirthday.test.jsx deleted file mode 100644 index befc29ad80..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/MyBirthday.test.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import MyBirthday from './MyBirthday'; -import { AppContextProvider } from '../../context/AppContext'; -import { BrowserRouter } from 'react-router-dom'; - -const me = { - id: '0987654321', - name: 'Moi', - lastName: 'Monseiur' -}; - -it('renders correctly', () => { - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/celebrations/__snapshots__/Anniversaries.test.jsx.snap b/web-ui-external-feedback/src/components/celebrations/__snapshots__/Anniversaries.test.jsx.snap deleted file mode 100644 index cb4228806c..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/__snapshots__/Anniversaries.test.jsx.snap +++ /dev/null @@ -1,189 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    -
    - -`; diff --git a/web-ui-external-feedback/src/components/celebrations/__snapshots__/Birthdays.test.jsx.snap b/web-ui-external-feedback/src/components/celebrations/__snapshots__/Birthdays.test.jsx.snap deleted file mode 100644 index cce1738263..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/__snapshots__/Birthdays.test.jsx.snap +++ /dev/null @@ -1,62 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    -
    -
    -

    - Happy -

    -

    - Birthday! -

    -
    -
    -

    - Happy -

    -

    - Birthday! -

    -
    -
    -

    - Happy -

    -

    - Birthday! -

    -
    -
    -
    -
    -

    - Birthdays -

    -
    -
    -
    -
    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/celebrations/__snapshots__/DoubleCelebration.test.jsx.snap b/web-ui-external-feedback/src/components/celebrations/__snapshots__/DoubleCelebration.test.jsx.snap deleted file mode 100644 index 43c819687e..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/__snapshots__/DoubleCelebration.test.jsx.snap +++ /dev/null @@ -1,110 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    -
    -
    -
    - X -
    -
    -
    -
    -
    -
    -
    -

    - Happy Anniversary - !!! -

    -
    -
    -
    -
    -
    -
    - X -
    -
    -
    -

    - Happy -

    -

    - Birthday! -

    -
    -
    -

    - Happy -

    -

    - Birthday! -

    -
    -
    -

    - Happy -

    -

    - Birthday! -

    -
    -
    -

    - Happy -

    -

    - Birthday! -

    -
    -
    -

    - Happy -

    -

    - Birthday! -

    -
    -
    -
    -

    - Happy Birthday - Suman - !!! -

    -
    -
    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/celebrations/__snapshots__/MyAnniversary.test.jsx.snap b/web-ui-external-feedback/src/components/celebrations/__snapshots__/MyAnniversary.test.jsx.snap deleted file mode 100644 index c229ef4d6e..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/__snapshots__/MyAnniversary.test.jsx.snap +++ /dev/null @@ -1,36 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    -
    - X -
    -
    -
    -
    -
    -
    -
    -

    - Happy Anniversary - !!! -

    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/celebrations/__snapshots__/MyBirthday.test.jsx.snap b/web-ui-external-feedback/src/components/celebrations/__snapshots__/MyBirthday.test.jsx.snap deleted file mode 100644 index 107d286246..0000000000 --- a/web-ui-external-feedback/src/components/celebrations/__snapshots__/MyBirthday.test.jsx.snap +++ /dev/null @@ -1,67 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    -
    - X -
    -
    -
    -

    - Happy -

    -

    - Birthday! -

    -
    -
    -

    - Happy -

    -

    - Birthday! -

    -
    -
    -

    - Happy -

    -

    - Birthday! -

    -
    -
    -

    - Happy -

    -

    - Birthday! -

    -
    -
    -

    - Happy -

    -

    - Birthday! -

    -
    -
    -
    -

    - Happy Birthday - !!! -

    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/certifications/CertificationBadges.css b/web-ui-external-feedback/src/components/certifications/CertificationBadges.css deleted file mode 100644 index 84d4739312..0000000000 --- a/web-ui-external-feedback/src/components/certifications/CertificationBadges.css +++ /dev/null @@ -1,10 +0,0 @@ -.certification-badges { - img { - max-height: 5rem; - } - - .MuiCardContent-root { - display: flex; - gap: 1rem; - } -} diff --git a/web-ui-external-feedback/src/components/certifications/CertificationBadges.jsx b/web-ui-external-feedback/src/components/certifications/CertificationBadges.jsx deleted file mode 100644 index 87195f636f..0000000000 --- a/web-ui-external-feedback/src/components/certifications/CertificationBadges.jsx +++ /dev/null @@ -1,64 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { useCallback, useContext, useEffect, useState } from 'react'; - -import { Card, CardContent, CardHeader, Tooltip } from '@mui/material'; - -import { resolve } from '../../api/api.js'; -import { AppContext } from '../../context/AppContext'; -import { selectCsrfToken } from '../../context/selectors'; - -import './CertificationBadges.css'; - -const certificationBaseUrl = '/services/certification'; - -const propTypes = { - memberId: PropTypes.string -}; -const CertificationBadges = ({ memberId }) => { - const [certifications, setCertifications] = useState([]); - - const { state } = useContext(AppContext); - const csrf = selectCsrfToken(state); - - const loadCertifications = useCallback(async () => { - const res = await resolve({ - method: 'GET', - url: certificationBaseUrl + '?memberId=' + memberId, - headers: { - 'X-CSRF-Header': csrf, - Accept: 'application/json', - 'Content-Type': 'application/json;charset=UTF-8' - } - }); - if (res.error) return; - - const certifications = res.payload.data; - setCertifications(certifications); - }, [csrf]); - - useEffect(() => { - if (csrf) loadCertifications(); - }, [csrf]); - - if (certifications.length === 0) return null; - - return ( - - - - {certifications.map(cert => ( - - {cert.name} - - ))} - - - ); -}; - -CertificationBadges.propTypes = propTypes; - -export default CertificationBadges; diff --git a/web-ui-external-feedback/src/components/certifications/Certifications.css b/web-ui-external-feedback/src/components/certifications/Certifications.css deleted file mode 100644 index 3ed3630008..0000000000 --- a/web-ui-external-feedback/src/components/certifications/Certifications.css +++ /dev/null @@ -1,18 +0,0 @@ -.certifications { - padding: 1rem; -} - -.certification-dialog { - .MuiDialogContent-root { - display: flex; - flex-direction: column; - gap: 1rem; - - padding-top: 1rem !important; - width: 30rem; - } - - .MuiTextField-root { - width: 100%; - } -} diff --git a/web-ui-external-feedback/src/components/certifications/Certifications.jsx b/web-ui-external-feedback/src/components/certifications/Certifications.jsx deleted file mode 100644 index eaebe1fc28..0000000000 --- a/web-ui-external-feedback/src/components/certifications/Certifications.jsx +++ /dev/null @@ -1,276 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { useCallback, useContext, useEffect, useState } from 'react'; - -import { - Button, - Dialog, - DialogContent, - DialogTitle, - TextField -} from '@mui/material'; -import Autocomplete from '@mui/material/Autocomplete'; - -import { resolve } from '../../api/api.js'; -import { AppContext } from '../../context/AppContext'; -import { selectCsrfToken } from '../../context/selectors'; -import ConfirmationDialog from '../dialogs/ConfirmationDialog'; - -import './Certifications.css'; - -const certificationBaseUrl = '/services/certification'; - -const propTypes = { - forceUpdate: PropTypes.func, - open: PropTypes.bool, - onClose: PropTypes.func -}; - -const Certifications = ({ forceUpdate = () => {}, open, onClose }) => { - const [adding, setAdding] = useState(true); // true to add, false to edit - const [badgeUrl, setBadgeUrl] = useState(''); - const [certificationMap, setCertificationMap] = useState({}); - const [certifications, setCertifications] = useState([]); - const [confirmDeleteOpen, setConfirmDeleteOpen] = useState(false); - const [mergeDialogOpen, setMergeDialogOpen] = useState(false); - const [name, setName] = useState(''); - const [selectedCertification, setSelectedCertification] = useState(null); - const [selectedTarget, setSelectedTarget] = useState(null); - - const { state } = useContext(AppContext); - const csrf = selectCsrfToken(state); - - const close = () => { - reset(); - onClose(); - }; - - const reset = () => { - setAdding(true); - setBadgeUrl(''); - setName(''); - setSelectedCertification(null); - setSelectedTarget(null); - }; - - const loadCertifications = useCallback(async () => { - const res = await resolve({ - method: 'GET', - url: certificationBaseUrl, - headers: { - 'X-CSRF-Header': csrf, - Accept: 'application/json', - 'Content-Type': 'application/json;charset=UTF-8' - } - }); - if (res.error) return; - - const certs = await res.payload.data; - setCertifications(certs.sort((c1, c2) => c1.name.localeCompare(c2.name))); - - const certMap = certs.reduce((map, cert) => { - map[cert.id] = cert; - return map; - }, {}); - setCertificationMap(certMap); - }, [csrf]); - - useEffect(() => { - if (csrf) loadCertifications(); - }, [csrf]); - - const certificationSelect = useCallback( - (label, setSelected) => ( - { - if (value === null) return; - let foundCert = certifications.find( - cert => cert.name.toUpperCase() === value.toUpperCase() - ); - if (!foundCert) { - foundCert = { badgeUrl: '', name: value }; - setCertifications(certs => [...certs, foundCert]); - } - setAdding(!Boolean(foundCert)); - setName(foundCert.name); - setBadgeUrl(foundCert.badgeUrl); - setSelected(foundCert); - }} - options={certifications.map(cert => cert.name)} - renderInput={params => { - return ( - - ); - }} - selectOnFocus - /> - ), - [certifications] - ); - - const deleteCertification = useCallback(async () => { - selectedCertification.active = false; - const { id } = selectedCertification; - const res = await resolve({ - method: 'PUT', - url: certificationBaseUrl + '/' + id, - headers: { - 'X-CSRF-Header': csrf, - Accept: 'application/json', - 'Content-Type': 'application/json;charset=UTF-8' - }, - data: selectedCertification - }); - if (res.error) return; - - setCertificationMap(map => { - delete map[id]; - return map; - }); - setCertifications(certs => certs.filter(c => c.id !== id)); - forceUpdate(); - close(); - }, [certificationMap, certifications, selectedCertification]); - - const mergeCertification = useCallback(async () => { - const sourceId = selectedCertification.id; - const targetId = selectedTarget.id; - const res = await resolve({ - method: 'POST', - url: certificationBaseUrl + '/merge', - headers: { - 'X-CSRF-Header': csrf, - Accept: 'application/json', - 'Content-Type': 'application/json;charset=UTF-8' - }, - data: { sourceId, targetId } - }); - if (res.error) return; - - setCertifications(certs => certs.filter(cert => cert.id !== sourceId)); - setCertificationMap(map => { - delete map[sourceId]; - return map; - }); - forceUpdate(); - close(); - }, [selectedCertification, selectedTarget]); - - const saveCertification = useCallback(async () => { - const url = adding - ? certificationBaseUrl - : certificationBaseUrl + '/' + selectedCertification.id; - const res = await resolve({ - method: adding ? 'POST' : 'PUT', - url, - headers: { - 'X-CSRF-Header': csrf, - Accept: 'application/json', - 'Content-Type': 'application/json;charset=UTF-8' - }, - data: { name, badgeUrl } - }); - if (res.error) return; - - const newCert = res.payload.data; - certificationMap[newCert.id] = newCert; - setCertificationMap(certificationMap); - setCertifications( - Object.values(certificationMap).sort((c1, c2) => - c1.name.localeCompare(c2.name) - ) - ); - close(); - forceUpdate(); - }, [badgeUrl, certificationMap, name, selectedCertification]); - - return ( - <> - - Manage Certifications - - {certificationSelect('Certification', setSelectedCertification)} - setName(e.target.value)} - value={name} - /> - setBadgeUrl(e.target.value)} - value={badgeUrl} - /> - -
    - - - -
    -
    -
    - - - - setMergeDialogOpen(false)} - > - - Merge {selectedCertification?.name} Certification Into - - - {certificationSelect('Target Certification', setSelectedTarget)} -
    - - -
    -
    -
    - - ); -}; - -Certifications.propTypes = propTypes; - -export default Certifications; diff --git a/web-ui-external-feedback/src/components/certifications/EarnedCertificationsTable.css b/web-ui-external-feedback/src/components/certifications/EarnedCertificationsTable.css deleted file mode 100644 index bc320a8f4e..0000000000 --- a/web-ui-external-feedback/src/components/certifications/EarnedCertificationsTable.css +++ /dev/null @@ -1,67 +0,0 @@ -#earned-certifications-table { - - .MuiCardHeader-root { - padding-bottom: 0; - } - - .row { - display: flex; - align-items: start; - } - - table { - margin: 0 auto; - width: 100%; - border-collapse: collapse; - - img { - max-height: 5rem; - } - } - - td, - th { - padding: 0.5rem; - color: var(--checkins-palette-text-primary); - } - - th { - background-color: var(--oci-orange); - border-right: 1px solid var(--oci-light-blue); - } - - th:last-child { - border-right: none; - } - - tr:nth-child(even) { - background-color: var(--checkins-palette-background-default); - background-image: var(--checkins-palette-alternate-row-overlay); - } - - tr:nth-child(odd) { - background-color: var(--checkins-palette-background-default); - } - - .actions-th { - width: 6rem; - } -} - -.earned-certifications-dialog { - [role='dialog'] { - width: 30rem; - } - - .MuiDialogContent-root { - display: flex; - flex-direction: column; - gap: 1.5rem; - - padding-top: 1rem !important; - - .MuiTextField-root { - width: 100%; - } - } -} \ No newline at end of file diff --git a/web-ui-external-feedback/src/components/certifications/EarnedCertificationsTable.jsx b/web-ui-external-feedback/src/components/certifications/EarnedCertificationsTable.jsx deleted file mode 100644 index a13b67e8ad..0000000000 --- a/web-ui-external-feedback/src/components/certifications/EarnedCertificationsTable.jsx +++ /dev/null @@ -1,591 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { useCallback, useContext, useEffect, useState } from 'react'; - -import { sanitizeUrl } from '@braintree/sanitize-url'; -import { - AddCircleOutline, - Delete, - Edit, - EmojiEvents -} from '@mui/icons-material'; -import { - Autocomplete, - Avatar, - Button, - Card, - CardContent, - CardHeader, - Dialog, - DialogActions, - DialogContent, - DialogTitle, - IconButton, - TextField, - Tooltip -} from '@mui/material'; - -import { resolve } from '../../api/api.js'; -import DatePickerField from '../date-picker-field/DatePickerField'; -import ConfirmationDialog from '../dialogs/ConfirmationDialog'; -import { AppContext } from '../../context/AppContext'; -import { - selectCsrfToken, - selectCurrentUser, - selectProfileMap -} from '../../context/selectors'; -import { formatDate } from '../../helpers/datetime'; -import './EarnedCertificationsTable.css'; - -const certificationBaseUrl = '/services/certification'; -const earnedCertificationBaseUrl = '/services/earned-certification'; - -const newEarned = { earnedDate: formatDate(new Date()) }; -const tableColumns = [ - 'Member', - 'Name', - 'Description', - 'Earned On', - 'Expiration', - 'Validation Image', - 'Badge' -]; - -const propTypes = { - forceUpdate: PropTypes.func, - onlyMe: PropTypes.bool -}; - -const EarnedCertificationsTable = ({ - forceUpdate = () => {}, - onlyMe = false -}) => { - const { state } = useContext(AppContext); - const [badgeUrl, setBadgeUrl] = useState(''); - const [certificationDialogOpen, setCertificationDialogOpen] = useState(false); - const [certificationMap, setCertificationMap] = useState({}); - const [certificationName, setCertificationName] = useState(''); - const [certificationDescription, setCertificationDescription] = useState(''); - const [certifications, setCertifications] = useState([]); - const [confirmDeleteOpen, setConfirmDeleteOpen] = useState(false); - const [earnedCertifications, setEarnedCertifications] = useState([]); - const [earnedDialogOpen, setEarnedDialogOpen] = useState(false); - const [imageDialogOpen, setImageDialogOpen] = useState(false); - const [selectedCertification, setSelectedCertification] = useState(null); - const [selectedEarned, setSelectedEarned] = useState(newEarned); - const [selectedProfile, setSelectedProfile] = useState(null); - const [sortAscending, setSortAscending] = useState(true); - const [sortColumn, setSortColumn] = useState('Member'); - - const csrf = selectCsrfToken(state); - const currentUser = selectCurrentUser(state); - const profileMap = selectProfileMap(state); - const profiles = Object.values(profileMap); - profiles.sort((a, b) => a.name.localeCompare(b.name)); - - const loadCertifications = useCallback(async () => { - let res = await resolve({ - method: 'GET', - url: certificationBaseUrl, - headers: { - 'X-CSRF-Header': csrf, - Accept: 'application/json', - 'Content-Type': 'application/json;charset=UTF-8' - } - }); - if (res.error) return; - - const certs = res.payload.data; - setCertifications(certs.sort((c1, c2) => c1.name.localeCompare(c2.name))); - - const certMap = certs.reduce((map, cert) => { - map[cert.id] = cert; - return map; - }, {}); - setCertificationMap(certMap); - - res = await resolve({ - method: 'GET', - url: earnedCertificationBaseUrl, - headers: { - 'X-CSRF-Header': csrf, - Accept: 'application/json', - 'Content-Type': 'application/json;charset=UTF-8' - } - }); - if (res.error) return; - - let earned = res.payload.data; - if (onlyMe) { - earned = earned.filter(cert => cert.memberId === currentUser.id); - } - sortEarnedCertifications(earned); - setEarnedCertifications(earned); - }, []); - - useEffect(() => { - if (profileMap) { - loadCertifications(); - if (onlyMe) setSelectedProfile(currentUser); - } - }, [profileMap]); - - useEffect(() => { - if (!profileMap) return; - sortEarnedCertifications(earnedCertifications); - setEarnedCertifications([...earnedCertifications]); - }, [profileMap, sortAscending, sortColumn]); - - const addEarnedCertification = useCallback(() => { - setSelectedEarned(newEarned); - setEarnedDialogOpen(true); - }, []); - - const cancelCertification = useCallback(() => { - setCertificationName(''); - setCertificationDescription(''); - setBadgeUrl(''); - setCertificationDialogOpen(false); - }, []); - - const cancelEarnedCertification = useCallback(() => { - setCertificationName(''); - setSelectedCertification(null); - setSelectedEarned(null); - setEarnedDialogOpen(false); - }, []); - - const certificationDialog = useCallback( - () => ( - - Add Certification - - setCertificationName(e.target.value)} - value={certificationName} - /> - setCertificationDescription(e.target.value)} - value={certificationDescription} - /> - setBadgeUrl(e.target.value)} - value={badgeUrl} - /> - - - - - - - ), - [badgeUrl, certificationDialogOpen, certificationDescription, certificationName] - ); - - const confirmDelete = useCallback(earned => { - setSelectedEarned(earned); - setConfirmDeleteOpen(true); - }, []); - - const deleteEarnedCertification = useCallback(async cert => { - const res = await resolve({ - method: 'DELETE', - url: earnedCertificationBaseUrl + '/' + cert.id, - headers: { 'X-CSRF-Header': csrf } - }); - if (res.error) return; - - setEarnedCertifications(earned => earned.filter(c => c.id !== cert.id)); - }, []); - - const earnedCertificationRow = useCallback( - earned => { - const profile = profileMap[earned.memberId]; - const { validationUrl, certificationId } = earned; - const certification = certificationMap[certificationId]; - const { badgeUrl } = certification; - return ( - - {!onlyMe && {profile?.name ?? 'unknown'}} - {certificationMap[earned.certificationId]?.name ?? 'unknown'} - {certificationMap[earned.certificationId]?.description ?? 'unknown'} - {formatDate(new Date(earned.earnedDate))} - - {earned.expirationDate - ? formatDate(new Date(earned.expirationDate)) - : ''} - - selectImage(earned)} style={{ cursor: 'pointer' }}> - {validationUrl && } - - {badgeUrl && } - - - editEarnedCertification(earned)} - > - - - - - confirmDelete(earned)} - > - - - - - - ); - }, - [certificationMap, profileMap] - ); - - const earnedDialog = useCallback( - () => ( - - - {selectedEarned?.id ? 'Edit' : 'Add'} Earned Certification - - - {!onlyMe && ( - profile.name || ''} - isOptionEqualToValue={(option, value) => option.id === value.id} - onChange={(event, profile) => { - setSelectedProfile({ ...profile }); - }} - options={profiles} - renderInput={params => ( - - )} - value={selectedProfile} - /> - )} - -
    - cert?.name || 'unknown'} - isOptionEqualToValue={(option, value) => option.id === value.id} - onChange={(event, cert) => { - setSelectedCertification({ ...cert }); - }} - options={certifications} - renderInput={params => ( - - )} - value={selectedCertification} - /> - setCertificationDialogOpen(true)} - > - - -
    - - { - setSelectedEarned({ - ...selectedEarned, - earnedDate: formatDate(date) - }); - }} - /> - { - setSelectedEarned({ - ...selectedEarned, - expirationDate: formatDate(date) - }); - }} - /> - - setSelectedEarned({ - ...selectedEarned, - validationUrl: e.target.value - }) - } - value={selectedEarned?.validationUrl ?? ''} - /> -
    - - - - -
    - ), - [earnedDialogOpen, selectedCertification, selectedEarned, selectedProfile] - ); - - const tableColumnsToUse = onlyMe ? tableColumns.slice(1) : tableColumns; - - const earnedTable = useCallback( - () => ( - - } - title="Earned Certifications" - titleTypographyProps={{ variant: 'h5', component: 'h2' }} - /> - -
    - - - - {tableColumnsToUse.map(column => ( - - ))} - - - - {earnedCertifications.map(earnedCertificationRow)} -
    sortTable(column)} - style={{ cursor: 'pointer' }} - > - {column} - {sortIndicator(column)} - Actions
    - - - -
    -
    -
    - ), - [earnedCertifications, sortAscending, sortColumn] - ); - - const earnedValue = useCallback( - earned => { - const certification = certificationMap[earned.certificationId]; - switch (sortColumn) { - case 'Earned On': - return earned.earnedDate; - case 'Expiration': - return earned.expirationDate || ''; - case 'Description': - return certificationMap[earned.certificationId]?.description ?? ''; - case 'Validation Image': - return earned.validationUrl || ''; - case 'Badge': - return certification.badgeUrl || ''; - case 'Member': - const profile = profileMap[earned.memberId]; - return profile?.name ?? ''; - case 'Name': - return certificationMap[earned.certificationId]?.name ?? ''; - } - }, - [certificationMap, profileMap, sortColumn] - ); - - const editEarnedCertification = useCallback( - earned => { - setSelectedEarned(earned); - setSelectedProfile(profileMap[earned.memberId]); - setSelectedCertification(certificationMap[earned.certificationId]); - setEarnedDialogOpen(true); - }, - [certificationMap, profileMap] - ); - - const imageDialog = useCallback( - () => ( - setImageDialogOpen(false)}> - Certification Image - - {selectedEarned?.validationUrl && ( - - )} - - - ), - [imageDialogOpen, selectedEarned] - ); - - const saveCertification = useCallback(async () => { - const res = await resolve({ - method: 'POST', - url: certificationBaseUrl, - headers: { - 'X-CSRF-Header': csrf, - Accept: 'application/json', - 'Content-Type': 'application/json;charset=UTF-8' - }, - data: { - name: certificationName, - description: certificationDescription, - badgeUrl - } - }); - if (res.error) return; - - const newCert = res.payload.data; - setCertifications(certs => - [...certs, newCert].sort((c1, c2) => c1.name.localeCompare(c2.name)) - ); - setCertificationMap(map => { - map[newCert.id] = newCert; - return map; - }); - setSelectedCertification(newCert); - setCertificationName(''); - setCertificationDescription(''); - setBadgeUrl(''); - setCertificationDialogOpen(false); - forceUpdate(); - }, [certificationName, certificationDescription, badgeUrl, certifications, selectedCertification]); - - const saveEarnedCertification = useCallback(async () => { - selectedEarned.memberId = selectedProfile?.id || currentUser.id; - selectedEarned.certificationId = selectedCertification.id; - const { id } = selectedEarned; - const url = id - ? `${earnedCertificationBaseUrl}/${id}` - : earnedCertificationBaseUrl; - const res = await resolve({ - method: id ? 'PUT' : 'POST', - url, - headers: { - 'X-CSRF-Header': csrf, - Accept: 'application/json', - 'Content-Type': 'application/json;charset=UTF-8' - }, - data: selectedEarned - }); - if (res.error) return; - - const newEarned = res.payload.data; - setEarnedCertifications(earned => { - if (id) { - const index = earned.findIndex(c => c.id === id); - earned[index] = newEarned; - } else { - earned.push(newEarned); - } - return [...earned]; - }); - setSelectedProfile(null); - setSelectedCertification(null); - setEarnedDialogOpen(false); - }, [selectedCertification, selectedEarned, selectedProfile]); - - const selectImage = useCallback(earned => { - if (!earned.validationUrl) return; - setSelectedEarned(earned); - setImageDialogOpen(true); - }, []); - - const sortEarnedCertifications = useCallback( - earned => { - earned.sort((e1, e2) => { - const v1 = earnedValue(e1); - const v2 = earnedValue(e2); - const compare = sortAscending - ? v1.localeCompare(v2) - : v2.localeCompare(v1); - return compare; - }); - }, - [sortAscending, sortColumn] - ); - - const sortIndicator = useCallback( - column => { - if (column !== sortColumn) return ''; - return ' ' + (sortAscending ? '🔼' : '🔽'); - }, - [sortAscending, sortColumn] - ); - - const sortTable = useCallback( - column => { - if (column === sortColumn) { - setSortAscending(ascending => !ascending); - } else { - setSortColumn(column); - setSortAscending(true); - } - }, - [sortAscending, sortColumn] - ); - - return ( -
    - {earnedTable()} - - {imageDialog()} - {earnedDialog()} - {certificationDialog()} - - deleteEarnedCertification(selectedEarned)} - question="Are you sure you want to delete this certification?" - setOpen={setConfirmDeleteOpen} - title="Delete Certification" - /> -
    - ); -}; - -EarnedCertificationsTable.propTypes = propTypes; - -export default EarnedCertificationsTable; diff --git a/web-ui-external-feedback/src/components/checkin/Checkin.css b/web-ui-external-feedback/src/components/checkin/Checkin.css deleted file mode 100644 index a8da03b4c4..0000000000 --- a/web-ui-external-feedback/src/components/checkin/Checkin.css +++ /dev/null @@ -1,50 +0,0 @@ -.arrow { - text-decoration: none; -} - -.date-picker { - display: flex; - justify-content: center; - align-items: center; - margin-top: 50px; -} - -.date-input { - display: flex; - align-items: center; - cursor: pointer; -} - -.info { - margin-bottom: auto; - margin-left: 12px; - margin-top: auto; - text-align: left; -} - -.plus-button { - align-items: center; - background: none; - border: none; - display: flex; - cursor: pointer; - min-width: 50px; - padding-left: 0px; -} - -.profile-section { - display: flex; - justify-content: center; - align-items: center; - min-width: 50px; -} - -.react-datepicker-wrapper { - margin-left: 12px; - margin-right: 12px; -} - -.title { - display: flex; - align-items: center; -} diff --git a/web-ui-external-feedback/src/components/checkin/CheckinCycle.jsx b/web-ui-external-feedback/src/components/checkin/CheckinCycle.jsx deleted file mode 100644 index 057f87bb2d..0000000000 --- a/web-ui-external-feedback/src/components/checkin/CheckinCycle.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import cycle from './checkin-cycle.png'; - -const CheckinCycle = ({ style = { height: '35vw', width: '35vw' } }) => ( -
    - The Check-in Cycle including Expectations, Feedback, and Development -
    -); - -export default CheckinCycle; diff --git a/web-ui-external-feedback/src/components/checkin/CheckinCycle.stories.jsx b/web-ui-external-feedback/src/components/checkin/CheckinCycle.stories.jsx deleted file mode 100644 index 9fff16977f..0000000000 --- a/web-ui-external-feedback/src/components/checkin/CheckinCycle.stories.jsx +++ /dev/null @@ -1,29 +0,0 @@ -import React from 'react'; -import CheckinCycle from './CheckinCycle'; -import { AppContextProvider } from '../../context/AppContext'; - -export default { - title: 'Check-Ins/CheckinCycle', - component: CheckinCycle, - decorators: [ - Story => { - return ( - - - - ); - } - ] -}; - -const Template = args => ; - -export const NoDimensions = Template.bind({}); -NoDimensions.args = { - style: undefined -}; - -export const SetDimensions = Template.bind({}); -SetDimensions.args = { - style: { height: '5rem', width: '5rem' } -}; diff --git a/web-ui-external-feedback/src/components/checkin/CheckinCycle.test.jsx b/web-ui-external-feedback/src/components/checkin/CheckinCycle.test.jsx deleted file mode 100644 index f6a7dda258..0000000000 --- a/web-ui-external-feedback/src/components/checkin/CheckinCycle.test.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; -import CheckinCycle from './CheckinCycle'; - -const style = { backgroundColor: 'red' }; -it('renders correctly', () => { - snapshot(); -}); diff --git a/web-ui-external-feedback/src/components/checkin/CheckinHistory.jsx b/web-ui-external-feedback/src/components/checkin/CheckinHistory.jsx deleted file mode 100644 index da102d6132..0000000000 --- a/web-ui-external-feedback/src/components/checkin/CheckinHistory.jsx +++ /dev/null @@ -1,133 +0,0 @@ -import React, { useContext } from 'react'; -import { useHistory, useParams } from 'react-router-dom'; -import { UPDATE_CHECKIN } from '../../context/actions'; -import { AppContext } from '../../context/AppContext'; -import { updateCheckin } from '../../api/checkins'; -import { - selectCsrfToken, - selectCheckinsForMember, - selectProfile -} from '../../context/selectors'; -import IconButton from '@mui/material/IconButton'; -import ArrowBackIcon from '@mui/icons-material/ArrowBack'; -import ArrowForwardIcon from '@mui/icons-material/ArrowForward'; -import { MobileDateTimePicker } from '@mui/x-date-pickers'; - -import './Checkin.css'; - -const CheckinsHistory = () => { - const { state, dispatch } = useContext(AppContext); - const { checkinId, memberId } = useParams(); - const history = useHistory(); - const csrf = selectCsrfToken(state); - const selectedProfile = selectProfile(state, memberId); - - const checkins = selectCheckinsForMember(state, memberId); - const index = checkins.findIndex(checkin => checkin.id === checkinId); - - const getCheckinDate = () => { - if (checkins && checkins[index]?.checkInDate) { - const [year, month, day, hour, minute] = checkins[index].checkInDate; - return new Date(year, month - 1, day, hour, minute, 0); - } - - // Mock the date if under test so the snapshot stays consistent - const currentDate = import.meta.env.VITEST_WORKER_ID - ? new Date(2020, 9, 21) - : new Date(); - - return currentDate; - }; - - const leftArrowClass = 'arrow ' + (index > 0 ? 'enabled' : 'disabled'); - const rightArrowClass = - 'arrow ' + (index < checkins.length - 1 ? 'enabled' : 'disabled'); - - const previousCheckin = () => { - if (index > 0) { - history.push(`/checkins/${memberId}/${checkins[index - 1].id}`); - } - }; - - const nextCheckin = () => { - if (index < checkins.length - 1) { - history.push(`/checkins/${memberId}/${checkins[index + 1].id}`); - } - }; - - const pickDate = async date => { - if (csrf) { - const year = date.getFullYear(); - const month = date.getMonth() + 1; - const day = date.getDate(); - const hours = date.getHours(); - const minutes = date.getMinutes(); - const checkin = checkins[index]; - const dateArray = [year, month, day, hours, minutes, 0]; - const res = await updateCheckin( - { - ...checkin, - pdlId: selectedProfile?.pdlId, - checkInDate: dateArray - }, - csrf - ); - const updatedCheckin = - res.payload && res.payload.data && !res.error ? res.payload.data : null; - updatedCheckin && - dispatch({ type: UPDATE_CHECKIN, payload: updatedCheckin }); - } - }; - - return ( - getCheckinDate() && ( -
    - - - - - = checkins.length - 1} - aria-label="Next Check-in`" - onClick={nextCheckin} - size="large" - > - - -
    - ) - ); -}; - -export default CheckinsHistory; diff --git a/web-ui-external-feedback/src/components/checkin/CheckinHistory.stories.jsx b/web-ui-external-feedback/src/components/checkin/CheckinHistory.stories.jsx deleted file mode 100644 index 8a0fe41f04..0000000000 --- a/web-ui-external-feedback/src/components/checkin/CheckinHistory.stories.jsx +++ /dev/null @@ -1,79 +0,0 @@ -import React, { useContext, useEffect } from 'react'; -import { - AppContext, - AppContextProvider, - UPDATE_CHECKINS -} from '../../context/AppContext'; -import CheckinHistory from './CheckinHistory'; -import { createMemoryHistory } from 'history'; -import { Router } from 'react-router-dom'; - -const history = createMemoryHistory('/checkins'); - -export default { - title: 'Check-Ins/CheckinHistory', - component: CheckinHistory, - decorators: [ - Story => { - return ( - - - - - - ); - } - ] -}; -const checkins = [ - { - id: 'bbc3db2a-181d-4ddb-a2e4-7a9842cdfd78', - teamMemberId: '43ee8e79-b33d-44cd-b23c-e183894ebfef', - pdlId: '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d', - checkInDate: [2020, 9, 29, 11, 32, 29, 40000000], - completed: true - }, - { - id: 'bbc3db2a-181d-4ddb-a2e4-7a9842cdfd78', - teamMemberId: '43ee8e79-b33d-44cd-b23c-e183894ebfef', - pdlId: '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d', - checkInDate: [2020, 10, 29, 11, 32, 29, 40000000], - completed: true - }, - { - id: 'bbc3db2a-181d-4ddb-a2e4-7a9842cdfd78', - teamMemberId: '43ee8e79-b33d-44cd-b23c-e183894ebfef', - pdlId: '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d', - checkInDate: [2020, 11, 29, 11, 32, 29, 40000000], - completed: false - } -]; - -const onlyOneCheckIn = [checkins[2]]; - -const SetCheckins = ({ checkins }) => { - const { dispatch } = useContext(AppContext); - useEffect(() => { - dispatch({ type: UPDATE_CHECKINS, payload: checkins }); - }, [checkins, dispatch]); - return ''; -}; - -const Template = args => ( - - - - -); - -export const MultipleCheckIns = Template.bind({}); -MultipleCheckIns.args = { - history, - checkins -}; - -export const SingleCheckIn = Template.bind({}); -SingleCheckIn.args = { - history, - checkins: onlyOneCheckIn -}; diff --git a/web-ui-external-feedback/src/components/checkin/CheckinHistory.test.jsx b/web-ui-external-feedback/src/components/checkin/CheckinHistory.test.jsx deleted file mode 100644 index 70463ad9d5..0000000000 --- a/web-ui-external-feedback/src/components/checkin/CheckinHistory.test.jsx +++ /dev/null @@ -1,63 +0,0 @@ -import React from 'react'; -import CheckinsHistory from './CheckinHistory'; -import { AppContextProvider } from '../../context/AppContext'; -import { Router } from 'react-router-dom'; -import { createBrowserHistory } from 'history'; -import { LocalizationProvider } from '@mui/x-date-pickers'; -import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; - -const mockMemberId = 'bf9975f8-a5b2-4551-b729-afd56b49e2cc'; -const mockCheckinId = '3a1906df-d45c-4ff5-a6f8-7dacba97ff1a'; - -const initialState = { - state: { - checkins: [ - { - id: mockCheckinId, - memberId: mockMemberId, - createdbyid: '5425d835-dcd1-4d91-9540-200c06f18f28', - description: 'updated string', - checkInDate: [2020, 9, 8] - }, - { - id: '3a1906df-d45c-4ff5-a6f8-7dacba97ff1b', - memberId: 'bf9975f8-a5b2-4551-b729-afd56b49e2cc', - createdbyid: '5425d835-dcd1-4d91-9540-200c06f18f29', - description: 'second updated string', - checkInDate: [2020, 10, 18] - } - ], - userProfile: { - name: 'holmes', - role: ['MEMBER'], - imageUrl: - 'https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg' - }, - memberProfiles: [ - { - id: mockMemberId, - name: 'holmes' - } - ], - index: 0 - } -}; - -describe('CheckinHistory', () => { - it('renders correctly', async () => { - const customHistory = createBrowserHistory(); - snapshot( - - - - - - - - ); - }); -}); diff --git a/web-ui-external-feedback/src/components/checkin/CheckinProfile.jsx b/web-ui-external-feedback/src/components/checkin/CheckinProfile.jsx deleted file mode 100644 index 2de3b7863b..0000000000 --- a/web-ui-external-feedback/src/components/checkin/CheckinProfile.jsx +++ /dev/null @@ -1,55 +0,0 @@ -import React, { useContext, useEffect, useState } from 'react'; -import { getMember } from '../../api/member'; -import { AppContext } from '../../context/AppContext'; -import { getAvatarURL } from '../../api/api.js'; - -import Avatar from '@mui/material/Avatar'; - -import './Checkin.css'; -const displayName = 'CheckinProfile'; - -const CheckinProfile = () => { - const { state } = useContext(AppContext); - const { csrf, selectedProfile, userProfile } = state; - const { name, pdlId, title, workEmail } = selectedProfile - ? selectedProfile - : userProfile && userProfile.memberProfile - ? userProfile.memberProfile - : {}; - const [pdl, setPDL] = useState(); - - // Get PDL's name - useEffect(() => { - async function getPDLName() { - if (pdlId) { - let res = await getMember(pdlId, csrf); - let pdlProfile = - res.payload && res.payload.data && !res.error - ? res.payload.data - : undefined; - setPDL(pdlProfile ? pdlProfile.name : ''); - } - } - if (csrf) { - getPDLName(); - } - }, [csrf, pdlId]); - - return ( -
    - -
    -

    {name}

    -

    Job Title: {title}

    -

    PDL: {pdl}

    -

    Company Email: {workEmail}

    -
    -
    - ); -}; - -CheckinProfile.displayName = displayName; -export default CheckinProfile; diff --git a/web-ui-external-feedback/src/components/checkin/CheckinProfile.stories.jsx b/web-ui-external-feedback/src/components/checkin/CheckinProfile.stories.jsx deleted file mode 100644 index 6a43d61a8c..0000000000 --- a/web-ui-external-feedback/src/components/checkin/CheckinProfile.stories.jsx +++ /dev/null @@ -1,63 +0,0 @@ -import React, { useContext, useEffect } from 'react'; -import { - AppContext, - AppContextProvider, - MY_PROFILE_UPDATE -} from '../../context/AppContext'; -import CheckinProfile from './CheckinProfile'; - -export default { - title: 'Check-Ins/CheckinProfile', - component: CheckinProfile, - decorators: [ - Story => { - return ( - - - - ); - } - ] -}; - -const noImageProfile = { - name: 'Test User', - role: 'MEMBER', - memberProfile: { - pdlID: 123, - workEmail: 'testuser@objectcomputing.com', - name: 'Bob Jones', - title: 'Software Engineer' - } -}; - -const imageProfile = { - ...noImageProfile, - imageUrl: - 'https://thumbor.forbes.com/thumbor/960x0/https%3A%2F%2Fblogs-images.forbes.com%2Finsertcoin%2Ffiles%2F2017%2F02%2Flego-batman1.jpg' -}; - -const SetProfile = ({ profile }) => { - const { dispatch } = useContext(AppContext); - useEffect(() => { - dispatch({ type: MY_PROFILE_UPDATE, payload: profile }); - }, [profile, dispatch]); - return ''; -}; - -const Template = args => ( - - - - -); - -export const ProfileImage = Template.bind({}); -ProfileImage.args = { - profile: imageProfile -}; - -export const NoProfileImage = Template.bind({}); -NoProfileImage.args = { - profile: noImageProfile -}; diff --git a/web-ui-external-feedback/src/components/checkin/CheckinProfile.test.jsx b/web-ui-external-feedback/src/components/checkin/CheckinProfile.test.jsx deleted file mode 100644 index b2457d14d0..0000000000 --- a/web-ui-external-feedback/src/components/checkin/CheckinProfile.test.jsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import CheckinProfile from './CheckinProfile'; -import { AppContextProvider } from '../../context/AppContext'; - -const initialState = { - state: { - selectedProfile: {}, - userProfile: { - name: 'Senior Test', - memberProfile: { - pdlId: '', - title: 'Tester', - workEmail: 'test@tester.com' - }, - role: ['MEMBER'] - } - } -}; - -it('renders correctly', () => { - snapshot( - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinCycle.test.jsx.snap b/web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinCycle.test.jsx.snap deleted file mode 100644 index e3c204e2e0..0000000000 --- a/web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinCycle.test.jsx.snap +++ /dev/null @@ -1,13 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    - The Check-in Cycle including Expectations, Feedback, and Development -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinHistory.test.jsx.snap b/web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinHistory.test.jsx.snap deleted file mode 100644 index 86350db696..0000000000 --- a/web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinHistory.test.jsx.snap +++ /dev/null @@ -1,93 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`CheckinHistory > renders correctly 1`] = ` -
    -
    - -
    - -
    - - -
    -
    - -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinProfile.test.jsx.snap b/web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinProfile.test.jsx.snap deleted file mode 100644 index 4e95b3b724..0000000000 --- a/web-ui-external-feedback/src/components/checkin/__snapshots__/CheckinProfile.test.jsx.snap +++ /dev/null @@ -1,33 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    -
    - -
    -
    -

    -

    - Job Title: -

    -

    - PDL: -

    -

    - Company Email: -

    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/checkin/checkin-cycle.png b/web-ui-external-feedback/src/components/checkin/checkin-cycle.png deleted file mode 100644 index 0da0fe675c3c5f2dd49dd873fcaaaa310e782d87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1784800 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%0AwNRT<@>iJfS>_rnbCiB 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%0A0btsH>(tG#9d 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

    9eSuaXJR9-}s^;fS!J?RuPbU{2D(8{(?i{*=l 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]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≠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ν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 z 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

    b}fEPr>mB2 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 z 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 z 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�hQrIIoR_Pipu;8~brOtdfV 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 Xl$zmgo{hV)*e36 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

    PI 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

    M$DKKq%Hh#1Ht=|BSq6Dug{{~R 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 { - const { state, dispatch } = useContext(AppContext); - const { checkinId, memberId } = useParams(); - const csrf = selectCsrfToken(state); - const memberProfile = selectCurrentUser(state); - const currentUserId = memberProfile?.id; - const currentCheckin = selectCheckin(state, checkinId); - - const [loading, setLoading] = useState(false); - const [files, setFiles] = useState([]); - const [fileColors, setFileColors] = useState({}); - - const pdlorAdmin = selectIsPDL(state) || selectIsAdmin(state); - const canView = pdlorAdmin && currentUserId !== memberId; - - useEffect(() => { - async function getCheckinFiles() { - try { - let res = await getFiles(checkinId, csrf); - if (res.error) throw new Error(res.error); - let checkinFiles = - res.payload && res.payload.data && res.payload.data.length > 0 - ? res.payload.data - : null; - if (checkinFiles) { - setFiles(checkinFiles); - checkinFiles.forEach(file => { - setFileColors(fileColors => ({ - ...fileColors, - [file.name]: 'green' - })); - }); - } - } catch (e) { - console.log(e); - } - } - if (csrf) { - getCheckinFiles(); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [checkinId, csrf]); - - const handleFile = file => { - if (csrf) { - setFiles([...files, file]); - addFile(file); - } - }; - - const addFile = async file => { - let formData = new FormData(); - formData.append('file', file); - if (!file || files.includes(file)) { - setLoading(false); - return; - } - setLoading(true); - try { - let res = await uploadFile(formData, checkinId, csrf); - if (res.error) throw new Error(res.error); - const { data, status } = res.payload; - if (status !== 200 && status !== 201) { - throw new Error('status equals ' + status); - } - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'success', - toast: `${data.name} was successfully uploaded` - } - }); - setFileColors(fileColors => ({ ...fileColors, [file.name]: 'green' })); - setFiles([...files, data]); - } catch (e) { - setFileColors(fileColors => ({ ...fileColors, [file.name]: 'red' })); - console.log({ e }); - } finally { - setLoading(false); - } - }; - - const fileMapper = () => { - const divs = files.map(file => { - if (!file.name) { - return null; - } else { - let downloadUrl = '/services/files/' + file.fileId + '/download'; - return ( -
    - - {file.name} - - { - if (csrf) { - await deleteFile(file.fileId, csrf); - setFiles( - files.filter(e => { - return e.name !== file.name; - }) - ); - } - }} - size="large" - > - - -
    - ); - } - }); - return files.length > 0 ? divs : 'No files attached.'; - }; - - const hiddenFileInput = React.useRef(null); - - return canView ? ( - - } - title="Documents" - titleTypographyProps={{ variant: 'h5', component: 'h2' }} - /> - -
    {fileMapper()}
    -
    - - {loading ? ( - - ) : ( - - )} - -
    - ) : ( - '' - ); -}; - -export default UploadDocs; diff --git a/web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.stories.jsx b/web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.stories.jsx deleted file mode 100644 index a781f5d6ef..0000000000 --- a/web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.stories.jsx +++ /dev/null @@ -1,86 +0,0 @@ -import React, { useContext, useEffect } from 'react'; -import { - AppContext, - AppContextProvider, - MY_PROFILE_UPDATE, - UPDATE_CHECKINS -} from '../../../context/AppContext'; -import CheckinDocs from './CheckinDocs'; - -export default { - title: 'Check-Ins/CheckinDocs', - component: CheckinDocs, - decorators: [ - Story => { - return ( - - - - ); - } - ] -}; - -const memberProfile = { - name: 'Test User', - role: 'MEMBER', - memberProfile: { - pdlID: 123, - workEmail: 'testuser@objectcomputing.com', - name: 'Bob Jones', - title: 'Software Engineer' - }, - imageUrl: - 'https://thumbor.forbes.com/thumbor/960x0/https%3A%2F%2Fblogs-images.forbes.com%2Finsertcoin%2Ffiles%2F2017%2F02%2Flego-batman1.jpg' -}; - -const pdlProfile = { - ...memberProfile, - role: 'PDL' -}; - -const SetProfile = ({ profile }) => { - const { dispatch } = useContext(AppContext); - useEffect(() => { - dispatch({ type: MY_PROFILE_UPDATE, payload: profile }); - }, [profile, dispatch]); - return ''; -}; - -const checkins = [ - { - id: 'bbc3db2a-181d-4ddb-a2e4-7a9842cdfd78', - teamMemberId: '43ee8e79-b33d-44cd-b23c-e183894ebfef', - pdlId: '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d', - checkInDate: [2020, 9, 29, 11, 32, 29, 40000000], - completed: true - } -]; - -const SetCheckins = ({ checkins }) => { - const { dispatch } = useContext(AppContext); - useEffect(() => { - dispatch({ type: UPDATE_CHECKINS, payload: checkins }); - }, [checkins, dispatch]); - return ''; -}; - -const Template = args => ( - - - - - -); - -export const PDLNoCurrentDocs = Template.bind({}); -PDLNoCurrentDocs.args = { - profile: pdlProfile, - checkins -}; - -export const MemberDocs = Template.bind({}); -MemberDocs.args = { - profile: memberProfile, - checkins -}; diff --git a/web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.test.jsx b/web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.test.jsx deleted file mode 100644 index 88bd1ac4b4..0000000000 --- a/web-ui-external-feedback/src/components/checkin/documents/CheckinDocs.test.jsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -import CheckinDocs from './CheckinDocs'; -import { AppContextProvider } from '../../../context/AppContext'; -import { Router } from 'react-router-dom'; -import { createBrowserHistory } from 'history'; - -const initialState = { - state: { - checkins: [ - { - id: '3a1906df-d45c-4ff5-a6f8-7dacba97ff1a', - checkinid: 'bf9975f8-a5b2-4551-b729-afd56b49e2cc', - createdbyid: '5425d835-dcd1-4d91-9540-200c06f18f28', - description: 'updated string', - checkInDate: [2020, 9, 8] - }, - { - id: '3a1906df-d45c-4ff5-a6f8-7dacba97ff1b', - checkinid: 'bf9975f8-a5b2-4551-b729-afd56b49e2cd', - createdbyid: '5425d835-dcd1-4d91-9540-200c06f18f29', - description: 'second updated string', - checkInDate: [2020, 10, 18] - } - ], - currentCheckin: [{ id: '10-982409128354' }], - userProfile: { - memberProfile: { - id: '130u410234' - }, - name: 'holmes', - role: ['ADMIN'], - imageUrl: - 'https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg' - }, - index: 0 - } -}; - -it('renders correctly', async () => { - const customHistory = createBrowserHistory(); - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/checkin/documents/FileUploader.jsx b/web-ui-external-feedback/src/components/checkin/documents/FileUploader.jsx deleted file mode 100644 index 60f1197b7b..0000000000 --- a/web-ui-external-feedback/src/components/checkin/documents/FileUploader.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import React, { useContext } from 'react'; -import { useParams } from 'react-router-dom'; -import { AppContext } from '../../../context/AppContext'; -import { selectCheckin } from '../../../context/selectors'; -import Button from '@mui/material/Button'; -import AddCircleIcon from '@mui/icons-material/AddCircle'; -// Style the Button component - -const FileUploader = ({ fileRef, handleFile }) => { - const { state } = useContext(AppContext); - const { checkinId } = useParams(); - const currentCheckin = selectCheckin(state, checkinId); - - // Programmatically click the hidden file input element when the Button component is clicked - const handleClick = event => { - fileRef.current.click(); - }; - // Call a function (passed as a prop from the parent component) to handle the user-selected file - const handleChange = event => { - const fileUploaded = event.target.files[0]; - handleFile(fileUploaded); - }; - return ( - <> - - - - ); -}; - -export default FileUploader; diff --git a/web-ui-external-feedback/src/components/checkin/documents/__snapshots__/CheckinDocs.test.jsx.snap b/web-ui-external-feedback/src/components/checkin/documents/__snapshots__/CheckinDocs.test.jsx.snap deleted file mode 100644 index 10a6790657..0000000000 --- a/web-ui-external-feedback/src/components/checkin/documents/__snapshots__/CheckinDocs.test.jsx.snap +++ /dev/null @@ -1,76 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    -
    -
    - -
    -
    -

    - Documents -

    -
    -
    -
    -
    - No files attached. -
    -
    -
    - - -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/contribution_hours/ProgressBar.jsx b/web-ui-external-feedback/src/components/contribution_hours/ProgressBar.jsx deleted file mode 100644 index fbc1417453..0000000000 --- a/web-ui-external-feedback/src/components/contribution_hours/ProgressBar.jsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; -import { styled } from '@mui/material/styles'; -import PropTypes from 'prop-types'; -import LinearProgress from '@mui/material/LinearProgress'; -import Typography from '@mui/material/Typography'; -import Box from '@mui/material/Box'; - -const PREFIX = 'LinearBuffer'; -const classes = { - root: `${PREFIX}-root` -}; - -const Root = styled('div')({ - [`&.${classes.root}`]: { - width: '100%' - } -}); - -function LinearProgressWithLabel(props) { - return ( - - - - - - ); -} - -const propTypes = { - /** - * The value of the progress indicator for the determinate and buffer variants. - * Value between 0 and 100. - */ - billableHours: PropTypes.number, - contributionHours: PropTypes.number.isRequired, - targetHours: PropTypes.number.isRequired, - ptoHours: PropTypes.number, - billableUtilization: PropTypes.number, - overtimeWorked: PropTypes.number, -}; - -const LinearBuffer = ({ - billableHours, - contributionHours = 925, - targetHours = 1850, - ptoHours = 0, - billableUtilization, - overtimeWorked, -}) => { - return ( - - - - Billable Hours: {billableHours} - Contribution Hours:{' '} - {contributionHours} - Target Hours: {targetHours} - PTO Hours:{' '} {ptoHours} - Billable Utilization:{' '} {(billableUtilization) ? billableUtilization : '(none)'} - Overtime Worked:{' '} {(overtimeWorked) ? overtimeWorked : '(none)'} - - - ); -}; -LinearBuffer.propTypes = propTypes; -export default LinearBuffer; diff --git a/web-ui-external-feedback/src/components/contribution_hours/ProgressBar.stories.jsx b/web-ui-external-feedback/src/components/contribution_hours/ProgressBar.stories.jsx deleted file mode 100644 index 961cc9155d..0000000000 --- a/web-ui-external-feedback/src/components/contribution_hours/ProgressBar.stories.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import ProgressBar from './ProgressBar'; - -export default { - title: 'Check Ins/ProgressBar', - component: ProgressBar -}; -const Template = args => ; - -export const DefaultBar = Template.bind({}); -DefaultBar.args = {}; diff --git a/web-ui-external-feedback/src/components/contribution_hours/ProgressBar.test.jsx b/web-ui-external-feedback/src/components/contribution_hours/ProgressBar.test.jsx deleted file mode 100644 index 4efa37168e..0000000000 --- a/web-ui-external-feedback/src/components/contribution_hours/ProgressBar.test.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import ProgressBar from './ProgressBar'; -import renderer from 'react-test-renderer'; - -it('has billable hours', () => { - snapshot(); -}); - -it('has no billable hours', () => { - snapshot(); -}); diff --git a/web-ui-external-feedback/src/components/contribution_hours/__snapshots__/ProgressBar.test.jsx.snap b/web-ui-external-feedback/src/components/contribution_hours/__snapshots__/ProgressBar.test.jsx.snap deleted file mode 100644 index f9b1f0e150..0000000000 --- a/web-ui-external-feedback/src/components/contribution_hours/__snapshots__/ProgressBar.test.jsx.snap +++ /dev/null @@ -1,105 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`has billable hours 1`] = ` -
    -
    -
    -
    - - - -
    -
    -

    - Billable Hours: - - Contribution Hours: - - 925 - - Target Hours: - 1850 - - PTO Hours: - - - 0 - - Billable Utilization: - - - (none) - - Overtime Worked: - - - (none) -

    -
    -
    -`; - -exports[`has no billable hours 1`] = ` -
    -
    -
    -
    - - - -
    -
    -

    - Billable Hours: - - Contribution Hours: - - 925 - - Target Hours: - 1850 - - PTO Hours: - - - 0 - - Billable Utilization: - - - (none) - - Overtime Worked: - - - (none) -

    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/date-picker-field/DatePickerField.css b/web-ui-external-feedback/src/components/date-picker-field/DatePickerField.css deleted file mode 100644 index 09e02ebc04..0000000000 --- a/web-ui-external-feedback/src/components/date-picker-field/DatePickerField.css +++ /dev/null @@ -1,18 +0,0 @@ -.date-picker-field { - display: flex; - - .MuiFormControl-root { - width: auto; - } -} - -.date-pickers-container { - display: flex; -} - -.date-pickers-row { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1rem; -} diff --git a/web-ui-external-feedback/src/components/date-picker-field/DatePickerField.jsx b/web-ui-external-feedback/src/components/date-picker-field/DatePickerField.jsx deleted file mode 100644 index 060e5c2181..0000000000 --- a/web-ui-external-feedback/src/components/date-picker-field/DatePickerField.jsx +++ /dev/null @@ -1,52 +0,0 @@ -import dayjs from 'dayjs'; -import React, { useRef, useEffect, useState } from 'react'; -import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'; -import { DatePicker } from '@mui/x-date-pickers/DatePicker'; -import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'; -import './DatePickerField.css'; - -export default function DatePickerField({ - date, - setDate, - label, - disabled, - open -}) { - const [cleared, setCleared] = useState(false); - const launchDatePickerRef = useRef(null); - - useEffect(() => { - if (cleared) { - requestAnimationFrame(() => { - setCleared(false); - }); - } - }, [cleared]); - - // This opens the DatePicker for the launch date if the open prop is set to true. - useEffect(() => { - const { current } = launchDatePickerRef; - if (current && open) { - const button = current.querySelector('button'); - button?.click(); - } - }, [launchDatePickerRef.current]); - - return ( -
    - - setCleared(true) } - }} - value={date ? dayjs(date) : null} - /> - -
    - ); -} diff --git a/web-ui-external-feedback/src/components/dialogs/AlertDialog.jsx b/web-ui-external-feedback/src/components/dialogs/AlertDialog.jsx deleted file mode 100644 index 03f4888ffb..0000000000 --- a/web-ui-external-feedback/src/components/dialogs/AlertDialog.jsx +++ /dev/null @@ -1,36 +0,0 @@ -import PropTypes from 'prop-types'; - -import { - Button, - Dialog, - DialogActions, - DialogContent, - DialogContentText, - DialogTitle -} from '@mui/material'; - -const propTypes = { - message: PropTypes.string.isRequired, - open: PropTypes.bool.isRequired, - setOpen: PropTypes.func.isRequired, - title: PropTypes.string -}; - -const AlertDialog = ({ message, open, setOpen, title = 'Alert' }) => ( - - {title} - - {message} - - - - - -); - -AlertDialog.propTypes = propTypes; -AlertDialog.displayName = 'AlertDialog'; - -export default AlertDialog; diff --git a/web-ui-external-feedback/src/components/dialogs/ConfirmationDialog.jsx b/web-ui-external-feedback/src/components/dialogs/ConfirmationDialog.jsx deleted file mode 100644 index ef7e9f8cc4..0000000000 --- a/web-ui-external-feedback/src/components/dialogs/ConfirmationDialog.jsx +++ /dev/null @@ -1,59 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { useCallback } from 'react'; - -import { - Button, - Dialog, - DialogActions, - DialogContent, - DialogContentText, - DialogTitle -} from '@mui/material'; - -const propTypes = { - onNo: PropTypes.func, - onYes: PropTypes.func.isRequired, - open: PropTypes.bool.isRequired, - question: PropTypes.string.isRequired, - setOpen: PropTypes.func.isRequired, - title: PropTypes.string -}; - -const ConfirmationDialog = ({ - onNo, - onYes, - open, - question, - setOpen, - title = 'Confirm' -}) => { - const handleNo = useCallback(() => { - setOpen(false); - if (onNo) onNo(); - }, [onNo, setOpen]); - - const handleYes = useCallback(() => { - setOpen(false); - onYes(); - }, [onYes, setOpen]); - - return ( - - {title} - - {question} - - - - - - - ); -}; - -ConfirmationDialog.propTypes = propTypes; -ConfirmationDialog.displayName = 'ConfirmationDialog'; - -export default ConfirmationDialog; diff --git a/web-ui-external-feedback/src/components/dialogs/OrganizationDialog.jsx b/web-ui-external-feedback/src/components/dialogs/OrganizationDialog.jsx deleted file mode 100644 index b227144f28..0000000000 --- a/web-ui-external-feedback/src/components/dialogs/OrganizationDialog.jsx +++ /dev/null @@ -1,61 +0,0 @@ -import React from 'react'; -import { Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField } from '@mui/material'; -import PropTypes from 'prop-types'; - -const OrganizationDialog = ({ - open, - onClose, - onSave, - organization, - setOrganization -}) => { - return ( - - Create New Organization - - {/* This section no longer includes the option to select an existing organization */} - setOrganization({ ...organization, name: e.target.value })} - required - /> - setOrganization({ ...organization, description: e.target.value })} - required - /> - setOrganization({ ...organization, website: e.target.value })} - /> - - - - - - - ); -}; - -OrganizationDialog.propTypes = { - open: PropTypes.bool.isRequired, - onClose: PropTypes.func.isRequired, - onSave: PropTypes.func.isRequired, - organization: PropTypes.shape({ - name: PropTypes.string, - description: PropTypes.string, - website: PropTypes.string - }).isRequired, - setOrganization: PropTypes.func.isRequired -}; - -export default OrganizationDialog; \ No newline at end of file diff --git a/web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.jsx b/web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.jsx deleted file mode 100644 index e907980211..0000000000 --- a/web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.jsx +++ /dev/null @@ -1,153 +0,0 @@ -import React from 'react'; -import { styled } from '@mui/material/styles'; -import Typography from '@mui/material/Typography'; -import Slider from '@mui/material/Slider'; -import Tooltip from '@mui/material/Tooltip'; - -const Root = styled('div')(({ theme }) => ({ - '& .MuiSlider-markLabel': { - [theme.breakpoints.down('md')]: { - fontSize: '0.525rem' - }, - [theme.breakpoints.between('sm', 'lg')]: { - fontSize: '0.525rem' - }, - [theme.breakpoints.between('md', 'xl')]: { - fontSize: '0.775rem' - }, - [theme.breakpoints.up('lg')]: { - fontSize: '0.875rem' - } - } -})); - -const DiscreteSlider = ({ - title, - onChange, - onChangeCommitted, - inMarks, - inStartPos -}) => { - const defaultMarks = [ - { - value: 1, - label: 'Interested', - tooltip: - 'You have an interest in this skill and, perhaps, common knowledge or an understanding of its basic techniques and concepts.', - tooltipChildren: ['Focus on learning.'] - }, - { - value: 2, - label: 'Novice', - tooltip: - 'You have the level of experience gained in a classroom, experimental scenarios, or via other training. You are expected to need help when performing this skill.', - tooltipChildren: [ - 'Focus on developing through experience.', - 'You understand and can discuss terminology, concepts, principles and issues related to this skill.', - 'You rely heavily on reference and resource materials to be effective with this skill.' - ] - }, - { - value: 3, - label: 'Intermediate', - tooltip: - 'You are able to successfully complete tasks in this competency as requested. Help from an expert may be required from time to time, but you can usually perform the skill independently.', - tooltipChildren: [ - 'Focus on applying and enhancing knowledge or skill.', - 'You have applied this competency to situations, while occasionally needing minimal guidance to perform successfully.', - 'You understand and can discuss the application and implications of changes to processes and procedures in this area.' - ] - }, - { - value: 4, - label: 'Advanced', - tooltip: - 'You can perform the actions associated with this skill without assistance. You are certainly recognized within your immediate organization as "a person to ask" when difficult questions arise regarding this skill.', - tooltipChildren: [ - 'Focus on broad organizational/professional issues.', - 'You have consistently provided relevant ideas and perspectives on process or practice improvements as relate to this skill.', - 'You are capable of coaching others in the application of this skill.', - 'You participate in senior level discussions regarding this skill.', - 'You assist in the development of reference and resource materials related to this skill.' - ] - }, - { - value: 5, - label: 'Expert', - tooltip: - 'You are known as an expert in this area. You can provide guidance, troubleshoot and answer questions related to this skill.', - tooltipChildren: [ - 'Focus on the strategic.', - 'You have demonstrated consistent excellence in applying this competency across multiple projects or organizations.', - 'You are considered the “go to” person for this skill within OCI or externally.', - 'You create new applications for or lead the development of reference and resource materials for this skill.', - 'You are able to explain relevant topics, issues, process elements, and trends in sufficient detail during discussions and presentations as to foster a greater understanding among internal and external colleagues.' - ] - } - ]; - - const marks = inMarks ? inMarks : defaultMarks; - - const formatTooltipTitle = (title, children) => { - return ( -
    -
    {title}
    -
      - {children && - children.map(child => { - return
    • {child}
    • ; - })} -
    -
    - ); - }; - - const ValueLabelComponent = props => { - let thisMark = marks.find(mark => mark.value === props.value); - if (!thisMark) { - return ''; - } - return ( - - {props.children} - - ); - }; - - const startPos = inStartPos - ? Number(inStartPos) - : Math.ceil(marks.length / 2); - - return ( -
    - - {title} - - - `${value}`} - step={null} - marks={marks} - onChange={onChange} - onChangeCommitted={onChangeCommitted} - /> - -
    - ); -}; - -export default DiscreteSlider; diff --git a/web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.stories.jsx b/web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.stories.jsx deleted file mode 100644 index 355c5ade79..0000000000 --- a/web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.stories.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import DiscreteSlider from './DiscreteSlider'; - -export default { - title: 'Check Ins/DiscreteSlider', - component: DiscreteSlider -}; -const Template = args => ; - -export const DefaultSlider = Template.bind({}); -DefaultSlider.args = { - title: 'Some skill', - lastUsed: undefined -}; - -export const SliderWithChangeHandler = Template.bind({}); -SliderWithChangeHandler.args = { - onChangeCommitted: (event, value) => { - window.alert(value); - } -}; - -export const SliderWithLastUsed = Template.bind({}); -SliderWithLastUsed.args = { - title: 'Other Skill', - lastUsed: 'Currently Used' -}; diff --git a/web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.test.tsx b/web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.test.tsx deleted file mode 100644 index cec6492351..0000000000 --- a/web-ui-external-feedback/src/components/discrete_slider/DiscreteSlider.test.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; -// @ts-ignore -import DiscreteSlider from './DiscreteSlider'; - -vi.mock('@mui/material/Slider', () => { - return { - default: () => (props: any) => { - const { onChange, 'data-testid': testId, ...rest } = props; - - return ( - { - onChange(null, parseInt(event.target.value, 10)); - }} - {...rest} - /> - ); - } - }; -}); - -describe('DiscreteSlider', () => { - it('renders slider with title', () => { - // @ts-ignore - snapshot(, { - createNodeMock: (element: any) => { - if (element.type === 'div') { - return { - addEventListener: vi.fn() - }; - } - } - }); - }); -}); diff --git a/web-ui-external-feedback/src/components/discrete_slider/__snapshots__/DiscreteSlider.test.tsx.snap b/web-ui-external-feedback/src/components/discrete_slider/__snapshots__/DiscreteSlider.test.tsx.snap deleted file mode 100644 index 34e4af06e8..0000000000 --- a/web-ui-external-feedback/src/components/discrete_slider/__snapshots__/DiscreteSlider.test.tsx.snap +++ /dev/null @@ -1,19 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`DiscreteSlider > renders slider with title 1`] = ` -
    -
    -

    - Some skill -

    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/earned-certifications/EarnedCertificationBadges.css b/web-ui-external-feedback/src/components/earned-certifications/EarnedCertificationBadges.css deleted file mode 100644 index 4e7b06cada..0000000000 --- a/web-ui-external-feedback/src/components/earned-certifications/EarnedCertificationBadges.css +++ /dev/null @@ -1,10 +0,0 @@ -.earned-certification-badges { - img { - max-height: 5rem; - } - - .MuiCardContent-root { - display: flex; - gap: 1rem; - } -} diff --git a/web-ui-external-feedback/src/components/earned-certifications/EarnedCertificationBadges.jsx b/web-ui-external-feedback/src/components/earned-certifications/EarnedCertificationBadges.jsx deleted file mode 100644 index 6c012ef9c0..0000000000 --- a/web-ui-external-feedback/src/components/earned-certifications/EarnedCertificationBadges.jsx +++ /dev/null @@ -1,142 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { useCallback, useContext, useEffect, useState } from 'react'; - -import {Card, CardContent, CardHeader, Chip, Tooltip} from '@mui/material'; - -import { resolve } from '../../api/api.js'; -import { AppContext } from '../../context/AppContext'; -import { selectCsrfToken } from '../../context/selectors'; - -import './EarnedCertificationBadges.css'; -import certifications from "../certifications/Certifications.jsx"; - -const earnedCertificationBaseUrl = '/services/earned-certification'; - -const propTypes = { - memberId: PropTypes.string, certifications: PropTypes.array, -}; -const EarnedCertificationBadges = ({ memberId, certifications }) => { - const [earnedCertifications, setEarnedCertifications] = useState([]); - - const { state } = useContext(AppContext); - const csrf = selectCsrfToken(state); - - const loadCertifications = useCallback(async () => { - const res = await resolve({ - method: 'GET', - url: earnedCertificationBaseUrl + '?memberId=' + memberId, - headers: { - 'X-CSRF-Header': csrf, - Accept: 'application/json', - 'Content-Type': 'application/json;charset=UTF-8' - } - }); - if (res.error) return; - - const certifications = res.payload.data; - setEarnedCertifications(certifications); - }, [csrf]); - - useEffect(() => { - if (csrf) loadCertifications(); - }, [csrf]); - - if (earnedCertifications.length === 0 || !certifications) return null; - return ( - - - - {earnedCertifications.map(earnedCert => { - // Find the corresponding certification using earnedCert.certificationId - const cert = certifications.find(c => c.id === earnedCert.certificationId); - // If no matching cert is found, skip rendering for that earnedCert - if (!cert) return null; - if (cert.badgeUrl && cert.badgeUrl.trim().length > 0) { - return ( - - {cert.name}
    - Issued on: {earnedCert.earnedDate}
    - Expires on: {earnedCert.expirationDate} - - } - > - {earnedCert.validationUrl ? ( - - {`${cert.name}, - - ) : ( - {`${cert.name}, - )} -
    - ); - } else { - return ( - <> - {earnedCert.validationUrl ? ( - - - {cert.name}
    - Issued on: {earnedCert.earnedDate}
    - Expires on: {earnedCert.expirationDate} - - } - /> -
    - ) : ( - - {cert.name}
    - Issued on: {earnedCert.earnedDate}
    - Expires on: {earnedCert.expirationDate} - - } - /> - )} - - ); - } - })} -
    -
    - ); - -}; - -EarnedCertificationBadges.propTypes = propTypes; - -export default EarnedCertificationBadges; diff --git a/web-ui-external-feedback/src/components/edit_skills/EditSkills.css b/web-ui-external-feedback/src/components/edit_skills/EditSkills.css deleted file mode 100644 index 2bad28a092..0000000000 --- a/web-ui-external-feedback/src/components/edit_skills/EditSkills.css +++ /dev/null @@ -1,62 +0,0 @@ -.combine-skills-modal { - position: absolute; - min-width: 400px; - max-width: 600px; - background-color: var(--checkins-palette-background-default); - top: 50%; - left: 50%; - padding: 0.5rem; - transform: translate(-50%, -50%); - border: 2px solid #fff; -} - -.combine-skills-modal h2 { - margin-block-end: 0rem; - margin-left: 0.5rem; -} - -.combine-skills-modal-actions { - margin-top: 1rem; - width: calc(100% - 1rem); - display: flex; - flex-direction: row; - justify-content: flex-end; -} - -.combine-skills-modal .MuiTextField-root.fullWidth { - width: calc(100% - 1rem); -} - -.combine-skills-modal .MuiTextField-root.halfWidth { - width: calc(100% - 1rem); -} - -.combine-skills-modal .MuiTextField-root { - margin: 0.5rem; - width: calc(100% - 1rem); -} - -.pending-skills-modal { - position: absolute; - min-width: 400px; - max-width: 600px; - background-color: var(--checkins-palette-background-default); - top: 50%; - left: 50%; - padding: 0.5rem; - transform: translate(-50%, -50%); - border: 2px solid #fff; -} - -.pending-skills-modal .MuiTextField-root.fullWidth { - width: calc(100% - 1rem); -} - -.pending-skills-modal .MuiTextField-root.halfWidth { - width: calc(100% - 1rem); -} - -.pending-skills-modal .MuiTextField-root { - margin: 0.5rem; - width: calc(100% - 1rem); -} diff --git a/web-ui-external-feedback/src/components/edit_skills/EditSkillsCard.jsx b/web-ui-external-feedback/src/components/edit_skills/EditSkillsCard.jsx deleted file mode 100644 index 09a22d0f48..0000000000 --- a/web-ui-external-feedback/src/components/edit_skills/EditSkillsCard.jsx +++ /dev/null @@ -1,210 +0,0 @@ -import React, { useContext, useEffect, useState } from 'react'; - -import { - deleteMemberSkill, - getSkillMembers, - getMemberSkills -} from '../../api/memberskill'; -import { removeSkill, updateSkill } from '../../api/skill'; -import { AppContext } from '../../context/AppContext'; -import { selectProfileMap } from '../../context/selectors'; -import { - DELETE_SKILL, - UPDATE_SKILL, - UPDATE_MEMBER_SKILLS -} from '../../context/actions'; -import { getAvatarURL } from '../../api/api.js'; - -import { - Avatar, - Button, - Chip, - Card, - CardActions, - CardHeader, - CardContent, - Modal, - TextField -} from '@mui/material'; - -import './EditSkills.css'; - -const EditSkillsCard = ({ skill }) => { - const { state, dispatch } = useContext(AppContext); - const { csrf } = state; - - const [members, setMembers] = useState([]); - - const [open, setOpen] = useState(false); - const [editedSkill, setEditedSkill] = useState(skill); - const { description, id, name } = editedSkill; - - const handleOpen = () => { - setOpen(true); - setEditedSkill(skill); - }; - const handleClose = () => { - setOpen(false); - }; - - const editSkill = async () => { - if (name && id && csrf) { - const res = await updateSkill(editedSkill, csrf); - const data = - res && res.payload && res.payload.data ? res.payload.data : null; - if (!data) { - return; - } - dispatch({ type: UPDATE_SKILL, payload: data }); - setEditedSkill(data); - handleClose(); - } - }; - - const acceptSkill = async () => { - if (name && id && csrf) { - const res = await updateSkill({ ...editedSkill, pending: false }, csrf); - const data = - res && res.payload && res.payload.data ? res.payload.data : null; - if (!data) { - return; - } - dispatch({ type: UPDATE_SKILL, payload: data }); - handleClose(); - } - }; - - const setExtraneous = async () => { - if (name && id && csrf) { - const res = await updateSkill( - { ...editedSkill, pending: false, extraneous: true }, - csrf - ); - const data = - res && res.payload && res.payload.data ? res.payload.data : null; - if (!data) { - return; - } - dispatch({ type: UPDATE_SKILL, payload: data }); - handleClose(); - } - }; - - const deleteSkill = async () => { - if (name && id && csrf) { - const memberSkillsToDelete = await getSkillMembers(id, csrf); - if (memberSkillsToDelete) { - //remove all memberSkills associated with this skill first - await Promise.all( - memberSkillsToDelete.payload.data.map( - async member => await deleteMemberSkill(member.id, csrf) - ) - ); - } - await removeSkill(id, csrf); - dispatch({ type: DELETE_SKILL, payload: id }); - const result = await getMemberSkills(csrf); - const memberSkills = - result && result.payload && result.payload.data - ? result.payload.data - : null; - if (memberSkills) { - dispatch({ type: UPDATE_MEMBER_SKILLS, payload: memberSkills }); - } - } - }; - - useEffect(() => { - const getMembers = async () => { - let res = await getSkillMembers(id, csrf); - if (res && res.payload && res.payload.data) { - const memberIds = res.payload.data.map(m => m.memberid); - setMembers(memberIds); - } - }; - if (csrf) { - getMembers(); - } - }, [csrf, id]); - - const chip = position => { - return ( - } - label={position?.name} - > - ); - }; - - const submittedBy = members => { - const [first, second, ...rest] = members; - const firstProfile = selectProfileMap(state)[first]; - if (second) { - const secondProfile = selectProfileMap(state)[second]; - return rest.length ? ( -
    - Submitted By: {chip(firstProfile)} {chip(secondProfile)} - {rest && ` and ${rest.length} others`}. -
    - ) : ( -
    - Submitted By: {chip(firstProfile)} {chip(secondProfile)} -
    - ); - } else - return firstProfile ? ( -
    - Submitted by: {chip(firstProfile)} -
    - ) : ( -
    Submitted by: Unknown
    - ); - }; - - return ( - - - -
    {members && submittedBy(members)}
    -
    - - {skill.pending && } - - - {skill.pending && ( - - )} - -
    - - setEditedSkill({ ...editedSkill, name: e.target.value }) - } - value={editedSkill ? editedSkill.name : ''} - variant="outlined" - /> - - setEditedSkill({ - ...editedSkill, - description: e.target.value - }) - } - value={editedSkill ? editedSkill.description : ''} - variant="outlined" - /> - - -
    -
    -
    -
    - ); -}; - -export default EditSkillsCard; diff --git a/web-ui-external-feedback/src/components/edit_skills/EditSkillsCard.test.jsx b/web-ui-external-feedback/src/components/edit_skills/EditSkillsCard.test.jsx deleted file mode 100644 index a5c7f197bf..0000000000 --- a/web-ui-external-feedback/src/components/edit_skills/EditSkillsCard.test.jsx +++ /dev/null @@ -1,110 +0,0 @@ -import React from 'react'; -import EditSkillsCard from './EditSkillsCard'; -import EditSkillsPage from '../../pages/EditSkillsPage'; -import { AppContextProvider } from '../../context/AppContext'; -import { http, HttpResponse } from 'msw'; -import { setupServer } from 'msw/node'; -import { BrowserRouter } from 'react-router-dom'; - -const currentUserProfile = { - id: 9876, - pdlId: 8765, - name: 'Current User', - firstName: 'Current', - lastName: 'User' -}; - -const initialState = { - state: { - csrf: 'blah', - userProfile: { - name: 'Current User', - firstName: 'Current', - lastName: 'User', - role: ['MEMBER'], - permissions: [{ permission: 'CAN_VIEW_SKILLS_REPORT' }], - imageUrl: - 'https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg', - memberProfile: currentUserProfile - }, - skills: [ - { id: '918275', name: 'skill1', description: 'first' }, - { id: '9183455', name: 'skill2', description: 'second' } - ], - checkins: [], - guilds: [], - teams: [], - roles: [], - userRoles: [], - memberSkills: [], - index: 0, - memberProfiles: [ - currentUserProfile, - { id: 123, name: 'Guild Leader' }, - { id: 124, name: 'Other Leader' }, - { id: 125, name: 'Guild Member' }, - { id: 126, name: 'Other Member' } - ] - } -}; - -const pendingSkill = { - extraneous: false, - id: '1134511f3e-7ab7-4edf-86f5-ab0b0a0d2ca9', - name: 'Le test skill', - pending: false, - description: 'le description' -}; - -let open = true; -const handleClose = () => (open = false); - -const server = setupServer( - http.get('http://localhost:8080/services/member-skills', ({ request }) => { - return HttpResponse.json([ - { - id: '74422962-03ef-4957-b713-11def435db1d', - memberid: currentUserProfile.id, - skillid: pendingSkill.id, - skilllevel: '3' - } - ]); - }) -); - -beforeAll(() => server.listen()); -afterEach(() => server.resetHandlers()); -afterAll(() => server.close()); - -describe('EditSkillsCard', () => { - it('renders correctly with skill', async () => { - await waitForSnapshot( - 'skill-submitted-by', - - - - - - ); - }); - - it('renders correctly', () => { - snapshot( - - - - - - ); - }); - - it('renders an error if user does not have appropriate permission', () => { - snapshot( - - - - - - ); - }); -}); diff --git a/web-ui-external-feedback/src/components/edit_skills/EditSkillsModal.jsx b/web-ui-external-feedback/src/components/edit_skills/EditSkillsModal.jsx deleted file mode 100644 index b9b3d539a9..0000000000 --- a/web-ui-external-feedback/src/components/edit_skills/EditSkillsModal.jsx +++ /dev/null @@ -1,144 +0,0 @@ -import React, { useContext, useEffect, useState } from 'react'; -import { AppContext } from '../../context/AppContext'; -import { - ADD_SKILL, - DELETE_SKILL, - UPDATE_MEMBER_SKILLS -} from '../../context/actions'; -import { combineSkill } from '../../api/skill'; -import { getMemberSkills } from '../../api/memberskill'; - -import Autocomplete from '@mui/material/Autocomplete'; -import { Button, Checkbox, Modal, TextField } from '@mui/material'; -import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank'; -import CheckBoxIcon from '@mui/icons-material/CheckBox'; - -import './EditSkills.css'; - -const icon = ; -const checkedIcon = ; - -const EditSkillsModal = ({ open, onClose, skillsToEdit }) => { - const { state, dispatch } = useContext(AppContext); - const { csrf } = state; - const [pendingSkills, setPendingSkills] = useState([]); - const [combinedSkill, setCombinedSkill] = useState({ - name: '', - description: '', - skillsToCombine: [] - }); - const { skillsToCombine, name } = combinedSkill; - - useEffect(() => { - setPendingSkills(skillsToEdit); - }, [skillsToEdit, state]); - - const handleSelections = (event, values) => { - let skills = values.map(skill => { - return skill.id; - }); - setCombinedSkill({ - ...combinedSkill, - skillsToCombine: skills - }); - }; - - const close = () => { - onClose(); - setCombinedSkill({ - name: '', - description: '', - skillsToCombine: '' - }); - }; - - const save = async () => { - if (name && skillsToCombine && csrf) { - const res = await combineSkill({ ...combinedSkill, pending: true }, csrf); - const data = - res && res.payload && res.payload.data ? res.payload.data : null; - if (!data) { - return; - } - skillsToCombine.forEach(id => - dispatch({ type: DELETE_SKILL, payload: id }) - ); - dispatch({ type: ADD_SKILL, payload: data }); - const result = await getMemberSkills(csrf); - const memberSkills = - result && result.payload && result.payload.data - ? result.payload.data - : null; - if (memberSkills) { - dispatch({ type: UPDATE_MEMBER_SKILLS, payload: memberSkills }); - } - close(); - } - }; - - return ( - - {pendingSkills && ( -
    - option.name} - onChange={handleSelections} - renderOption={(props, option, { selected }) => ( -
  • - - {option.name} -
  • - )} - style={{ width: 500 }} - renderInput={params => ( - - )} - /> - { - setCombinedSkill({ ...combinedSkill, name: e.target.value }); - }} - value={combinedSkill ? combinedSkill.name : ''} - variant="outlined" - /> - { - setCombinedSkill({ - ...combinedSkill, - description: e.target.value - }); - }} - value={combinedSkill ? combinedSkill.description : ''} - variant="outlined" - /> -
    - - -
    -
    - )} -
    - ); -}; -export default EditSkillsModal; diff --git a/web-ui-external-feedback/src/components/edit_skills/__snapshots__/EditSkillsCard.test.jsx.snap b/web-ui-external-feedback/src/components/edit_skills/__snapshots__/EditSkillsCard.test.jsx.snap deleted file mode 100644 index 88b7579f1b..0000000000 --- a/web-ui-external-feedback/src/components/edit_skills/__snapshots__/EditSkillsCard.test.jsx.snap +++ /dev/null @@ -1,183 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`EditSkillsCard > renders an error if user does not have appropriate permission 1`] = ` -
    -

    - You do not have permission to view this page. -

    -
    -`; - -exports[`EditSkillsCard > renders correctly 1`] = ` -
    -
    - -
    -
    -
    -`; - -exports[`EditSkillsCard > renders correctly with skill 1`] = ` -
    -
    -
    -
    - - Le test skill - - - le description - -
    -
    -
    -
    -
    - Submitted by: -
    -
    - -
    - - Current User - -
    -
    -
    -
    -
    - - -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/expand-more/ExpandMore.jsx b/web-ui-external-feedback/src/components/expand-more/ExpandMore.jsx deleted file mode 100644 index acb9c17a30..0000000000 --- a/web-ui-external-feedback/src/components/expand-more/ExpandMore.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import { styled } from '@mui/material/styles'; -import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; -import { IconButton } from '@mui/material'; - -const ExpandMore = styled(props => { - const { expand, ...other } = props; - return ( - - {props.children ? props.children : } - - ); -})(({ theme, expand }) => ({ - transform: !expand ? 'rotate(0deg)' : 'rotate(180deg)', - marginLeft: 'auto', - transition: theme.transitions.create('transform', { - duration: theme.transitions.duration.shortest - }) -})); - -export default ExpandMore; diff --git a/web-ui-external-feedback/src/components/expand-more/ExpandMore.stories.jsx b/web-ui-external-feedback/src/components/expand-more/ExpandMore.stories.jsx deleted file mode 100644 index d10d220102..0000000000 --- a/web-ui-external-feedback/src/components/expand-more/ExpandMore.stories.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import ExpandMore from './ExpandMore'; - -export default { - title: 'Check Ins/ExpandMore', - component: ExpandMore -}; -const Template = args => ; - -export const DefaultExpandMore = Template.bind({}); -DefaultExpandMore.args = {}; - -// Expanded -export const ExpandedExpandMore = Template.bind({}); -ExpandedExpandMore.args = { - expand: true -}; - -// Collapsed -export const CollapsedExpandMore = Template.bind({}); -CollapsedExpandMore.args = { - expand: false -}; diff --git a/web-ui-external-feedback/src/components/expand-more/ExpandMore.test.jsx b/web-ui-external-feedback/src/components/expand-more/ExpandMore.test.jsx deleted file mode 100644 index 712ee76f25..0000000000 --- a/web-ui-external-feedback/src/components/expand-more/ExpandMore.test.jsx +++ /dev/null @@ -1,66 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import ExpandMore from './ExpandMore'; - -describe('ExpandMore', () => { - it('should render the component', () => { - render(); - - const button = screen.getByRole('button'); - expect(button).toBeInTheDocument(); - - // is collapsed by default - expect(button).toHaveStyle('transform: rotate(0deg)'); - }); - - it('should rotate the icon when expanded', () => { - render(); - - const button = screen.getByRole('button'); - expect(button).toHaveStyle('transform: rotate(180deg)'); - }); - - it('should rotate the icon when collapsed', () => { - render(); - - const button = screen.getByRole('button'); - expect(button).toHaveStyle('transform: rotate(0deg)'); - }); - - it('spreads its props to the button', () => { - render(); - - const button = screen.getByTestId('expand-more'); - expect(button).toBeInTheDocument(); - }); - - it('spread props include aria-label and aria-expanded', () => { - render(); - - const button = screen.getByRole('button'); - expect(button).toHaveAttribute('aria-label', 'expand'); - expect(button).toHaveAttribute('aria-expanded', 'false'); - }); - - it('spread props include id and className', () => { - render(); - - const button = screen.getByRole('button'); - expect(button).toHaveAttribute('id', 'expand-more'); - expect(button).toHaveClass('expand-more'); - }); - - it('displays the expand more icon when no children are provided', () => { - render(); - - const button = screen.getByRole('button'); - const icon = button.querySelector('svg'); - expect(icon).toHaveAttribute('data-testid', 'ExpandMoreIcon'); - }); - - it('displays the children when provided', () => { - render(Test); - - const button = screen.getByRole('button'); - expect(button).toHaveTextContent('Test'); - }); -}); diff --git a/web-ui-external-feedback/src/components/feedback_date_selector/SelectDate.jsx b/web-ui-external-feedback/src/components/feedback_date_selector/SelectDate.jsx deleted file mode 100644 index a73e9129ae..0000000000 --- a/web-ui-external-feedback/src/components/feedback_date_selector/SelectDate.jsx +++ /dev/null @@ -1,119 +0,0 @@ -import React, { useCallback, useEffect, useRef } from 'react'; -import { styled } from '@mui/material/styles'; -import DateFnsUtils from '@date-io/date-fns'; -import PropTypes from 'prop-types'; -import { TextField } from '@mui/material'; -import { MobileDatePicker } from '@mui/x-date-pickers'; - -const dateUtils = new DateFnsUtils(); -const PREFIX = 'SelectDate'; -const classes = { - pickerContain: `${PREFIX}-pickerContain`, - picker: `${PREFIX}-picker` -}; - -const Root = styled('div')({ - [`& .${classes.pickerContain}`]: { - marginLeft: '2em', - marginTop: '2em' - }, - [`& .${classes.picker}`]: { - marginBottom: '0.5em', - marginTop: '1em', - minWidth: '60%', - maxWidth: '80%', - display: 'block' - } -}); - -const propTypes = { - changeQuery: PropTypes.func.isRequired, - sendDateQuery: PropTypes.string, - dueDateQuery: PropTypes.string -}; - -const SelectDate = ({ changeQuery, sendDateQuery, dueDateQuery }) => { - const hasPushedInitialValues = useRef(false); - let todayDate = new Date(); - const sendDate = sendDateQuery - ? dateUtils.parse(sendDateQuery.toString(), 'MM/dd/yyyy', new Date()) - : todayDate; - const dueDate = dueDateQuery - ? dateUtils.parse(dueDateQuery?.toString(), 'MM/dd/yyyy', new Date()) - : null; - - useEffect(() => { - if ( - !hasPushedInitialValues.current && - sendDate !== null && - sendDate !== undefined && - dueDate !== undefined - ) { - changeQuery('send', dateUtils.format(sendDate, 'MM/dd/yyyy')); - if (dueDate !== null) { - changeQuery('due', dateUtils.format(dueDate, 'MM/dd/yyyy')); - } - hasPushedInitialValues.current = true; - } - }); - - const handleDueDateChange = useCallback( - date => { - const dueDate = date ? dateUtils.format(date, 'MM/dd/yyyy') : null; - changeQuery('due', dueDate ? dueDate : undefined); - }, - [changeQuery] - ); - - const handleSendDateChange = useCallback( - date => { - const sendDate = dateUtils.format(date, 'MM/dd/yyyy'); - changeQuery('send', sendDate); - }, - [changeQuery] - ); - - return ( - -
    - ( - - )} - disableToolbar - format="MM/dd/yyyy" - margin="normal" - id="set-send-date" - label="Send Date:" - value={sendDate} - minDate={dateUtils.date()} - onChange={handleSendDateChange} - /> -
    - ( - - )} - disableToolbar - format="MM/dd/yyyy" - margin="normal" - id="set-due-date" - label="Due Date:" - value={dueDate} - minDate={sendDate} - minDateMessage="Due date must not be prior to the send date" - clearable={true} - onChange={handleDueDateChange} - /> -
    -
    - ); -}; - -SelectDate.propTypes = propTypes; - -export default SelectDate; diff --git a/web-ui-external-feedback/src/components/feedback_date_selector/SelectDate.stories.jsx b/web-ui-external-feedback/src/components/feedback_date_selector/SelectDate.stories.jsx deleted file mode 100644 index 7f3b26fa1e..0000000000 --- a/web-ui-external-feedback/src/components/feedback_date_selector/SelectDate.stories.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import SelectDate from './SelectDate'; -import { AppContextProvider } from '../../context/AppContext'; -import { LocalizationProvider } from '@mui/x-date-pickers'; -import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; - -export default { - title: 'Check-Ins/SelectDate', - component: SelectDate, - args: { - changeQuery: (data1, data2) => {} - }, - decorators: [ - Story => { - return ( - - - - - - ); - } - ] -}; - -const Template = args => ; -export const DefaultDatePicker = Template.bind({}); diff --git a/web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.css b/web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.css deleted file mode 100644 index 2e22ef144a..0000000000 --- a/web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.css +++ /dev/null @@ -1,55 +0,0 @@ -.member-card { - max-height: 20rem; - width: 325px; - display: flex; - flex-direction: column; - justify-content: space-between; - cursor: pointer; - margin: 0 2em 2em 0; -} - -.member-card .member-summary-avatar { - height: 5rem; - width: 5rem; - margin-right: 1.25rem; -} - -.member-summary-parent { - display: flex; - align-items: center; -} - -.member-card .large { - width: theme-spacing(10); - height: theme-spacing(10); -} - -.member-card .info-container { - padding: 0; -} - -.member-card .split-button { - padding: 1rem; -} - -.member-card .MuiCardHeader-content h2 { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - width: 225px; -} - -.member-card .MuiCardHeader-content h3 { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - width: 225px; -} - -.reason { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - width: 100%; -} diff --git a/web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx b/web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx deleted file mode 100644 index 37c033e9fb..0000000000 --- a/web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.jsx +++ /dev/null @@ -1,130 +0,0 @@ -import React, { useContext } from 'react'; -import { styled } from '@mui/material/styles'; -import { AppContext } from '../../context/AppContext.jsx'; -import { selectCsrfToken, selectProfileMap } from '../../context/selectors.js'; -import { Box, Card, CardHeader, CardContent, Container, Typography, IconButton, Tooltip } from '@mui/material'; -import Avatar from '@mui/material/Avatar'; -import { green } from '@mui/material/colors'; -import CheckCircleIcon from '@mui/icons-material/CheckCircle'; -import CloseIcon from '@mui/icons-material/Close'; - -import './FeedbackExternalRecipientCard.css'; -import FeedbackExternalRecipientSelector - from "../feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx"; -import PropTypes from "prop-types"; - -const PREFIX = 'FeedbackExternalRecipientCard'; -const classes = { - root: `${PREFIX}-root`, - header: `${PREFIX}-header`, - cardContent: `${PREFIX}-cardContent`, - divider: `${PREFIX}-divider`, - recommendationText: `${PREFIX}-recommendationText` -}; - -const StyledBox = styled(Box)({ - [`&.${classes.root}`]: { - // currently defined but not used - minWidth: '10em', - maxWidth: '20em', - marginRight: '2em', - marginBottom: '2em', - cursor: 'pointer', - '@media (max-width:767px)': { - marginTop: '1em', - height: '40%', - width: '80%' - } - }, - [`& .${classes.header}`]: { - cursor: 'pointer' - }, - [`& .${classes.cardContent}`]: { - // currently defined but not used - display: 'flex', - alignItems: 'center', - alignContent: 'center', - flexDirection: 'column', - justifyContent: 'center', - textAlign: 'center' - }, - [`& .${classes.divider}`]: { - backgroundColor: 'grey', - width: '90%', - marginBottom: '1em', - marginTop: '1em' - }, - [`& .${classes.recommendationText}`]: { - color: '#333333' - } -}); - -const FeedbackExternalRecipientCard = ({ - recipientProfile, - selected, - onClick, - onInactivateHandle - }) => { - const { state } = useContext(AppContext); - const csrf = selectCsrfToken(state); - const supervisorProfile = selectProfileMap(state)[recipientProfile?.supervisorid]; - const pdlProfile = selectProfileMap(state)[recipientProfile?.pdlId]; - - async function handleInactivate() { - onInactivateHandle(); - } - - return ( - - - - {recipientProfile?.firstName} {recipientProfile?.lastName} - - } - action={ - <> - {selected ? ( - - checkmark-image - - ) : ( - - { - e.stopPropagation(); - handleInactivate(); - }} - > - - - - )} - - } - disableTypography - /> - - - - - {recipientProfile?.email} - -
    - Company: {recipientProfile?.companyName} -
    -
    -
    -
    -
    -
    - ); -}; - -export default FeedbackExternalRecipientCard; diff --git a/web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.stories.jsx b/web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.stories.jsx deleted file mode 100644 index ba890f4055..0000000000 --- a/web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.stories.jsx +++ /dev/null @@ -1,48 +0,0 @@ -import FeedbackExternalRecipientCard from './FeedbackExternalRecipientCard.jsx'; -import React, { useContext, useEffect } from 'react'; -import { AppContext, AppContextProvider } from '../../context/AppContext.jsx'; -import { UPDATE_MEMBER_PROFILES } from '../../context/actions.js'; - -export default { - title: 'FeedbackReqs/FeedbackExternalRecipientCard', - component: FeedbackExternalRecipientCard, - decorators: [ - Story => { - return ( - - - - ); - } - ] -}; - -const profile = { - id: '12342345678', - pdlID: 123, - workEmail: 'kimberlinm@objectcomputing.com', - name: 'Bob Jones', - title: 'Software Engineer' -}; - -const SetProfiles = ({ profiles }) => { - const { dispatch } = useContext(AppContext); - useEffect(() => { - dispatch({ type: UPDATE_MEMBER_PROFILES, payload: profiles }); - }, [profiles, dispatch]); - return ''; -}; - -const Template = args => ( - - - - -); - -export const DefaultUser = Template.bind({}); -DefaultUser.args = { - profileId: profile.id, - reason: 'Recommended for being a local opossum', - profiles: [profile] -}; diff --git a/web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.test.jsx b/web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.test.jsx deleted file mode 100644 index c430ed623b..0000000000 --- a/web-ui-external-feedback/src/components/feedback_external_recipient_card/FeedbackExternalRecipientCard.test.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import FeedbackExternalRecipientCard from './FeedbackExternalRecipientCard.jsx'; -import { AppContextProvider } from '../../context/AppContext.jsx'; -import { BrowserRouter } from 'react-router-dom'; - -it('renders the recipient card', () => { - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/feedback_external_recipient_card/__snapshots__/FeedbackExternalRecipientCard.test.jsx.snap b/web-ui-external-feedback/src/components/feedback_external_recipient_card/__snapshots__/FeedbackExternalRecipientCard.test.jsx.snap deleted file mode 100644 index 1151880564..0000000000 --- a/web-ui-external-feedback/src/components/feedback_external_recipient_card/__snapshots__/FeedbackExternalRecipientCard.test.jsx.snap +++ /dev/null @@ -1,73 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders the recipient card 1`] = ` -
    -
    -
    -
    -
    -

    - -

    -
    -
    - -
    -
    - -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.css b/web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.css deleted file mode 100644 index 16cfb29160..0000000000 --- a/web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.css +++ /dev/null @@ -1,40 +0,0 @@ -.feedback-recipient-selector { - width: 100%; - height: 100%; - padding: 1rem 2rem 1rem 2rem; -} - -.selected-recipients-container { - width: 100%; - height: 50%; - min-height: 380px; - margin-top: 2em; - padding: 20px 0 20px 26px; - border-radius: 20px; - border: 1px dashed gray; -} - -.selectable-recipients-container { - width: 100%; - height: 50%; - min-height: 300px; - margin-top: 2em; -} - -.selected-recipients-container .recipient-card-container { - display: flex; - flex-direction: row; - flex-wrap: wrap; -} - -.selectable-recipients-container .recipient-card-container { - display: flex; - flex-direction: row; - flex-wrap: wrap; -} - -@media (min-width: 321px) and (max-width: 820px) { - .selected-recipients-container { - padding: 10px 5px 10px 5px; - } -} diff --git a/web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx b/web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx deleted file mode 100644 index 8328fb6f0a..0000000000 --- a/web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.jsx +++ /dev/null @@ -1,345 +0,0 @@ -import React, { useContext, useEffect, useState, useRef } from 'react'; -import { styled } from '@mui/material/styles'; -import FeedbackExternalRecipientCard from '../feedback_external_recipient_card/FeedbackExternalRecipientCard'; -import { AppContext } from '../../context/AppContext'; -import { - selectProfile, selectCsrfToken, selectCurrentUser, selectNormalizedMembers, -} from '../../context/selectors'; -import {putExternalRecipientInactivate, getExternalRecipients} from '../../api/feedback'; -import Typography from '@mui/material/Typography'; -import { TextField, Grid, InputAdornment } from '@mui/material'; -import { Search } from '@mui/icons-material'; -import PropTypes from 'prop-types'; -import './FeedbackExternalRecipientSelector.css'; -import Button from '@mui/material/Button'; -import Tooltip from '@mui/material/Tooltip'; -import HelpOutlineIcon from '@mui/icons-material/HelpOutline'; -import {createFeedbackExternalRecipient, createFeedbackTemplateWithQuestion} from "../../api/feedbacktemplate.js"; -import NewExternalRecipientModal from "./NewExternalRecipientModal.jsx"; -import {UPDATE_TOAST} from "../../context/actions.js"; - - -const PREFIX = 'FeedbackExternalRecipientSelector'; -const classes = { - search: `${PREFIX}-search`, - searchInput: `${PREFIX}-searchInput`, - searchInputIcon: `${PREFIX}-searchInputIcon`, - members: `${PREFIX}-members`, - textField: `${PREFIX}-textField` -}; - -const StyledGrid = styled(Grid)({ - [`& .${classes.search}`]: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center' - }, - [`& .${classes.searchInput}`]: { - width: '20em' - }, - [`& .${classes.searchInputIcon}`]: { - color: 'gray' - }, - [`& .${classes.members}`]: { - display: 'flex', - flexWrap: 'wrap', - justifyContent: 'space-evenly', - width: '100%' - } -}); - -const propTypes = { - changeQuery: PropTypes.func.isRequired, - fromQuery: PropTypes.array.isRequired, - forQuery: PropTypes.string.isRequired, - addExternalRecipientId: PropTypes.func.isRequired, -}; - -const FeedbackExternalRecipientSelector = ({ changeQuery, fromQuery, forQuery, addExternalRecipientId }) => { - const { state, dispatch } = useContext(AppContext); - const csrf = selectCsrfToken(state); - const userProfile = selectCurrentUser(state); - const { id } = userProfile; - const searchTextUpdated = useRef(false); - const hasRenewedFromURL = useRef(false); - const [searchText, setSearchText] = useState(''); - const [externalRecipients, setExternalRecipients] = useState([]); - - - useEffect(() => { - - if (!searchTextUpdated.current && searchText.length !== 0 && searchText !== '' && searchText) { - if (fromQuery !== undefined) { - let selectedRecipients = externalRecipients.filter(externalRecipient => - fromQuery.includes(externalRecipient.id) - ); - const normalizedRecipients = [...externalRecipients]; - const filteredNormalizedMembers = normalizedRecipients.filter(member => { - const searchTextLower = searchText.toLowerCase(); - const matchesSearchText = ['firstName', 'lastName', 'email', 'companyName'].some(key => - member[key] && member[key].toLowerCase().includes(searchTextLower) - ); - const isInFromQuery = fromQuery.includes(member.id); - return matchesSearchText || isInFromQuery; - }); - setExternalRecipients(filteredNormalizedMembers); - } else { - setExternalRecipients(normalizedRecipients); - } - searchTextUpdated.current = true; - } - }, [searchText, externalRecipients, fromQuery, state, userProfile]) - ; - - useEffect(() => { - function bindFromURL() { - if ( - !hasRenewedFromURL.current && - fromQuery !== null && - fromQuery !== undefined - ) { - let profileCopy = externalRecipients; - if (typeof fromQuery === 'string') { - let newProfile = { id: fromQuery }; - if (externalRecipients.filter(externalRecipient => externalRecipient.id === newProfile.id).length === 0) { - profileCopy.push(newProfile); - } - } else if (Array.isArray(fromQuery)) { - for (let i = 0; i < fromQuery.length; ++i) { - let newProfile = { id: fromQuery[i] }; - if (externalRecipients.filter(externalRecipient => externalRecipient.id === newProfile.id).length === 0) { - profileCopy.push(newProfile); - } - } - } - setExternalRecipients(profileCopy); - hasRenewedFromURL.current = true; - } - } - - async function getExternalRecipientsForSelector() { - if (forQuery === undefined || forQuery === null) { - return; - } - let res = await getExternalRecipients(csrf); - if (res && res.payload) { - return res.payload.data && !res.error ? res.payload.data : undefined; - } - return null; - } - - if (csrf && (searchText === '' || searchText.length === 0)) { - getExternalRecipientsForSelector().then(res => { - bindFromURL(); - if (res !== undefined && res !== null) { - let filteredProfileCopy = externalRecipients.filter(member => { - return !res.some(suggestedMember => { - return suggestedMember.id === member.id; - }); - }); - let newProfiles = filteredProfileCopy.concat(res); - setExternalRecipients(newProfiles); - } - }); - } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [id, csrf, searchText]) - ; - - const cardClickHandler = id => { - if (!Array.isArray(fromQuery)) { - fromQuery = fromQuery ? [fromQuery] : []; - } - if (fromQuery.includes(id)) { - fromQuery.splice(fromQuery.indexOf(id), 1); - } else { - fromQuery.push(id); - } - changeQuery('from', fromQuery); - hasRenewedFromURL.current = false; - }; - - async function externalRecipientInactivate(id) { - let externalRecipientsCopy = [...externalRecipients]; - let indexArray = externalRecipientsCopy.findIndex(profile => profile.id === id); - - try { - const response = await putExternalRecipientInactivate(id, csrf); - if (response && !response.error) { - externalRecipientsCopy[indexArray].inactive = true; - hasRenewedFromURL.current = false; - setExternalRecipients(externalRecipientsCopy); - } else { - const errorMessage = 'Failed to inactivate recipient'; - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: errorMessage - } - }); - } - } catch (error) { - const errorMessage = ("An error occurred while inactivating the recipient: ", error); - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: errorMessage - } - }); - } - } - - const getSelectedCards = () => { - if (fromQuery) { - const title = ( - - {fromQuery.length} recipient - {fromQuery.length === 1 ? '' : 's'} selected - - ); - - // If there are no recipients selected, show a message - if (fromQuery.length === 0) { - return ( - <> - {title} -

    - Click on external recipients to request feedback from them -

    - - ); - } - - // If there are any selected recipients, display them - return ( - <> - {title} -
    - {fromQuery.map(id => ( - profile.id === id)} - selected - onClick={() => cardClickHandler(id)} - /> - ))} -
    - - ); - } - }; - - const [newRecipientModalOpen, setNewRecipientModalOpen] = useState(false); - const handleNewRecipientOpen = () => { - setNewRecipientModalOpen(true); - }; - const handleNewRecipientClose = () => { - setNewRecipientModalOpen(false); - }; - const handleNewRecipientSubmit = async (newRecipient) => { - const { feedbackExternalRecipientRes } = - await createFeedbackExternalRecipient( - newRecipient, - csrf - ); - if (feedbackExternalRecipientRes.error) { - const errorMessage = 'Failed to save external recipient'; - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: errorMessage - } - }); - } else if (feedbackExternalRecipientRes.payload && feedbackExternalRecipientRes.payload.data) { - newRecipient.id = feedbackExternalRecipientRes.payload.data.id; - console.log("FeedbackExternalRecipientSelector.jsx, handleNewRecipientSubmit, newRecipient: ", newRecipient); - //setExternalRecipients([...externalRecipients, newRecipient]); - addExternalRecipientId(newRecipient.id); - const updatedRecipients = await getExternalRecipients(csrf); - console.log("FeedbackExternalRecipientSelector.jsx, handleNewRecipientSubmit, updatedRecipients: ", updatedRecipients); - if (updatedRecipients && updatedRecipients.payload) { - setExternalRecipients(updatedRecipients.payload.data); - } - handleNewRecipientClose(); - } - }; - - return ( - - - - { - setSearchText(e.target.value); - searchTextUpdated.current = false; - }} - InputProps={{ - startAdornment: ( - - - - ) - }} - /> -
    - - - - -
    -
    -
    -
    {getSelectedCards()}
    -
    - {externalRecipients ? ( -
    - {externalRecipients - .filter( - profile => - !fromQuery || - (!fromQuery.includes(profile.id) && profile.id !== forQuery && !!!profile.inactive) - ) - .map((profile, index) => ( - cardClickHandler(profile.id)} - onInactivateHandle={() => externalRecipientInactivate(profile.id)} - /> - ))} -
    - ) : ( -

    Can't get suggestions, please come back later :(

    - )} -
    - -
    - ); - //recipientProfile={selectProfile(state, profile.id)} -}; - -FeedbackExternalRecipientSelector.propTypes = propTypes; - -export default FeedbackExternalRecipientSelector; diff --git a/web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.test.jsx b/web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.test.jsx deleted file mode 100644 index 868375aec9..0000000000 --- a/web-ui-external-feedback/src/components/feedback_external_recipient_selector/FeedbackExternalRecipientSelector.test.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import FeedbackExternalRecipientSelector from './FeedbackExternalRecipientSelector.jsx'; -import { AppContextProvider } from '../../context/AppContext'; -import { BrowserRouter } from 'react-router-dom'; - -describe('FeedbackExternalRecipientSelector', () => { - it('renders the component', () => { - snapshot( - - - - - - ); - }); -}); diff --git a/web-ui-external-feedback/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx b/web-ui-external-feedback/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx deleted file mode 100644 index 5f614cad92..0000000000 --- a/web-ui-external-feedback/src/components/feedback_external_recipient_selector/NewExternalRecipientModal.jsx +++ /dev/null @@ -1,118 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { Modal, TextField, Button, Box, IconButton } from '@mui/material'; -import CloseIcon from '@mui/icons-material/Close'; -import PropTypes from 'prop-types'; - -const NewExternalRecipientModal = ({ open, onClose, onSubmit }) => { - const [email, setEmail] = useState(''); - const [firstName, setFirstName] = useState(''); - const [lastName, setLastName] = useState(''); - const [companyName, setCompanyName] = useState(''); - const [emailError, setEmailError] = useState(''); - - useEffect(() => { - if (open) { - setEmail(''); - setFirstName(''); - setLastName(''); - setCompanyName(''); - setEmailError(''); - } - }, [open]); - - const handleSubmit = () => { - if (!validateEmail(email)) { - setEmailError('Please enter a valid email address'); - return; - } - const newRecipient = { - email, - firstName, - lastName, - companyName, - }; - onSubmit(newRecipient); - }; - - const validateEmail = (email) => { - const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - return re.test(String(email).toLowerCase()); - }; - - return ( - - - - - -

    Create New External Recipient

    - { - setEmail(e.target.value); - if (emailError) setEmailError(''); - }} - error={!!emailError} - helperText={emailError} - fullWidth - margin="normal" - /> - setFirstName(e.target.value)} - fullWidth - margin="normal" - /> - setLastName(e.target.value)} - fullWidth - margin="normal" - /> - setCompanyName(e.target.value)} - fullWidth - margin="normal" - /> - -
    -
    - ); -}; - -NewExternalRecipientModal.propTypes = { - open: PropTypes.bool.isRequired, - onClose: PropTypes.func.isRequired, - onSubmit: PropTypes.func.isRequired, -}; - -const modalStyle = { - position: 'absolute', - top: '50%', - left: '50%', - transform: 'translate(-50%, -50%)', - width: 400, - bgcolor: 'background.paper', - boxShadow: 24, - p: 4, -}; - -export default NewExternalRecipientModal; diff --git a/web-ui-external-feedback/src/components/feedback_external_recipient_selector/__snapshots__/FeedbackExternalRecipientSelector.test.jsx.snap b/web-ui-external-feedback/src/components/feedback_external_recipient_selector/__snapshots__/FeedbackExternalRecipientSelector.test.jsx.snap deleted file mode 100644 index 89214ae7aa..0000000000 --- a/web-ui-external-feedback/src/components/feedback_external_recipient_selector/__snapshots__/FeedbackExternalRecipientSelector.test.jsx.snap +++ /dev/null @@ -1,127 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`FeedbackExternalRecipientSelector > renders the component 1`] = ` -
    - -`; diff --git a/web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.css b/web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.css deleted file mode 100644 index 2e22ef144a..0000000000 --- a/web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.css +++ /dev/null @@ -1,55 +0,0 @@ -.member-card { - max-height: 20rem; - width: 325px; - display: flex; - flex-direction: column; - justify-content: space-between; - cursor: pointer; - margin: 0 2em 2em 0; -} - -.member-card .member-summary-avatar { - height: 5rem; - width: 5rem; - margin-right: 1.25rem; -} - -.member-summary-parent { - display: flex; - align-items: center; -} - -.member-card .large { - width: theme-spacing(10); - height: theme-spacing(10); -} - -.member-card .info-container { - padding: 0; -} - -.member-card .split-button { - padding: 1rem; -} - -.member-card .MuiCardHeader-content h2 { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - width: 225px; -} - -.member-card .MuiCardHeader-content h3 { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - width: 225px; -} - -.reason { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - width: 100%; -} diff --git a/web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.jsx b/web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.jsx deleted file mode 100644 index a9d82acc25..0000000000 --- a/web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.jsx +++ /dev/null @@ -1,146 +0,0 @@ -import React, { useContext } from 'react'; -import { styled } from '@mui/material/styles'; -import { AppContext } from '../../context/AppContext'; -import { selectProfileMap } from '../../context/selectors'; -import { getAvatarURL } from '../../api/api.js'; -import { Box, Card, CardHeader, CardContent, Container, Typography } from '@mui/material'; -import Avatar from '@mui/material/Avatar'; -import PriorityHighIcon from '@mui/icons-material/PriorityHigh'; -import { green } from '@mui/material/colors'; -import CheckCircleIcon from '@mui/icons-material/CheckCircle'; -import Divider from '@mui/material/Divider'; - -import './FeedbackRecipientCard.css'; - -const PREFIX = 'FeedbackRecipientCard'; -const classes = { - root: `${PREFIX}-root`, - header: `${PREFIX}-header`, - cardContent: `${PREFIX}-cardContent`, - divider: `${PREFIX}-divider`, - recommendationText: `${PREFIX}-recommendationText` -}; - -const StyledBox = styled(Box)({ - [`&.${classes.root}`]: { - // currently defined but not used - minWidth: '10em', - maxWidth: '20em', - marginRight: '2em', - marginBottom: '2em', - cursor: 'pointer', - '@media (max-width:767px)': { - marginTop: '1em', - height: '40%', - width: '80%' - } - }, - [`& .${classes.header}`]: { - cursor: 'pointer' - }, - [`& .${classes.cardContent}`]: { - // currently defined but not used - display: 'flex', - alignItems: 'center', - alignContent: 'center', - flexDirection: 'column', - justifyContent: 'center', - textAlign: 'center' - }, - [`& .${classes.divider}`]: { - backgroundColor: 'grey', - width: '90%', - marginBottom: '1em', - marginTop: '1em' - }, - [`& .${classes.recommendationText}`]: { - color: '#333333' - } -}); - -const FeedbackRecipientCard = ({ - recipientProfile, - selected, - reason = null, - onClick -}) => { - const { state } = useContext(AppContext); - const supervisorProfile = - selectProfileMap(state)[recipientProfile?.supervisorid]; - const pdlProfile = selectProfileMap(state)[recipientProfile?.pdlId]; - - return ( - - - - {recipientProfile?.name} - - } - action={ - selected ? ( - - checkmark-image - - ) : null - } - subheader={ - - {recipientProfile?.title} - - } - disableTypography - avatar={ - !recipientProfile?.terminationDate ? ( - - ) : ( - - - - ) - } - /> - - - - - {recipientProfile?.workEmail} - -
    - Location: {recipientProfile?.location} -
    - Supervisor: {supervisorProfile?.name} -
    - PDL: {pdlProfile?.name} -
    - - {reason && ( -
    - - - {reason} - -
    - )} - - - - - ); -}; - -export default FeedbackRecipientCard; diff --git a/web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.stories.jsx b/web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.stories.jsx deleted file mode 100644 index dc796ab049..0000000000 --- a/web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.stories.jsx +++ /dev/null @@ -1,48 +0,0 @@ -import FeedbackRecipientCard from './FeedbackRecipientCard'; -import React, { useContext, useEffect } from 'react'; -import { AppContext, AppContextProvider } from '../../context/AppContext'; -import { UPDATE_MEMBER_PROFILES } from '../../context/actions'; - -export default { - title: 'FeedbackReqs/FeedbackRecipientCard', - component: FeedbackRecipientCard, - decorators: [ - Story => { - return ( - - - - ); - } - ] -}; - -const profile = { - id: '12342345678', - pdlID: 123, - workEmail: 'kimberlinm@objectcomputing.com', - name: 'Bob Jones', - title: 'Software Engineer' -}; - -const SetProfiles = ({ profiles }) => { - const { dispatch } = useContext(AppContext); - useEffect(() => { - dispatch({ type: UPDATE_MEMBER_PROFILES, payload: profiles }); - }, [profiles, dispatch]); - return ''; -}; - -const Template = args => ( - - - - -); - -export const DefaultUser = Template.bind({}); -DefaultUser.args = { - profileId: profile.id, - reason: 'Recommended for being a local opossum', - profiles: [profile] -}; diff --git a/web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.test.jsx b/web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.test.jsx deleted file mode 100644 index 08a0942384..0000000000 --- a/web-ui-external-feedback/src/components/feedback_recipient_card/FeedbackRecipientCard.test.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import FeedbackRecipientCard from './FeedbackRecipientCard'; -import { AppContextProvider } from '../../context/AppContext'; -import { BrowserRouter } from 'react-router-dom'; - -it('renders the recipient card', () => { - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/feedback_recipient_card/__snapshots__/FeedbackRecipientCard.test.jsx.snap b/web-ui-external-feedback/src/components/feedback_recipient_card/__snapshots__/FeedbackRecipientCard.test.jsx.snap deleted file mode 100644 index 97be3eeeea..0000000000 --- a/web-ui-external-feedback/src/components/feedback_recipient_card/__snapshots__/FeedbackRecipientCard.test.jsx.snap +++ /dev/null @@ -1,64 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders the recipient card 1`] = ` - -`; diff --git a/web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.css b/web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.css deleted file mode 100644 index 16cfb29160..0000000000 --- a/web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.css +++ /dev/null @@ -1,40 +0,0 @@ -.feedback-recipient-selector { - width: 100%; - height: 100%; - padding: 1rem 2rem 1rem 2rem; -} - -.selected-recipients-container { - width: 100%; - height: 50%; - min-height: 380px; - margin-top: 2em; - padding: 20px 0 20px 26px; - border-radius: 20px; - border: 1px dashed gray; -} - -.selectable-recipients-container { - width: 100%; - height: 50%; - min-height: 300px; - margin-top: 2em; -} - -.selected-recipients-container .recipient-card-container { - display: flex; - flex-direction: row; - flex-wrap: wrap; -} - -.selectable-recipients-container .recipient-card-container { - display: flex; - flex-direction: row; - flex-wrap: wrap; -} - -@media (min-width: 321px) and (max-width: 820px) { - .selected-recipients-container { - padding: 10px 5px 10px 5px; - } -} diff --git a/web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.jsx b/web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.jsx deleted file mode 100644 index 4aeebd972f..0000000000 --- a/web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.jsx +++ /dev/null @@ -1,260 +0,0 @@ -import React, { useContext, useEffect, useState, useRef } from 'react'; -import { styled } from '@mui/material/styles'; -import FeedbackRecipientCard from '../feedback_recipient_card/FeedbackRecipientCard'; -import { AppContext } from '../../context/AppContext'; -import { - selectProfile, - selectCsrfToken, - selectCurrentUser, - selectNormalizedMembers -} from '../../context/selectors'; -import { getFeedbackSuggestion } from '../../api/feedback'; -import Typography from '@mui/material/Typography'; -import { TextField, Grid, InputAdornment } from '@mui/material'; -import { Search } from '@mui/icons-material'; -import PropTypes from 'prop-types'; - -import './FeedbackRecipientSelector.css'; - -const PREFIX = 'FeedbackRecipientSelector'; -const classes = { - search: `${PREFIX}-search`, - searchInput: `${PREFIX}-searchInput`, - searchInputIcon: `${PREFIX}-searchInputIcon`, - members: `${PREFIX}-members`, - textField: `${PREFIX}-textField` -}; - -const StyledGrid = styled(Grid)({ - [`& .${classes.search}`]: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center' - }, - [`& .${classes.searchInput}`]: { - width: '20em' - }, - [`& .${classes.searchInputIcon}`]: { - color: 'gray' - }, - [`& .${classes.members}`]: { - display: 'flex', - flexWrap: 'wrap', - justifyContent: 'space-evenly', - width: '100%' - } -}); - -const propTypes = { - changeQuery: PropTypes.func.isRequired, - fromQuery: PropTypes.array.isRequired, - forQuery: PropTypes.string.isRequired -}; - -const FeedbackRecipientSelector = ({ changeQuery, fromQuery, forQuery }) => { - const { state } = useContext(AppContext); - const csrf = selectCsrfToken(state); - const userProfile = selectCurrentUser(state); - const { id } = userProfile; - const searchTextUpdated = useRef(false); - const hasRenewedFromURL = useRef(false); - const [searchText, setSearchText] = useState(''); - const [profiles, setProfiles] = useState([]); - const normalizedMembers = selectNormalizedMembers(state, searchText); - - useEffect(() => { - if ( - !searchTextUpdated.current && - searchText.length !== 0 && - searchText !== '' && - searchText - ) { - if (fromQuery !== undefined) { - let selectedMembers = profiles.filter(profile => - fromQuery.includes(profile.id) - ); - let filteredNormalizedMembers = normalizedMembers.filter(member => { - return !selectedMembers.some(selectedMember => { - return selectedMember.id === member.id; - }); - }); - setProfiles(filteredNormalizedMembers); - } else { - setProfiles(normalizedMembers); - } - searchTextUpdated.current = true; - } - }, [searchText, profiles, fromQuery, state, userProfile, normalizedMembers]); - - useEffect(() => { - function bindFromURL() { - if ( - !hasRenewedFromURL.current && - fromQuery !== null && - fromQuery !== undefined - ) { - let profileCopy = profiles; - if (typeof fromQuery === 'string') { - let newProfile = { id: fromQuery }; - if ( - profiles.filter(member => member.id === newProfile.id).length === 0 - ) { - profileCopy.push(newProfile); - } - } else if (Array.isArray(fromQuery)) { - for (let i = 0; i < fromQuery.length; ++i) { - let newProfile = { id: fromQuery[i] }; - if ( - profiles.filter(member => member.id === newProfile.id).length === - 0 - ) { - profileCopy.push(newProfile); - } - } - } - setProfiles(profileCopy); - hasRenewedFromURL.current = true; - } - } - - async function getSuggestions() { - if (forQuery === undefined || forQuery === null) { - return; - } - let res = await getFeedbackSuggestion(forQuery, csrf); - if (res && res.payload) { - return res.payload.data && !res.error ? res.payload.data : undefined; - } - return null; - } - - if (csrf && (searchText === '' || searchText.length === 0)) { - getSuggestions().then(res => { - bindFromURL(); - if (res !== undefined && res !== null) { - let filteredProfileCopy = profiles.filter(member => { - return !res.some(suggestedMember => { - return suggestedMember.id === member.id; - }); - }); - let newProfiles = filteredProfileCopy.concat(res); - setProfiles(newProfiles); - } - }); - } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [id, csrf, searchText]); - - const cardClickHandler = id => { - if (!Array.isArray(fromQuery)) { - fromQuery = fromQuery ? [fromQuery] : []; - } - if (fromQuery.includes(id)) { - fromQuery.splice(fromQuery.indexOf(id), 1); - } else { - fromQuery.push(id); - } - - changeQuery('from', fromQuery); - hasRenewedFromURL.current = false; - }; - - const getSelectedCards = () => { - if (fromQuery) { - const title = ( - - {fromQuery.length} recipient - {fromQuery.length === 1 ? '' : 's'} selected - - ); - - // If there are no recipients selected, show a message - if (fromQuery.length === 0) { - return ( - <> - {title} -

    - Click on recipients to request feedback from them -

    - - ); - } - - // If there are any selected recipients, display them - return ( - <> - {title} -
    - {fromQuery.map(id => ( - cardClickHandler(id)} - /> - ))} -
    - - ); - } - }; - - return ( - - - - { - setSearchText(e.target.value); - searchTextUpdated.current = false; - }} - InputProps={{ - startAdornment: ( - - - - ) - }} - /> - - -
    {getSelectedCards()}
    -
    - {profiles ? ( -
    - {profiles - .filter( - profile => - !fromQuery || - (!fromQuery.includes(profile.id) && profile.id !== forQuery) - ) - .map(profile => ( - cardClickHandler(profile.id)} - /> - ))} -
    - ) : ( -

    Can't get suggestions, please come back later :(

    - )} -
    -
    - ); -}; - -FeedbackRecipientSelector.propTypes = propTypes; - -export default FeedbackRecipientSelector; diff --git a/web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.test.jsx b/web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.test.jsx deleted file mode 100644 index 0943a38002..0000000000 --- a/web-ui-external-feedback/src/components/feedback_recipient_selector/FeedbackRecipientSelector.test.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import FeedbackRecipientSelector from './FeedbackRecipientSelector'; -import { AppContextProvider } from '../../context/AppContext'; -import { BrowserRouter } from 'react-router-dom'; - -describe('FeedbackRecipientSelector', () => { - it('renders the component', () => { - snapshot( - - - - - - ); - }); -}); diff --git a/web-ui-external-feedback/src/components/feedback_recipient_selector/__snapshots__/FeedbackRecipientSelector.test.jsx.snap b/web-ui-external-feedback/src/components/feedback_recipient_selector/__snapshots__/FeedbackRecipientSelector.test.jsx.snap deleted file mode 100644 index 4d4f1f3dbc..0000000000 --- a/web-ui-external-feedback/src/components/feedback_recipient_selector/__snapshots__/FeedbackRecipientSelector.test.jsx.snap +++ /dev/null @@ -1,99 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`FeedbackRecipientSelector > renders the component 1`] = ` -
    - -`; diff --git a/web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.css b/web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.css deleted file mode 100644 index 549a983430..0000000000 --- a/web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.css +++ /dev/null @@ -1,83 +0,0 @@ -.person-name { - color: var(--checkins-palette-content-color); -} - -.response-link { - color: var(--checkins-palette-primary-link); - text-decoration: none; - font-size: 1rem; - - &:hover { - background-color: var(--checkins-palette-background-default); - } -} - -.has-padding-top { - padding-top: 1em; -} - -.red-text { - color: rgb(207, 120, 20); -} - -.person-divider { - min-width: 100%; - color: var(--checkins-palette-background-default); -} - -.dark-gray-text { - color: var(--checkins-palette-gray-dark); -} - -.person-row { - padding-top: 1em; - padding-bottom: 1em; -} - -.MuiCardHeader-action { - margin: 1em 0 0; - padding-top: 1em; -} - -.no-wrap { - flex-wrap: nowrap; -} - -.align-center { - text-align: center; - justify-content: center; - align-self: center; - align-content: center; -} - -.align-end { - text-align: right; -} - -.feedback-request-card { - display: flex; - flex-direction: row; - justify-content: center; - align-self: center; - margin-top: 1em; - width: 100%; -} - -.MuiFormControl-root { - width: 20%; - margin-right: 2em; -} - -.responder-name { - display: inline; -} - -@media screen and (max-width: 769px) { - .card-info-container { - margin-left: 2.5em; - text-align: right; - } - .response-link { - font-size: 0.7rem; - } -} diff --git a/web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.jsx b/web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.jsx deleted file mode 100644 index ae439d4ef8..0000000000 --- a/web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.jsx +++ /dev/null @@ -1,291 +0,0 @@ -import React, { useCallback, useContext, useEffect, useState } from 'react'; -import { styled } from '@mui/styles'; -import FeedbackRequestSubcard from './feedback_request_subcard/FeedbackRequestSubcard'; -import Card from '@mui/material/Card'; -import { Avatar, Typography } from '@mui/material'; -import CardContent from '@mui/material/CardContent'; -import CardActions from '@mui/material/CardActions'; -import Collapse from '@mui/material/Collapse'; -import Grid from '@mui/material/Grid'; -import { useHistory } from 'react-router-dom'; -import PropTypes from 'prop-types'; -import './FeedbackRequestCard.css'; -import { selectProfile } from '../../context/selectors'; -import { AppContext } from '../../context/AppContext'; -import { getAvatarURL } from '../../api/api.js'; -import Divider from '@mui/material/Divider'; -import Button from '@mui/material/Button'; -import queryString from 'query-string'; - -import ExpandMore from '../expand-more/ExpandMore'; - -const PREFIX = 'FeedbackRequestCard'; -const classes = { - root: `${PREFIX}-root`, - expandClose: `${PREFIX}-expandClose`, - expandOpen: `${PREFIX}-expandOpen` -}; - -const StyledCard = styled(Card)({ - [`&.${classes.root}`]: { - color: 'gray', - width: '100%', - maxHeight: '10%', - '@media (max-width:769px)': { - width: '100%', - maxWidth: '100%' - } - }, - '& .MuiCardContent-root': { - paddingBottom: 0, - paddingTop: 0, - '&:last-child': { - paddingBottom: 0 - } - }, - '& .MuiCardActions-root': { - padding: 0, - maxHeight: '30px' - }, - '& .MuiTypography-body1': { - '@media (max-width:767px)': { - fontSize: '0.7rem' - } - } -}); - -const SortOption = { - SENT_DATE: 'sent_date', - SUBMISSION_DATE: 'submission_date', - RECIPIENT_NAME_ALPHABETICAL: 'recipient_name_alphabetical', - RECIPIENT_NAME_REVERSE_ALPHABETICAL: 'recipient_name_reverse_alphabetical' -}; - -const DateRange = { - THREE_MONTHS: '3mo', - SIX_MONTHS: '6mo', - ONE_YEAR: '1yr', - ALL_TIME: 'all' -}; - -const propTypes = { - requesteeId: PropTypes.string.isRequired, - templateName: PropTypes.string.isRequired, - responses: PropTypes.arrayOf(PropTypes.object).isRequired, - sortType: PropTypes.oneOf([ - SortOption.SENT_DATE, - SortOption.SUBMISSION_DATE, - SortOption.RECIPIENT_NAME_ALPHABETICAL, - SortOption.RECIPIENT_NAME_REVERSE_ALPHABETICAL - ]).isRequired, - dateRange: PropTypes.oneOf([ - DateRange.THREE_MONTHS, - DateRange.SIX_MONTHS, - DateRange.ONE_YEAR, - DateRange.ALL_TIME - ]).isRequired -}; - -const FeedbackRequestCard = ({ - requesteeId, - templateName, - responses, - sortType, - dateRange -}) => { - const { state } = useContext(AppContext); - const requesteeProfile = selectProfile(state, requesteeId); - const avatarURL = getAvatarURL(requesteeProfile?.workEmail); - const history = useHistory(); - const [expanded, setExpanded] = useState(false); - const [sortedResponses, setSortedResponses] = useState(responses); - - const handleExpandClick = () => setExpanded(!expanded); - - const withinDateRange = useCallback( - requestDate => { - let oldestDate = new Date(); - switch (dateRange) { - case DateRange.THREE_MONTHS: - oldestDate.setMonth(oldestDate.getMonth() - 3); - break; - case DateRange.SIX_MONTHS: - oldestDate.setMonth(oldestDate.getMonth() - 6); - break; - case DateRange.ONE_YEAR: - oldestDate.setFullYear(oldestDate.getFullYear() - 1); - break; - case DateRange.ALL_TIME: - return true; - default: - oldestDate.setMonth(oldestDate.getMonth() - 3); - } - - if (Array.isArray(requestDate)) { - requestDate = new Date(requestDate.join('/')); - // have to do for Safari - } - return requestDate >= oldestDate; - }, - [dateRange] - ); - - const noRequestsMessage = useCallback(() => { - let message; - switch (dateRange) { - case DateRange.THREE_MONTHS: - message = 'No requests in the past 3 months'; - break; - case DateRange.SIX_MONTHS: - message = 'No requests in the past 6 months'; - break; - case DateRange.ONE_YEAR: - message = 'No requests in the past year'; - break; - default: - message = 'No requests'; - } - - return ( - - -
    - {message} -
    -
    - ); - }, [dateRange]); - - const handleViewAllResponsesClick = () => { - if (sortedResponses.length === 0) return; - const requestIds = sortedResponses.map(response => response.id); - const params = { - request: requestIds - }; - - history.push(`/feedback/view/responses/?${queryString.stringify(params)}`); - }; - - // Sort the responses by either the send date or the submit date - useEffect(() => { - let responsesCopy = [...responses]; - responsesCopy = responsesCopy.filter(response => - withinDateRange(response.sendDate) - ); - - let sortMethod; - switch (sortType) { - case SortOption.SENT_DATE: - sortMethod = (a, b) => - new Date(a.sendDate) > new Date(b.sendDate) ? -1 : 1; - break; - case SortOption.SUBMISSION_DATE: - sortMethod = (a, b) => - !a.submitDate || new Date(a.submitDate) > new Date(b.submitDate) - ? -1 - : 1; - break; - case SortOption.RECIPIENT_NAME_ALPHABETICAL: - sortMethod = (a, b) => - selectProfile(state, a.recipientId).name > - selectProfile(state, b.recipientId).name - ? 1 - : -1; - break; - case SortOption.RECIPIENT_NAME_REVERSE_ALPHABETICAL: - sortMethod = (a, b) => - selectProfile(state, a.recipientId).name > - selectProfile(state, b.recipientId).name - ? -1 - : 1; - break; - default: - sortMethod = (a, b) => - new Date(a.sendDate) > new Date(b.sendDate) ? -1 : 1; - break; - } - responsesCopy.sort(sortMethod); - setSortedResponses(responsesCopy); - }, [state, sortType, dateRange, responses, withinDateRange]); - - return ( -
    - -
    - - - - - - - - - - {requesteeProfile?.name} - - - {requesteeProfile?.title} - - - - - {templateName} - - - - - - - -
    - - - - - - {sortedResponses && sortedResponses.length - ? sortedResponses.map(response => { - return ( - - ); - }) - : noRequestsMessage()} - - -
    -
    - ); -}; - -FeedbackRequestCard.propTypes = propTypes; - -export default FeedbackRequestCard; diff --git a/web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.stories.jsx b/web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.stories.jsx deleted file mode 100644 index b82b3d48c1..0000000000 --- a/web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.stories.jsx +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import { BrowserRouter } from 'react-router-dom'; -import FeedbackRequestCard from './FeedbackRequestCard'; -import { AppContextProvider } from '../../context/AppContext'; - -export default { - title: 'Check Ins/FeedbackRequestCard', - component: FeedbackRequestCard, - decorators: [ - ViewFeedbackSelector => { - return ( - - - - - - ); - } - ] -}; -const Template = args => ; - -export const DefaultTemplate = Template.bind({}); -DefaultTemplate.args = {}; -export const sampleCardTemplate = Template.bind({}); -sampleCardTemplate.args = { - requesteeId: '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', - templateName: 'Survey 1', - responses: [ - { - id: 'c15961e4-6e9b-42cd-8140-ece9efe2445c', - creatorId: '7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', - requesteeId: 'b2d35288-7f1e-4549-aa2b-68396b162490', - recipientId: '2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d', - templateId: '97b0a312-e5dd-46f4-a600-d8be2ad925bb', - sendDate: [2020, 7, 7], - dueDate: null, - submitDate: [2020, 7, 8], - status: 'submitted' - } - ] -}; diff --git a/web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.test.jsx b/web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.test.jsx deleted file mode 100644 index 1d78434b16..0000000000 --- a/web-ui-external-feedback/src/components/feedback_request_card/FeedbackRequestCard.test.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react'; -import { BrowserRouter } from 'react-router-dom'; -import { AppContextProvider } from '../../context/AppContext'; -import FeedbackRequestCard from './FeedbackRequestCard'; - -it('renders correctly', () => { - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/feedback_request_card/__snapshots__/FeedbackRequestCard.test.jsx.snap b/web-ui-external-feedback/src/components/feedback_request_card/__snapshots__/FeedbackRequestCard.test.jsx.snap deleted file mode 100644 index 75039b517a..0000000000 --- a/web-ui-external-feedback/src/components/feedback_request_card/__snapshots__/FeedbackRequestCard.test.jsx.snap +++ /dev/null @@ -1,100 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    - -
    -`; diff --git a/web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.css b/web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.css deleted file mode 100644 index 1bb9ee5bbc..0000000000 --- a/web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.css +++ /dev/null @@ -1,17 +0,0 @@ -.feedback-request-enable-edits-modal { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - max-width: 700px; - padding: 0.5rem; -} - -.cancel-feedback-request-modal { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - max-width: 700px; - padding: 0.5rem; -} diff --git a/web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.jsx b/web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.jsx deleted file mode 100644 index 2c83b22761..0000000000 --- a/web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.jsx +++ /dev/null @@ -1,448 +0,0 @@ -import React, { useContext, useCallback, useState } from 'react'; -import { styled } from '@mui/material/styles'; -import PropTypes from 'prop-types'; -import Grid from '@mui/material/Grid'; -import Typography from '@mui/material/Typography'; -import Divider from '@mui/material/Divider'; -import { sendReminderNotification } from '../../../api/notifications'; -import { - cancelFeedbackRequest, - updateFeedbackRequest -} from '../../../api/feedback'; -import IconButton from '@mui/material/IconButton'; -import NotificationsActiveIcon from '@mui/icons-material/NotificationsActive'; -import TrashIcon from '@mui/icons-material/Delete'; -import { AppContext } from '../../../context/AppContext'; -import { selectCsrfToken, selectProfile } from '../../../context/selectors'; -import { - Avatar, - Button, - Card, - CardActions, - CardContent, - CardHeader, - Modal, - Menu, - Tooltip, - Alert -} from '@mui/material'; -import { UPDATE_TOAST } from '../../../context/actions'; -import DateFnsAdapter from '@date-io/date-fns'; -import { getAvatarURL } from '../../../api/api'; -import { makeStyles } from '@mui/styles'; -import MoreIcon from '@mui/icons-material/MoreVert'; -import MenuItem from '@mui/material/MenuItem'; - -import './FeedbackRequestSubcard.css'; - -const PREFIX = 'FeedbackRequestSubcard'; -const classes = { - redTypography: `${PREFIX}-redTypography`, - yellowTypography: `${PREFIX}-yellowTypography`, - greenTypography: `${PREFIX}-greenTypography`, - darkGrayTypography: `${PREFIX}-darkGrayTypography`, - grayTypography: `${PREFIX}-lightGrayTypography` -}; - -// TODO jss-to-styled codemod: The Fragment root was replaced by div. Change the tag if needed. -const Root = styled('div')({ - [`& .${classes.redTypography}`]: { - color: '#FF0000' - }, - [`& .${classes.yellowTypography}`]: { - color: '#EE8C00' - }, - [`& .${classes.greenTypography}`]: { - color: '#006400' - }, - [`& .${classes.darkGrayTypography}`]: { - color: '#333333' - }, - [`& .${classes.grayTypography}`]: { - color: 'gray' - } -}); - -const useResponsiveStyles = makeStyles({ - marginMobile: { - '@media (max-width:960px)': { - marginBottom: '0.5vh', - marginTop: '2vh' - } - } -}); -const dateFns = new DateFnsAdapter(); - -const propTypes = { - request: PropTypes.object.isRequired -}; - -const FeedbackRequestSubcard = ({ request }) => { - const { state } = useContext(AppContext); - const csrf = selectCsrfToken(state); - const responsiveClasses = useResponsiveStyles(); - let { submitDate, dueDate, sendDate } = request; - const recipient = selectProfile(state, request?.recipientId); - submitDate = submitDate - ? dateFns.format(new Date(submitDate.join('/')), 'LLLL dd, yyyy') - : null; - - sendDate = dateFns.format(new Date(sendDate.join('/')), 'LLLL dd, yyyy'); - dueDate = dueDate - ? dateFns.format(new Date(dueDate.join('/')), 'LLLL dd, yyyy') - : null; - - const [requestStatus, setRequestStatus] = useState(request?.status); - const [requestDueDate, setRequestDueDate] = useState(dueDate); - const [cancelingRequest, setCancelingRequest] = useState(false); - const [expandMenuAnchor, setExpandMenuAnchor] = useState(null); - const [enableEditsDialog, setEnableEditsDialog] = useState(false); - - const recipientId = request?.id; - const recipientEmail = recipient?.workEmail; - const handleReminderClick = useCallback(() => { - const handleReminderNotification = async () => { - let res = await sendReminderNotification( - recipientId, - [recipientEmail], - csrf - ); - let reminderResponse = - res && res.payload && res.payload.status === 200 && !res.error; - if (reminderResponse) { - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'success', - toast: 'Notification sent!' - } - }); - } else { - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'Notification could not be sent :(' - } - }); - } - }; - if (csrf) { - handleReminderNotification(); - } - }, [recipientId, recipientEmail, csrf]); - - const handleCancelClick = useCallback( - feedbackRequest => { - const cancelRequest = async feedbackRequest => { - const res = await cancelFeedbackRequest(feedbackRequest, csrf); - const cancellationResponse = - res && res.payload && res.payload.status === 200 && !res.error - ? res.payload.data - : null; - if (cancellationResponse) { - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'success', - toast: 'Feedback request canceled' - } - }); - } else { - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: - 'There was an error deleting the feedback request. Please contact your administrator.' - } - }); - } - return cancellationResponse; - }; - - setCancelingRequest(false); - if (csrf) { - cancelRequest(feedbackRequest).then(res => { - if (res) { - setRequestStatus(res.status); - setRequestDueDate(res.dueDate); - } - }); - } - }, - [csrf] - ); - - const handleEnableEditsClick = useCallback(() => { - setEnableEditsDialog(false); - - const enableFeedbackEdits = async () => { - const requestWithEditsEnabled = { - ...request, - status: 'sent', - submitDate: null - }; - - const res = await updateFeedbackRequest(requestWithEditsEnabled, csrf); - return res && res.payload && res.payload.data && !res.error - ? res.payload.data - : null; - }; - - if (csrf) { - enableFeedbackEdits().then(res => { - if (res) { - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'success', - toast: `Enabled edits for ${recipient?.name}'s feedback` - } - }); - } else { - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'Could not enable edits for this feedback request' - } - }); - } - }); - } - }, [csrf, recipient, request]); - - const Submitted = () => { - if (requestDueDate) { - let today = new Date(); - let due = new Date(requestDueDate); - if (!request.submitDate && today > due) { - return ( - Overdue - ); - } - } - - if (request.submitDate) { - return ( - - Submitted {submitDate} - - ); - } else if (requestStatus === 'pending') { - return ( - - Scheduled for send on {sendDate} - - ); - } else if (requestStatus === 'canceled') { - return ( - Canceled - ); - } else { - return ( - - Not Submitted - - ); - } - }; - - return ( - - - - - - - - - - {recipient?.name} - - {recipient?.title} - - - - - Sent on {sendDate} - - - {requestDueDate ? `Due on ${requestDueDate}` : 'No due date'} - - - - - - - {request && - !request.submitDate && - requestStatus !== 'canceled' && ( - <> - - setCancelingRequest(true)} - aria-label="Cancel Request" - label="Cancel Request" - > - - - - - - - - - - )} - {request && request.submitDate && request.id ? ( - <> - - setExpandMenuAnchor(event.currentTarget)} - > - - - setExpandMenuAnchor(false)} - anchorOrigin={{ - vertical: 'bottom', - horizontal: 'center' - }} - transformOrigin={{ - vertical: 'top', - horizontal: 'center' - }} - > - { - setExpandMenuAnchor(null); - setEnableEditsDialog(true); - }} - > - Enable Edits - - - setEnableEditsDialog(false)} - > - - - Enable Feedback Edits - - } - /> - - - Are you sure you want {recipient?.name} to be - able to make changes to this feedback submission? This - will allow them to edit their original responses and - resubmit them. - - - {recipient?.name}'s feedback for this request will be - inaccessible until they submit their answers again. - - - - - - - - - - ) : null} - - - - {request && !request.submitDate && requestStatus !== 'canceled' && ( - setCancelingRequest(false)} - > - - - Cancel Feedback Request - - } - /> - - - Are you sure you want to cancel the feedback request sent to{' '} - {recipient?.name} on {sendDate}? The recipient - will not be able to respond to this request once it is - canceled. - - - - - - - - - )} - - - ); -}; - -FeedbackRequestSubcard.propTypes = propTypes; - -export default FeedbackRequestSubcard; diff --git a/web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.test.jsx b/web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.test.jsx deleted file mode 100644 index 3681bb294d..0000000000 --- a/web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/FeedbackRequestSubcard.test.jsx +++ /dev/null @@ -1,29 +0,0 @@ -import { ThemeProvider } from '@mui/styles'; -import React from 'react'; -import { BrowserRouter } from 'react-router-dom'; -import { AppContextProvider } from '../../../context/AppContext'; -import FeedbackRequestSubcard from './FeedbackRequestSubcard'; - -it('renders correctly', () => { - snapshot( - - - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/__snapshots__/FeedbackRequestSubcard.test.jsx.snap b/web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/__snapshots__/FeedbackRequestSubcard.test.jsx.snap deleted file mode 100644 index 765e026e0e..0000000000 --- a/web-ui-external-feedback/src/components/feedback_request_card/feedback_request_subcard/__snapshots__/FeedbackRequestSubcard.test.jsx.snap +++ /dev/null @@ -1,109 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -`; diff --git a/web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.css b/web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.css deleted file mode 100644 index 704cec7b34..0000000000 --- a/web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.css +++ /dev/null @@ -1,15 +0,0 @@ -.request-confirmation { - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; - align-content: center; - align-items: center; - padding-top: 40px; - overflow-x: hidden; -} - -.recipients-list { - padding-top: 10px; -} diff --git a/web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx b/web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx deleted file mode 100644 index d7f37595d2..0000000000 --- a/web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.jsx +++ /dev/null @@ -1,163 +0,0 @@ -import React, { useContext, useEffect, useState } from 'react'; -import { styled } from '@mui/material/styles'; -import Typography from '@mui/material/Typography'; -import CheckCircleIcon from '@mui/icons-material/CheckCircle'; -import { - selectProfile, - selectHasCreateFeedbackPermission, - noPermission, -} from '../../context/selectors'; -import { AppContext } from '../../context/AppContext'; -import { Link, useLocation } from 'react-router-dom'; -import queryString from 'query-string'; -import DateFnsUtils from '@date-io/date-fns'; -import './FeedbackRequestConfirmation.css'; -import { green } from '@mui/material/colors'; -import Button from '@mui/material/Button'; -import {getFeedbackTemplate} from "../../api/feedbacktemplate.js"; -import {UPDATE_TOAST} from "../../context/actions.js"; -import {getExternalRecipients} from "../../api/feedback.js"; // Import the action type - -const dateUtils = new DateFnsUtils(); -const PREFIX = 'FeedbackRequestConfirmation'; -const classes = { - announcement: `${PREFIX}-announcement`, - checkmark: `${PREFIX}-checkmark` -}; - -const Root = styled('div')({ - [`& .${classes.announcement}`]: { - textAlign: 'center', - ['@media (max-width:820px)']: { - // eslint-disable-line no-useless-computed-key - fontSize: 'x-large' - } - }, - [`& .${classes.checkmark}`]: { - ['@media (max-width:820px)']: { - // eslint-disable-line no-useless-computed-key - width: '65%' - } - } -}); - -let today = new Date(); - -const FeedbackRequestConfirmation = () => { - const { state, dispatch } = useContext(AppContext); - const location = useLocation(); - const query = queryString.parse(location?.search); - const forQuery = query.for?.toString(); - const fromQuery = query.from?.toString(); - const sendQuery = query.send?.toString(); - const templateQuery = query.template?.toString(); - const requestee = selectProfile(state, forQuery); - const [templateIsForExternalRecipient, setTemplateIsForExternalRecipient] = useState(false); - const [externalRecipients, setExternalRecipients] = useState([]); - - useEffect(() => { - async function fetchTemplateDetails() { - if (!templateQuery) return; - let res = await getFeedbackTemplate(templateQuery); - let templateResponse = - res.payload && - res.payload.data && - res.payload.status === 200 && - !res.error - ? res.payload.data - : null; - - if (templateResponse === null) { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'The ID for the template you selected does not exist.' - } - }); - } else { - setTemplateIsForExternalRecipient(templateResponse.isForExternalRecipient); - } - } - fetchTemplateDetails(); - }, [templateQuery, dispatch]); - - useEffect(() => { - async function fetchExternalRecipients() { - let res = await getExternalRecipients(); - let externalRecipientsResponse = - res.payload && res.payload.data && res.payload.status === 200 && !res.error - ? res.payload.data - : null - ; - if (externalRecipientsResponse) { - setExternalRecipients(externalRecipientsResponse); - } - } - fetchExternalRecipients(); - }, [templateIsForExternalRecipient]); - - function getRecipientNames() { - let recipientProfiles = []; - if (templateIsForExternalRecipient) { - if (fromQuery !== undefined) { - let fromArray = fromQuery.split(','); - fromArray.forEach(id => { - let recipient = externalRecipients.find(recipient => recipient.id === id); - if (recipient) { - recipientProfiles.push(recipient.firstName + ' ' + recipient.lastName + ' (' + recipient.companyName + ')'); - } - }); - } - } else { - if (fromQuery !== undefined) { - let fromArray = fromQuery.split(','); - fromArray.forEach(id => { - recipientProfiles.push(id); - }); - } - } - return recipientProfiles; - } - - let recipientInfo = getRecipientNames(); - let sendDate = dateUtils.parse(sendQuery, 'MM/dd/yyyy', new Date()); - - return selectHasCreateFeedbackPermission(state) ? ( - - - checkmark-image - - - - Feedback request{' '} - {dateUtils.isBefore(today, sendDate) - ? ' scheduled on: ' + sendQuery - : ' sent'}{' '} - for {requestee?.name}{' '} - - - - Sent to: - {recipientInfo?.map( - (recipient, index) => - ` - ${ - templateIsForExternalRecipient - ? recipient - : selectProfile(state, recipient)?.name - } - ${index === recipientInfo.length - 1 ? '' : ', '} - ` - )} - - - - - - ) : ( -

    {noPermission}

    - ); -}; - -export default FeedbackRequestConfirmation; diff --git a/web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.test.jsx b/web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.test.jsx deleted file mode 100644 index cf598a2827..0000000000 --- a/web-ui-external-feedback/src/components/feedback_request_confirmation/FeedbackRequestConfirmation.test.jsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from 'react'; -import { BrowserRouter } from 'react-router-dom'; -import { AppContextProvider } from '../../context/AppContext'; -import FeedbackRequestConfirmation from './FeedbackRequestConfirmation'; - -const userStateWithPermission = { - state: { - userProfile: { - name: 'sherlock holmes', - role: ['MEMBER'], - permissions: [{ permission: 'CAN_CREATE_FEEDBACK_REQUEST' }], - } - } -}; - -const userStateWithoutPermission = { - state: { - userProfile: { - name: 'john watson', - role: ['MEMBER'], - permissions: [{ permission: 'CAN_VIEW_SKILLS_REPORT' }], - } - } -}; - -it('renders the confirmation message', () => { - snapshot( - - - - - - ); -}); - -it('renders an error if the user does not have appropriate permission', () => { - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/feedback_request_confirmation/__snapshots__/FeedbackRequestConfirmation.test.jsx.snap b/web-ui-external-feedback/src/components/feedback_request_confirmation/__snapshots__/FeedbackRequestConfirmation.test.jsx.snap deleted file mode 100644 index 06e90e4e64..0000000000 --- a/web-ui-external-feedback/src/components/feedback_request_confirmation/__snapshots__/FeedbackRequestConfirmation.test.jsx.snap +++ /dev/null @@ -1,64 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders an error if the user does not have appropriate permission 1`] = ` -
    -

    - You do not have permission to view this page. -

    -
    -`; - -exports[`renders the confirmation message 1`] = ` -
    -
    - -

    - - Feedback request - - sent - - for - - -

    -
    - - Sent to: - -
    - - - -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.css b/web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.css deleted file mode 100644 index 2c2becd3c4..0000000000 --- a/web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.css +++ /dev/null @@ -1,11 +0,0 @@ -.submit-confirmation { - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; - align-content: center; - align-items: center; - padding-top: 40px; - overflow-x: hidden; -} diff --git a/web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.jsx b/web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.jsx deleted file mode 100644 index 1d707f1371..0000000000 --- a/web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.jsx +++ /dev/null @@ -1,104 +0,0 @@ -import React, { useContext, useEffect, useRef, useState } from 'react'; -import { styled } from '@mui/material/styles'; -import Typography from '@mui/material/Typography'; -import CheckCircleIcon from '@mui/icons-material/CheckCircle'; -import { - selectCsrfToken, - selectCurrentUser, - selectProfile, - selectHasCreateFeedbackPermission, - noPermission, -} from '../../context/selectors'; -import { AppContext } from '../../context/AppContext'; -import { useLocation } from 'react-router-dom'; -import queryString from 'query-string'; -import './FeedbackSubmitConfirmation.css'; -import { green } from '@mui/material/colors'; -import { getFeedbackRequestById } from '../../api/feedback'; - -const PREFIX = 'FeedbackSubmitConfirmation'; -const classes = { - announcement: `${PREFIX}-announcement` -}; - -const Root = styled('div')({ - [`& .${classes.announcement}`]: { - textAlign: 'center', - ['@media (max-width:820px)']: { - // eslint-disable-line no-useless-computed-key - fontSize: 'x-large' - } - } -}); - -const FeedbackSubmitConfirmation = props => { - const { state } = useContext(AppContext); - const location = useLocation(); - const query = queryString.parse(location?.search); - const csrf = selectCsrfToken(state); - const currentUserId = selectCurrentUser(state)?.id; - const requestQuery = query.request?.toString(); - const [feedbackRequest, setFeedbackRequest] = useState(null); - const feedbackRequestFetched = useRef(false); - - const [requestee, setRequestee] = useState(null); - - useEffect(() => { - async function getFeedbackRequest(cookie) { - if (!currentUserId || !cookie || feedbackRequestFetched.current) { - return null; - } - - // make call to the API - let res = await getFeedbackRequestById(requestQuery, cookie); - return res.payload && - res.payload.data && - res.payload.status === 200 && - !res.error - ? res.payload.data - : null; - } - - if ( - csrf && - currentUserId && - requestQuery && - !feedbackRequestFetched.current - ) { - getFeedbackRequest(csrf).then(request => { - if (request) { - setFeedbackRequest(request); - } - }); - } - }, [csrf, currentUserId, requestQuery]); - - useEffect(() => { - if (feedbackRequest) { - feedbackRequestFetched.current = true; - } - - if (feedbackRequestFetched.current) { - const requesteeProfile = selectProfile( - state, - feedbackRequest?.requesteeId - ); - setRequestee(requesteeProfile); - } - }, [feedbackRequest, state]); - - return selectHasCreateFeedbackPermission(state) ? ( - - - checkmark-image - - - Thank you for your feedback on {requestee?.name} - - - ) : ( -

    {noPermission}

    - ); -}; - -export default FeedbackSubmitConfirmation; diff --git a/web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.test.jsx b/web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.test.jsx deleted file mode 100644 index 83e35af751..0000000000 --- a/web-ui-external-feedback/src/components/feedback_submit_confirmation/FeedbackSubmitConfirmation.test.jsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react'; -import { BrowserRouter } from 'react-router-dom'; -import { AppContextProvider } from '../../context/AppContext'; -import FeedbackSubmitConfirmation from './FeedbackSubmitConfirmation'; - -const userStateWithPermission = { - state: { - userProfile: { - name: 'john watson', - role: ['MEMBER'], - permissions: [{ permission: 'CAN_CREATE_FEEDBACK_REQUEST' }], - } - } -}; - -it('renders the confirmation message', () => { - snapshot( - - - - - - ); -}); - -it('renders an error if user does not have appropriate permission', () => { - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/feedback_submit_confirmation/__snapshots__/FeedbackSubmitConfirmation.test.jsx.snap b/web-ui-external-feedback/src/components/feedback_submit_confirmation/__snapshots__/FeedbackSubmitConfirmation.test.jsx.snap deleted file mode 100644 index bbe8684e20..0000000000 --- a/web-ui-external-feedback/src/components/feedback_submit_confirmation/__snapshots__/FeedbackSubmitConfirmation.test.jsx.snap +++ /dev/null @@ -1,36 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders an error if user does not have appropriate permission 1`] = ` -
    -

    - You do not have permission to view this page. -

    -
    -`; - -exports[`renders the confirmation message 1`] = ` -
    -
    - -

    - Thank you for your feedback on - -

    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.css b/web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.css deleted file mode 100644 index 04c5a8ad73..0000000000 --- a/web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.css +++ /dev/null @@ -1,29 +0,0 @@ -.feedback-template-actions { - margin: 20px 32px 0 32px; - display: flex; - flex-direction: row; - align-items: center; -} - -.feedback-template-actions .ad-hoc-button { - display: flex; - flex-direction: row; - align-items: center; - margin: 16px 0 0 3em; -} - -.feedback-template-actions .feedback-template-search { - width: 40ch; -} - -@media (max-width: 767px) { - .feedback-template-actions { - display: flex; - flex-direction: column; - align-items: flex-start; - } - - .feedback-template-actions .ad-hoc-button { - margin: 16px 0 0 0; - } -} diff --git a/web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.jsx b/web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.jsx deleted file mode 100644 index d3b3dbd8b8..0000000000 --- a/web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.jsx +++ /dev/null @@ -1,252 +0,0 @@ -import React, { - useState, - useContext, - useEffect, - useCallback, - useRef -} from 'react'; -import TemplateCard from '../template-card/TemplateCard'; -import TemplatePreviewModal from '../template-preview-modal/TemplatePreviewModal'; -import PropTypes from 'prop-types'; -import { InputAdornment, TextField, Tooltip } from '@mui/material'; -import Button from '@mui/material/Button'; -import HelpOutlineIcon from '@mui/icons-material/HelpOutline'; -import { - createFeedbackTemplateWithQuestion, - getAllFeedbackTemplates -} from '../../api/feedbacktemplate'; -import { AppContext } from '../../context/AppContext'; -import { selectCsrfToken, selectCurrentUser } from '../../context/selectors'; -import { Search } from '@mui/icons-material'; -import { UPDATE_TOAST } from '../../context/actions'; - -import './FeedbackTemplateSelector.css'; - -const propTypes = { - query: PropTypes.string, - changeQuery: PropTypes.func -}; - -const FeedbackTemplateSelector = ({ query, changeQuery }) => { - const { state, dispatch } = useContext(AppContext); - const csrf = selectCsrfToken(state); - const currentUser = selectCurrentUser(state); - const currentUserId = currentUser?.id; - const [templates, setTemplates] = useState([]); - const [preview, setPreview] = useState({ - open: false, - selectedTemplate: {}, - createAdHoc: false - }); - const [searchText, setSearchText] = useState(''); - const templatesFetched = useRef(false); - - // Gets all templates when the component mounts - useEffect(() => { - async function getTemplates(csrf) { - if (!currentUserId || !csrf) { - return []; - } - let res = await getAllFeedbackTemplates(csrf); - let templateList = - res.payload && - res.payload.data && - res.payload.status === 200 && - !res.error - ? res.payload.data - : null; - if (templateList) { - templatesFetched.current = true; - return templateList; - } - } - if (csrf && currentUserId) { - getTemplates(csrf).then(templateList => { - setTemplates(templateList); - }); - } - }, [currentUserId, csrf]); - - const handlePreviewOpen = (event, selectedTemplate) => { - event.stopPropagation(); - setPreview({ - open: true, - selectedTemplate: selectedTemplate, - createAdHoc: false - }); - }; - - const handlePreviewClose = selectedTemplate => { - setPreview({ - open: false, - selectedTemplate: selectedTemplate, - createAdHoc: false - }); - }; - - const handlePreviewSubmit = async (submittedTemplate, submittedQuestion) => { - if (!currentUserId || !csrf) { - return; - } - // User creates a new ad-hoc template - if (submittedTemplate && submittedQuestion && preview.createAdHoc) { - const newFeedbackTemplate = { - title: submittedTemplate.title, - description: submittedTemplate.description, - creatorId: currentUserId, - active: true, - isAdHoc: true, - isPublic: false, - isReview: false, - isForExternalRecipient: submittedTemplate.isForExternalRecipient, - }; - - const newTemplateQuestion = { - question: submittedQuestion, - questionNumber: 1, - inputType: 'TEXT' - }; - - const { templateRes, questionRes } = - await createFeedbackTemplateWithQuestion( - newFeedbackTemplate, - newTemplateQuestion, - csrf - ); - - if (templateRes.error || questionRes.error) { - const errorMessage = templateRes.error - ? 'Failed to save ad-hoc template' - : 'Failed to save question for ad-hoc template'; - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: errorMessage - } - }); - } else if (templateRes.payload && templateRes.payload.data) { - newFeedbackTemplate.id = templateRes.payload.data.id; - setTemplates([...templates, newFeedbackTemplate]); - changeQuery('template', newFeedbackTemplate.id); - } - } else if (submittedTemplate) { - changeQuery('template', submittedTemplate.id); - } - - setPreview({ - open: false, - selectedTemplate: submittedTemplate, - createAdHoc: false - }); - }; - - const onCardClick = useCallback( - template => { - if (!template || !template.id) { - return; - } - if (query === template.id) { - changeQuery('template', undefined); - } else { - changeQuery('template', template.id); - } - }, - [changeQuery, query] - ); - - const onNewAdHocClick = () => { - setPreview({ open: true, selectedTemplate: {}, createAdHoc: true }); - }; - - const getFilteredTemplates = useCallback(() => { - if (templates === undefined) { - return null; - } else if (templatesFetched.current && templates.length === 0) { - return

    No templates found

    ; - } - - let templatesToDisplay = templates; - if (searchText) { - const filtered = templates.filter( - template => - template.title?.toLowerCase().includes(searchText.toLowerCase()) || - template.description?.toLowerCase().includes(searchText.toLowerCase()) - ); - - if (filtered.length === 0) { - return

    No matching templates

    ; - } else { - templatesToDisplay = filtered; - } - } - - return templatesToDisplay.map(template => ( - handlePreviewOpen(e, template)} - onCardClick={() => onCardClick(template)} - /> - )); - }, [query, templates, searchText, onCardClick, preview.open]); - - return ( - - {preview.selectedTemplate && ( - - handlePreviewSubmit(submittedTemplate, submittedQuestion) - } - onClose={() => handlePreviewClose(preview.selectedTemplate)} - createAdHoc={preview.createAdHoc} - /> - )} -
    - { - setSearchText(e.target.value); - }} - InputProps={{ - endAdornment: ( - - - - ) - }} - /> -
    - - - - -
    -
    -
    {getFilteredTemplates()}
    -
    - ); -}; - -FeedbackTemplateSelector.propTypes = propTypes; - -export default FeedbackTemplateSelector; diff --git a/web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.test.jsx b/web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.test.jsx deleted file mode 100644 index 573b3f16ec..0000000000 --- a/web-ui-external-feedback/src/components/feedback_template_selector/FeedbackTemplateSelector.test.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import FeedbackTemplateSelector from './FeedbackTemplateSelector'; -import { AppContextProvider } from '../../context/AppContext'; - -it('renders the recipient card', () => { - snapshot( - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/feedback_template_selector/__snapshots__/FeedbackTemplateSelector.test.jsx.snap b/web-ui-external-feedback/src/components/feedback_template_selector/__snapshots__/FeedbackTemplateSelector.test.jsx.snap deleted file mode 100644 index d0cc2d59f0..0000000000 --- a/web-ui-external-feedback/src/components/feedback_template_selector/__snapshots__/FeedbackTemplateSelector.test.jsx.snap +++ /dev/null @@ -1,93 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders the recipient card 1`] = ` -
    - -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/feelings/Feelings.jsx b/web-ui-external-feedback/src/components/feelings/Feelings.jsx deleted file mode 100644 index c469cf8ffb..0000000000 --- a/web-ui-external-feedback/src/components/feelings/Feelings.jsx +++ /dev/null @@ -1,65 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { - faFaceGrinBeam, - faSmile, - faMeh, - faFrown, - faFaceSadCry -} from '@fortawesome/free-regular-svg-icons'; - -const propTypes = { - message: PropTypes.string, - onSelect: PropTypes.func -}; -const displayName = 'Feelings'; - -const Feelings = ({ onSelect, message }) => { - const inputs = [ - ['Terrible', faFaceSadCry], - ['Bad', faFrown], - ['Okay', faMeh], - ['Good', faSmile], - ['Great', faFaceGrinBeam] - ]; - const onChange = e => { - onSelect(e.target.value); - }; - - return ( -
    -

    {message}

    -
    - {inputs.map(([text, icon], i) => ( -
    -
    - -
    - - {text} -
    - ))} -
    -
    - ); -}; - -Feelings.propTypes = propTypes; -Feelings.displayName = displayName; - -export default Feelings; diff --git a/web-ui-external-feedback/src/components/feelings/Feelings.test.jsx b/web-ui-external-feedback/src/components/feelings/Feelings.test.jsx deleted file mode 100644 index f04efc31df..0000000000 --- a/web-ui-external-feedback/src/components/feelings/Feelings.test.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import Feelings from './Feelings'; -import { render, screen, fireEvent } from '@testing-library/react'; - -it('renders correctly', () => { - snapshot(); -}); - -const message = 'le test'; - -it('renders message correctly', () => { - snapshot(); -}); - -it('calls onSelect correctly', () => { - const onSelect = vi.fn(); - render(); - - const input = screen.getByTestId('feelings-input-0'); - fireEvent.click(input); - - expect(onSelect.mock.calls.length).toBe(1); -}); diff --git a/web-ui-external-feedback/src/components/feelings/__snapshots__/Feelings.test.jsx.snap b/web-ui-external-feedback/src/components/feelings/__snapshots__/Feelings.test.jsx.snap deleted file mode 100644 index 57b3e49dc8..0000000000 --- a/web-ui-external-feedback/src/components/feelings/__snapshots__/Feelings.test.jsx.snap +++ /dev/null @@ -1,317 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    -

    -
    -
    -
    - -
    - - Terrible -
    -
    -
    - -
    - - Bad -
    -
    -
    - -
    - - Okay -
    -
    -
    - -
    - - Good -
    -
    -
    - -
    - - Great -
    -
    -

    -
    -`; - -exports[`renders message correctly 1`] = ` -
    -
    -

    - le test -

    -
    -
    -
    - -
    - - Terrible -
    -
    -
    - -
    - - Bad -
    -
    -
    - -
    - - Okay -
    -
    -
    - -
    - - Good -
    -
    -
    - -
    - - Great -
    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/guides/GuideLink.css b/web-ui-external-feedback/src/components/guides/GuideLink.css deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/web-ui-external-feedback/src/components/guides/GuideLink.jsx b/web-ui-external-feedback/src/components/guides/GuideLink.jsx deleted file mode 100644 index 180af0da04..0000000000 --- a/web-ui-external-feedback/src/components/guides/GuideLink.jsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react'; -import { Link } from 'react-router-dom'; -import { ListItem, ListItemText } from '@mui/material'; -import PropTypes from 'prop-types'; - -import './GuideLink.css'; - -const propTypes = { - props: PropTypes.shape({ - id: PropTypes.string.isRequired, - name: PropTypes.string.isRequired, - url: PropTypes.string.isRequired, - description: PropTypes.string - }) -}; - -const GuideLink = props => { - return ( - - - - ); -}; - -GuideLink.propTypes = propTypes; -export default GuideLink; diff --git a/web-ui-external-feedback/src/components/guides/GuideLink.test.jsx b/web-ui-external-feedback/src/components/guides/GuideLink.test.jsx deleted file mode 100644 index 12093b4d7e..0000000000 --- a/web-ui-external-feedback/src/components/guides/GuideLink.test.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import GuideLink from './GuideLink'; -import { MemoryRouter } from 'react-router-dom'; - -it('renders correctly', () => { - snapshot( - - - - ); -}); - -it('renders descriptions', () => { - snapshot( - - - - ); -}); \ No newline at end of file diff --git a/web-ui-external-feedback/src/components/guides/GuidesPanel.css b/web-ui-external-feedback/src/components/guides/GuidesPanel.css deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/web-ui-external-feedback/src/components/guides/GuidesPanel.jsx b/web-ui-external-feedback/src/components/guides/GuidesPanel.jsx deleted file mode 100644 index c112bd94c5..0000000000 --- a/web-ui-external-feedback/src/components/guides/GuidesPanel.jsx +++ /dev/null @@ -1,83 +0,0 @@ -import React, { useContext, useEffect, useState } from 'react'; -import PdfIcon from '@mui/icons-material/PictureAsPdf'; -import { Card, CardHeader, List } from '@mui/material'; - -import { AppContext } from '../../context/AppContext.jsx'; -import { selectCsrfToken, selectRoles } from '../../context/selectors.js'; -import { getDocumentsForRoleId } from '../../api/document.js'; - -import GuideLink from './GuideLink'; -import './GuidesPanel.css'; - -const fallbackPdfs = [ - { - id: '1-member', - name: 'Expectations Discussion Guide for Team Members', - url: '/pdfs/Expectations_Discussion_Guide_for_Team_Members.pdf' - }, - { - id: '2-member', - name: 'Expectations Worksheet', - url: '/pdfs/Expectations_Worksheet.pdf' - }, - { - id: '3-member', - name: 'Feedback Discussion Guide for Team Members', - url: '/pdfs/Feedback_Discussion_Guide_for_Team_Members.pdf' - }, - { - id: '4-member', - name: 'Development Discussion Guide for Team Members', - url: '/pdfs/Development_Discussion_Guide_for_Team_Members.pdf' - }, - { - id: '5-member', - name: 'Individual Development Plan', - url: '/pdfs/Individual_Development_Plan.pdf' - } -]; - -export const fetchDocumentsForRole = (roleName, allRoles, csrf, setDocuments, fallback, mockuments) => { - useEffect(() => { - const getDocuments = async () => { - if (mockuments && mockuments.length > 0) { - setDocuments(mockuments); - } else { - const memberRoleId = allRoles.find(role => role.role === roleName)?.id; - const res = await getDocumentsForRoleId(memberRoleId, csrf); - const responseBody = res.payload?.data && !res.error - ? res.payload.data - : undefined; - setDocuments(responseBody?.length > 0 ? responseBody : fallback); - } - }; - if (csrf) { - getDocuments(); - } - }, [csrf]); -}; - -export const generate = (title, documents) => { - return ( - - } title={title} /> - - {documents.map(doc => ( - - ))} - - - ); -}; - -const GuidesPanel = () => { - const { state } = useContext(AppContext); - const csrf = selectCsrfToken(state); - - const [documents, setDocuments] = useState([]); - fetchDocumentsForRole('MEMBER', selectRoles(state), csrf, setDocuments, fallbackPdfs, state.mockuments); - - return generate('Team Member Resources', documents); -}; - -export default GuidesPanel; diff --git a/web-ui-external-feedback/src/components/guides/GuidesPanel.test.jsx b/web-ui-external-feedback/src/components/guides/GuidesPanel.test.jsx deleted file mode 100644 index a525ad413b..0000000000 --- a/web-ui-external-feedback/src/components/guides/GuidesPanel.test.jsx +++ /dev/null @@ -1,45 +0,0 @@ -import React from 'react'; -import { MemoryRouter } from 'react-router-dom'; -import GuidesPanel from './GuidesPanel'; -import { AppContextProvider } from '../../context/AppContext.jsx'; - -const initialState = { - state: { - csrf: 'O_3eLX2-e05qpS_yOeg1ZVAs9nDhspEi', - userProfile: { - name: 'holmes', - role: ['MEMBER'], - imageUrl: - 'https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg' - }, - roles: [ - { id: 1, role: 'MEMBER' }, - { id: 2, role: 'PDL' } - ], - mockuments: [ - { - id: 'mockument-1', - name: 'Expectations Discussion Guide for Team Members', - url: '/pdfs/Expectations_Discussion_Guide_for_Team_Members.pdf', - description: 'My description' - }, - { - id: 'mockument-2', - name: 'Expectations Worksheet', - url: '/pdfs/Expectations_Worksheet.pdf' - } - ], - teams: [] - } -}; - - -it('renders correctly', () => { - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/guides/PDLGuidesPanel.jsx b/web-ui-external-feedback/src/components/guides/PDLGuidesPanel.jsx deleted file mode 100644 index fb0a69e815..0000000000 --- a/web-ui-external-feedback/src/components/guides/PDLGuidesPanel.jsx +++ /dev/null @@ -1,41 +0,0 @@ -import { useContext, useState } from 'react'; - -import { AppContext } from '../../context/AppContext'; -import { selectCsrfToken, selectRoles, selectUserProfile } from '../../context/selectors.js'; - -import { fetchDocumentsForRole, generate } from './GuidesPanel.jsx'; -import './GuidesPanel.css'; - -const fallbackPdfs = [ - { - id: '1', - name: 'Development Discussion Guide for PDLs', - url: '/pdfs/Development_Discussion_Guide_for_PDLs.pdf' - }, - { - id: '2', - name: 'Expectations Discussion Guide for PDLs', - url: '/pdfs/Expectations_Discussion_Guide_for_PDLs.pdf' - }, - { - id: '3', - name: 'Feedback Discussion Guide for PDLs', - url: '/pdfs/Feedback_Discussion_Guide_for_PDLs.pdf' - } -]; - -const PDLGuidesPanel = () => { - const { state } = useContext(AppContext); - const csrf = selectCsrfToken(state); - const isPdl = selectUserProfile(state)?.role?.includes('PDL'); - const [documents, setDocuments] = useState(fallbackPdfs); - - if (isPdl) { - fetchDocumentsForRole('PDL', selectRoles(state), csrf, setDocuments, fallbackPdfs, state.mockuments); - return generate('Development Lead Guides', documents); - } else { - return null; - } -}; - -export default PDLGuidesPanel; diff --git a/web-ui-external-feedback/src/components/guides/PDLGuidesPanel.test.jsx b/web-ui-external-feedback/src/components/guides/PDLGuidesPanel.test.jsx deleted file mode 100644 index 51f38ba3d0..0000000000 --- a/web-ui-external-feedback/src/components/guides/PDLGuidesPanel.test.jsx +++ /dev/null @@ -1,61 +0,0 @@ -import React from 'react'; -import { AppContextProvider } from '../../context/AppContext'; -import PDLGuidesPanel from './PDLGuidesPanel'; -import { Router } from 'react-router-dom'; -import { createBrowserHistory } from 'history'; - -const initialState = { - state: { - csrf: 'O_3eLX2-e05qpS_yOeg1ZVAs9nDhspEi', - userProfile: { - name: 'holmes', - role: ['MEMBER'], - imageUrl: - 'https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg' - }, - roles: [ - { id: 1, role: 'MEMBER' }, - { id: 2, role: 'PDL' } - ], - mockuments: [ - { - id: 'mockument-1', - name: 'Development Discussion Guide for PDLs', - url: '/pdfs/Development_Discussion_Guide_for_PDLs.pdf' - } - ], - teams: [] - } -}; - -const pdlState = { - state: { - ...initialState.state, - userProfile: { - ...initialState.state.userProfile, - role: ['MEMBER', 'PDL'] - } - } -}; - -it('renders correctly', () => { - const customHistory = createBrowserHistory(); - snapshot( - - - - - - ); -}); - -it('doesn\'t render for non-pdls', () => { - const customHistory = createBrowserHistory(); - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/guides/__snapshots__/GuideLink.test.jsx.snap b/web-ui-external-feedback/src/components/guides/__snapshots__/GuideLink.test.jsx.snap deleted file mode 100644 index 6e6280cdc2..0000000000 --- a/web-ui-external-feedback/src/components/guides/__snapshots__/GuideLink.test.jsx.snap +++ /dev/null @@ -1,46 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` - -`; - -exports[`renders descriptions 1`] = ` - -`; diff --git a/web-ui-external-feedback/src/components/guides/__snapshots__/GuidesPanel.test.jsx.snap b/web-ui-external-feedback/src/components/guides/__snapshots__/GuidesPanel.test.jsx.snap deleted file mode 100644 index 455f2d06e8..0000000000 --- a/web-ui-external-feedback/src/components/guides/__snapshots__/GuidesPanel.test.jsx.snap +++ /dev/null @@ -1,77 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` - -`; diff --git a/web-ui-external-feedback/src/components/guides/__snapshots__/PDLGuidesPanel.test.jsx.snap b/web-ui-external-feedback/src/components/guides/__snapshots__/PDLGuidesPanel.test.jsx.snap deleted file mode 100644 index 40d75294cc..0000000000 --- a/web-ui-external-feedback/src/components/guides/__snapshots__/PDLGuidesPanel.test.jsx.snap +++ /dev/null @@ -1,59 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`doesn't render for non-pdls 1`] = `
    `; - -exports[`renders correctly 1`] = ` -
    -
    -
    -
    - -
    -
    - - Development Lead Guides - -
    -
    - -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/guild-results/EditGuildModal.css b/web-ui-external-feedback/src/components/guild-results/EditGuildModal.css deleted file mode 100644 index 848b7f9901..0000000000 --- a/web-ui-external-feedback/src/components/guild-results/EditGuildModal.css +++ /dev/null @@ -1,37 +0,0 @@ -.EditGuildModal { - position: absolute; - min-width: 400px; - max-width: 600px; - background-color: var(--checkins-palette-background-paper); - top: 50%; - left: 50%; - padding: 0.5rem; - transform: translate(-50%, -50%); - border: 2px solid var(--muted); -} - -.EditGuildModal h2 { - margin-block-end: 0rem; - margin-left: 0.5rem; -} - -.EditGuildModal-actions { - margin-top: 1rem; - width: calc(100% - 1rem); - display: flex; - flex-direction: row; - justify-content: flex-end; -} - -.EditGuildModal .MuiTextField-root.fullWidth { - width: calc(100% - 1rem); -} - -.EditGuildModal .MuiTextField-root.halfWidth { - width: calc(50% - 0.5rem); -} - -.EditGuildModal .MuiTextField-root { - margin: 0.5rem; - width: 25ch; -} diff --git a/web-ui-external-feedback/src/components/guild-results/EditGuildModal.jsx b/web-ui-external-feedback/src/components/guild-results/EditGuildModal.jsx deleted file mode 100644 index 953c5ccfb1..0000000000 --- a/web-ui-external-feedback/src/components/guild-results/EditGuildModal.jsx +++ /dev/null @@ -1,284 +0,0 @@ -import React, { useContext, useState, useEffect, useCallback } from 'react'; - -import { AppContext } from '../../context/AppContext'; -import { - selectCurrentUser, - selectCurrentMembers -} from '../../context/selectors'; - -import { - Button, - FormControlLabel, - Modal, - Switch, - TextField, - Checkbox, -} from '@mui/material'; -import Autocomplete from '@mui/material/Autocomplete'; -import './EditGuildModal.css'; - -const EditGuildModal = ({ guild = {}, open, onSave, onClose, headerText }) => { - const { state } = useContext(AppContext); - const currentUser = selectCurrentUser(state); - const [editedGuild, setGuild] = useState(guild); - const [guildMemberOptions, setGuildMemberOptions] = useState([]); - const currentMembers = selectCurrentMembers(state); - const guildMembers = guild?.guildMembers; - - const findExistingMember = useCallback( - member => - guildMembers?.find(current => current.memberId === member.memberId), - [guildMembers] - ); - - useEffect(() => { - if (open && guild.id !== editedGuild.id) setGuild(guild); - }, [open, guild, editedGuild]); - - useEffect(() => { - if ( - currentUser?.id && - (editedGuild.guildMembers === undefined || - editedGuild.guildMembers.length === 0 || - editedGuild.guildMembers.filter(member => member.lead === true) - .length === 0) - ) { - setGuild({ - ...editedGuild, - guildMembers: [ - ...new Set( - editedGuild?.guildMembers?.filter( - member => - member.lead === false && member.memberId !== currentUser.id - ) - ), - { - id: findExistingMember({ memberId: currentUser.id })?.id, - name: `${currentUser.firstName} ${currentUser.lastName}`, - memberId: currentUser.id, - guildId: editedGuild.id, - lead: true - } - ] - }); - } - }, [editedGuild, currentUser, findExistingMember]); - - useEffect(() => { - if (!editedGuild || !editedGuild.guildMembers || !currentMembers) return; - let guildMemberNames = editedGuild.guildMembers.map( - guildMember => guildMember.name - ); - setGuildMemberOptions( - currentMembers.filter(member => !guildMemberNames.includes(member.name)) - ); - }, [currentMembers, editedGuild]); - - const onLeadsChange = (event, newValue) => { - let extantMembers = - editedGuild && editedGuild.guildMembers - ? editedGuild.guildMembers.filter(guildMember => !guildMember.lead) - : []; - newValue = newValue.map(newLead => ({ - id: newLead.memberId ? newLead.id : undefined, - name: newLead.name, - memberId: newLead.memberId ? newLead.memberId : newLead.id, - guildId: editedGuild.id, - lead: true - })); - newValue.forEach(newLead => { - extantMembers = extantMembers.filter( - member => member.memberId !== newLead.memberId - ); - }); - extantMembers = [...new Set(extantMembers)]; - newValue = [...new Set(newValue)]; - setGuild({ - ...editedGuild, - guildMembers: [...extantMembers, ...newValue].map(member => { - const existing = findExistingMember(member); - if (existing) { - return { ...member, id: existing.id }; - } else { - return member; - } - }) - }); - }; - - const onGuildMembersChange = (event, newValue) => { - let extantLeads = - editedGuild && editedGuild.guildMembers - ? editedGuild.guildMembers.filter(guildMember => guildMember.lead) - : []; - newValue = newValue.map(newMember => ({ - id: newMember.memberId ? newMember.id : undefined, - name: newMember.name, - memberId: newMember.memberId ? newMember.memberId : newMember.id, - guildId: editedGuild.id, - lead: false - })); - newValue.forEach(newMember => { - extantLeads = extantLeads.filter( - lead => lead.memberId !== newMember.memberId - ); - }); - extantLeads = [...new Set(extantLeads)]; - newValue = [...new Set(newValue)]; - setGuild({ - ...editedGuild, - guildMembers: [...extantLeads, ...newValue].map(member => { - const existing = findExistingMember(member); - if (existing) { - return { ...member, id: existing.id }; - } else { - return member; - } - }) - }); - }; - - const readyToEdit = guild => { - let numLeads = 0; - if (guild && guild.guildMembers) { - numLeads = guild.guildMembers.filter( - guildMember => guildMember.lead - ).length; - } - return guild.name && numLeads > 0; - }; - - const close = () => { - onClose(); - setGuild({}); - }; - - return ( - -
    -

    {headerText}

    -
    - setGuild({ ...editedGuild, name: e.target.value })} - /> - {guild.id && (<> - { - const { checked } = event.target; - setGuild({ ...editedGuild, active: checked }); - }} - /> Active - )} -
    -
    - { - const { checked } = event.target; - setGuild({ ...editedGuild, community: checked }); - }} - /> - } - label="Community" - /> -
    - - setGuild({ ...editedGuild, description: e.target.value }) - } - /> - setGuild({ ...editedGuild, link: e.target.value })} - /> - guildMember.lead) - : [] - } - isOptionEqualToValue={(option, value) => - value && option.id === value.memberId - } - onChange={onLeadsChange} - getOptionLabel={option => option.name} - renderInput={params => ( - - )} - /> - !guildMember.lead - ) - : [] - } - onChange={onGuildMembersChange} - getOptionLabel={option => option.name} - isOptionEqualToValue={(option, value) => - value && option.id === value.memberId - } - renderInput={params => ( - - )} - /> -
    - - -
    -
    -
    - ); -}; - -export default EditGuildModal; diff --git a/web-ui-external-feedback/src/components/guild-results/EditGuildModal.spec.jsx b/web-ui-external-feedback/src/components/guild-results/EditGuildModal.spec.jsx deleted file mode 100644 index dced872d30..0000000000 --- a/web-ui-external-feedback/src/components/guild-results/EditGuildModal.spec.jsx +++ /dev/null @@ -1,114 +0,0 @@ -import React from 'react'; -import { AppContextProvider } from '../../context/AppContext'; -import EditGuildModal from './EditGuildModal'; -import { http } from 'msw'; -import { setupServer } from 'msw/node'; -import { render, waitFor, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; - -window.snackDispatch = vi.fn(); - -const server = setupServer( - http.get('http://localhost:8080/csrf/cookie', () => { - return HttpResponse.text('O_3eLX2-e05qpS_yOeg1ZVAs9nDhspEi'); - }), - http.get('http://localhost:8080/services/member-profiles/current', () => { - return HttpResponse.json({ id: '12345', name: 'Test User' }); - }), - http.get('http://localhost:8080/services/teams/members', () => { - return HttpResponse.json([{ id: '12345', name: 'Test User' }]); - }) -); - -beforeAll(() => server.listen()); -afterEach(() => server.resetHandlers()); -afterAll(() => server.close()); - -const testGuild = { - name: 'Test Guild', - description: 'A guild used for testing.', - guildLeads: [ - { id: 123, name: 'Guild Leader' }, - { id: 124, name: 'Other Leader' } - ], - guildMembers: [ - { id: 125, name: 'Guild Member' }, - { id: 126, name: 'Other Member' } - ], - active: true, -}; - -const emptyGuild = { - name: 'Test Guild', - description: 'A guild used for testing.', - active: true, -}; - -const currentUserProfile = { - id: 9876, - pdlId: 8765, - name: 'Current User', - firstName: 'Current', - lastName: 'User' -}; - -const initialState = { - state: { - csrf: 'O_3eLX2-e05qpS_yOeg1ZVAs9nDhspEi', - userProfile: { - name: 'Current User', - firstName: 'Current', - lastName: 'User', - role: ['MEMBER'], - imageUrl: - 'https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg', - memberProfile: currentUserProfile - }, - checkins: [], - guilds: [testGuild, emptyGuild], - teams: [], - skills: [], - roles: [], - userRoles: [], - memberSkills: [], - index: 0, - memberProfiles: [ - currentUserProfile, - { id: 123, name: 'Guild Leader' }, - { id: 124, name: 'Other Leader' }, - { id: 125, name: 'Guild Member' }, - { id: 126, name: 'Other Member' } - ] - } -}; - -it('Cannot save without lead', async () => { - const mockOnSave = vi.fn(); - - render( - - - - ); - - await waitFor(() => screen.getByText(/Edit your guild/i)); - - const guildNameInput = screen.getByLabelText(/Guild Name/i); - const guildDescriptionInput = screen.getByLabelText(/Description/i); - - expect(guildNameInput).toHaveValue(testGuild.name); - expect(guildDescriptionInput).toHaveValue(testGuild.description); - - const saveBtn = screen.getByText(/Save Guild/i); - expect(saveBtn).toBeEnabled(); - await userEvent.click(saveBtn); - await waitFor(() => { - expect(mockOnSave).toHaveBeenCalled(); - }); -}); diff --git a/web-ui-external-feedback/src/components/guild-results/GuildResults.css b/web-ui-external-feedback/src/components/guild-results/GuildResults.css deleted file mode 100644 index 7296ac4561..0000000000 --- a/web-ui-external-feedback/src/components/guild-results/GuildResults.css +++ /dev/null @@ -1,37 +0,0 @@ -.MuiCard-root { - margin-bottom: 1rem; -} - -.summary-card { - max-height: 15rem; - max-width: 45%; - min-width: 45%; - word-wrap: break-word; -} - -.guild-actions { - display: flex; - justify-content: flex-end; -} - -.guild-page { - display: flex; - flex-direction: column; -} - -.guild-search { - display: flex; - justify-content: space-between; - align-items: center; - margin-left: 12px; - margin-right: 12px; - margin-bottom: 1rem; -} - -.guilds { - display: flex; - flex-wrap: wrap; - justify-content: space-evenly; - margin-left: 12px; - margin-right: 12px; -} diff --git a/web-ui-external-feedback/src/components/guild-results/GuildResults.jsx b/web-ui-external-feedback/src/components/guild-results/GuildResults.jsx deleted file mode 100644 index 2ca9a97e0c..0000000000 --- a/web-ui-external-feedback/src/components/guild-results/GuildResults.jsx +++ /dev/null @@ -1,154 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { useContext, useState } from 'react'; -import GroupIcon from '@mui/icons-material/Group'; -import { FormControlLabel, Switch, Button, TextField } from '@mui/material'; -import { styled } from '@mui/material/styles'; - -import { createGuild, getGuildLeaders } from '../../api/guild'; -import { ADD_GUILD } from '../../context/actions'; -import { AppContext } from '../../context/AppContext'; -import AddGuildModal from './EditGuildModal'; -import GuildSummaryCard from './GuildSummaryCard'; -import SkeletonLoader from '../skeleton_loader/SkeletonLoader'; -import { useQueryParameters } from '../../helpers/query-parameters'; -import './GuildResults.css'; - -const PREFIX = 'GuildResults'; -const classes = { - searchInput: `${PREFIX}-searchInput` -}; - -const Root = styled('div')(() => ({ - [`& .${classes.searchInput}`]: { - width: '20em' - } -})); - -const propTypes = { - guilds: PropTypes.arrayOf( - PropTypes.shape({ - id: PropTypes.string, - name: PropTypes.string, - description: PropTypes.string - }) - ) -}; - -const displayName = 'GuildResults'; - -const GuildResults = () => { - const { dispatch, state } = useContext(AppContext); - const { csrf, guilds, userProfile } = state; - const [addOpen, setAddOpen] = useState(false); - const [openedGuildId, setOpenedGuildId] = useState(''); - const [searchText, setSearchText] = useState(''); - const [activeGuilds, setActiveGuilds] = useState(true); - - useQueryParameters([ - { - name: 'addOpen', - default: false, - value: addOpen, - setter: setAddOpen - }, - { - name: 'guild', - default: '', - value: openedGuildId, - setter: setOpenedGuildId - }, - { - name: 'search', - default: '', - value: searchText, - setter: setSearchText - } - ]); - - const handleOpen = () => setAddOpen(true); - - const handleClose = () => setAddOpen(false); - - const isAdmin = userProfile?.role?.includes('ADMIN'); - - return ( - -
    - { - setSearchText(e.target.value); - }} - /> -
    - {isAdmin && ( - <> - - { - if (csrf) { - guild.active = true; - const res = await createGuild(guild, csrf); - const data = - res.payload?.data && !res.error ? res.payload.data : null; - if (data) { - dispatch({ type: ADD_GUILD, payload: data }); - const resGuildLeader = await getGuildLeaders( - data.id, - csrf - ); - } - handleClose(); - } - }} - headerText="Add A New Guild" - /> - - )} - { - const { checked } = event.target; - setActiveGuilds(checked); - }} - /> - } - label="Active Guilds Only" - /> -
    -
    -
    - {guilds - ? guilds.map((guild, index) => - guild.name.toLowerCase().includes(searchText.toLowerCase()) && - ((activeGuilds && guild.active) || !activeGuilds) ? ( - - ) : null - ) - : Array.from({ length: 20 }).map((_, index) => ( - - ))} -
    -
    - ); -}; - -GuildResults.propTypes = propTypes; -GuildResults.displayName = displayName; - -export default GuildResults; diff --git a/web-ui-external-feedback/src/components/guild-results/GuildResults.test.jsx b/web-ui-external-feedback/src/components/guild-results/GuildResults.test.jsx deleted file mode 100644 index b31216a830..0000000000 --- a/web-ui-external-feedback/src/components/guild-results/GuildResults.test.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import GuildResults from './GuildResults'; -import { AppContextProvider } from '../../context/AppContext'; - -const initialState = { - state: { - userProfile: { - name: 'holmes', - memberProfile: { - pdlId: '', - title: 'Tester', - workEmail: 'test@tester.com' - }, - role: ['MEMBER', 'ADMIN'], - imageUrl: - 'https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg' - }, - guilds: [ - { - id: '3fa85f64-5717-4562-b3fc-2c963f66afa6', - name: 'string', - description: 'string' - }, - { - id: '3fa4-5717-4562-b3fc-2c963f66afa6', - name: 'stuff', - description: '' - } - ] - } -}; - -it('renders correctly', () => { - snapshot( - - - - ); -}); - -it('renders correctly when no guilds are loaded', () => { - initialState.state.guilds = []; - - snapshot( - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/guild-results/GuildSummaryCard.jsx b/web-ui-external-feedback/src/components/guild-results/GuildSummaryCard.jsx deleted file mode 100644 index 5b59c657c0..0000000000 --- a/web-ui-external-feedback/src/components/guild-results/GuildSummaryCard.jsx +++ /dev/null @@ -1,241 +0,0 @@ -import React, { useContext, useState, useCallback } from 'react'; -import { Link } from 'react-router-dom'; - -import { Construction, Groups } from '@mui/icons-material'; -import { styled } from '@mui/material/styles'; - -import { AppContext } from '../../context/AppContext'; -import { UPDATE_GUILDS, UPDATE_TOAST } from '../../context/actions'; -import EditGuildModal from './EditGuildModal'; - -import { - Button, - Card, - CardActions, - CardContent, - CardHeader, - Dialog, - DialogContentText, - DialogTitle, - DialogContent, - DialogActions, - Link as StyledLink, - Tooltip, - Typography, -} from '@mui/material'; -import PropTypes from 'prop-types'; -import { updateGuild } from '../../api/guild.js'; - -const PREFIX = 'GuildSummaryCard'; -const classes = { - card: `${PREFIX}-card`, - header: `${PREFIX}-header`, - title: `${PREFIX}-title` -}; -const StyledCard = styled(Card)(() => ({ - [`&.${classes.card}`]: { - display: 'flex', - flexDirection: 'column', - justifyContent: 'space-between', - position: 'relative', - width: '340px' - }, - [`& .${classes.header}`]: { - width: '100%' - }, - ['& [data-icon]']: { - position: 'absolute', - right: '1rem', - top: '1rem' - }, - [`& .${classes.title}`]: { - overflow: 'hidden', - textOverflow: 'ellipsis', - whiteSpace: 'nowrap' - } -})); - -const inactiveStyle = { - 'color': 'var(--action-disabled)', - 'font-size': '0.75em', -}; - -const propTypes = { - guild: PropTypes.shape({ - id: PropTypes.string, - name: PropTypes.string, - description: PropTypes.string - }) -}; - -const displayName = 'GuildSummaryCard'; - -const GuildSummaryCard = ({ guild, index, isOpen, onGuildSelect }) => { - const { state, dispatch } = useContext(AppContext); - const { guilds, userProfile, csrf } = state; - const [open, setOpen] = useState(isOpen); - const [tooltipIsOpen, setTooltipIsOpen] = useState(false); - const isAdmin = - userProfile && userProfile.role && userProfile.role.includes('ADMIN'); - - let leads = - guild.guildMembers == null - ? null - : guild.guildMembers.filter(guildMember => guildMember.lead); - let nonLeads = - guild.guildMembers == null - ? null - : guild.guildMembers.filter(guildMember => !guildMember.lead); - - const isGuildLead = - leads === null - ? false - : leads.some(lead => lead.memberId === userProfile.memberProfile.id); - - const handleOpen = () => { - setOpen(true); - onGuildSelect(guild.id); - }; - const handleClose = () => { - setOpen(false); - onGuildSelect(''); - }; - - const iconStyles = { - position: 'absolute', - bottom: '0.5rem', - right: '0.5rem', - height: '2.5rem', - width: '2.5rem' - }; - - const guildIcon = () => ( - - {guild.community ? ( - - ) : ( - - )} - - ); - - return ( - - setTooltipIsOpen(true)} - onClose={() => setTooltipIsOpen(false)} - enterTouchDelay={0} - placement="top-start" - title={guild.description} - > -
    {guild.description}
    - - } - /> - - {!guild.active && ( - - Inactive - - )} - {guild?.link ? ( - -
    - Link to Guild Homepage -
    -
    - ) : null} - {guild.guildMembers == null ? ( - - Guild Leads: None Assigned -
    - Guild Members: None Assigned -
    - ) : ( - - Guild Leads: - {leads.map((lead, index) => { - return ( - - {index !== leads.length - 1 ? `${lead?.name}, ` : lead?.name} - - ); - })} -
    - Guild Members: - {nonLeads.map((member, index) => { - return ( - - {index !== nonLeads.length - 1 - ? `${member?.name}, ` - : member?.name} - - ); - })} -
    - )} -
    - - {(isAdmin || isGuildLead) && ( - <> - - - )} - - {guildIcon()} - { - const res = await updateGuild(editedGuild, csrf); - const data = - res.payload?.data && !res.error ? res.payload.data : null; - if (data) { - const copy = [...guilds]; - copy[index] = data; - dispatch({ - type: UPDATE_GUILDS, - payload: copy - }); - } - }} - headerText="Edit Your Guild" - /> -
    - ); -}; - -GuildSummaryCard.displayName = displayName; -GuildSummaryCard.propTypes = propTypes; - -export default GuildSummaryCard; diff --git a/web-ui-external-feedback/src/components/guild-results/GuildSummaryCard.test.jsx b/web-ui-external-feedback/src/components/guild-results/GuildSummaryCard.test.jsx deleted file mode 100644 index 3d5f6a41e0..0000000000 --- a/web-ui-external-feedback/src/components/guild-results/GuildSummaryCard.test.jsx +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react'; -import GuildSummaryCard from './GuildSummaryCard'; -import { AppContextProvider } from '../../context/AppContext'; -import { BrowserRouter } from 'react-router-dom'; - -const guilds = [ - { - id: '3fa85f64-5717-4562-b3fc-2c963f66afa6', - name: 'string', - description: 'string' - }, - { - id: '3fa4-5717-4562-b3fc-2c963f66afa6', - name: 'stuff', - description: '', - guildMembers: [ - { - memberId: '3fa4-5717-4562-b3fc-2c963f66afa9', - name: 'testname', - lead: true - } - ], - active: true, - } -]; - -const initialState = { - state: { - userProfile: { - name: 'holmes', - memberProfile: { - id: '3fa4-5717-4562-b3fc-2c963f66afa9', - pdlId: '', - title: 'Tester', - workEmail: 'test@tester.com' - }, - role: ['MEMBER'], - imageUrl: - 'https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg' - }, - guilds - } -}; - -const adminState = { ...initialState }; -adminState.state = { ...adminState.state }; -adminState.state.userProfile = { ...adminState.state.userProfile }; -adminState.state.userProfile.role = ['MEMBER', 'ADMIN']; - -it('renders correctly', () => { - snapshot( - - - - - - ); -}); - -it('renders correctly for ADMIN', () => { - snapshot( - - - - - - ); -}); - -it('renders correctly for guild lead', () => { - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildResults.test.jsx.snap b/web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildResults.test.jsx.snap deleted file mode 100644 index 392942f8a4..0000000000 --- a/web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildResults.test.jsx.snap +++ /dev/null @@ -1,225 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    - -
    -
    -
    -`; - -exports[`renders correctly when no guilds are loaded 1`] = ` -
    -
    - -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildSummaryCard.test.jsx.snap b/web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildSummaryCard.test.jsx.snap deleted file mode 100644 index e2c7f138e8..0000000000 --- a/web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildSummaryCard.test.jsx.snap +++ /dev/null @@ -1,221 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    -
    -
    - - string - - -
    - string -
    -
    -
    -
    -
    -

    - Inactive -

    - - Guild Leads: - - None Assigned -
    - - Guild Members: - - None Assigned -
    -
    - -
    -
    -`; - -exports[`renders correctly for ADMIN 1`] = ` -
    -
    -
    -
    - - string - - -
    - string -
    -
    -
    -
    -
    -

    - Inactive -

    - - Guild Leads: - - None Assigned -
    - - Guild Members: - - None Assigned -
    -
    - -
    - -
    -
    -`; - -exports[`renders correctly for guild lead 1`] = ` -
    -
    -
    -
    - - stuff - - -
    - -
    -
    -
    - - Guild Leads: - - - testname - -
    - - Guild Members: - -
    -
    - -
    - -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildsActions.test.jsx.snap b/web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildsActions.test.jsx.snap deleted file mode 100644 index 6b4462f2f3..0000000000 --- a/web-ui-external-feedback/src/components/guild-results/__snapshots__/GuildsActions.test.jsx.snap +++ /dev/null @@ -1,9 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/header/Header.css b/web-ui-external-feedback/src/components/header/Header.css deleted file mode 100644 index db0172b501..0000000000 --- a/web-ui-external-feedback/src/components/header/Header.css +++ /dev/null @@ -1,26 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Shadows+Into+Light&display=swap'); - -.header h1 { - font-size: calc(1rem + 1vw); - font-weight: 500; - margin-top: 5px; - margin-bottom: 0px; - margin-left: 0.5rem; -} - -.header { - display: flex; - align-items: center; - justify-content: center; - flex-direction: row; - margin-top: 25px; - margin-bottom: 5px; - padding-left: 55px; - padding-right: 10px; -} - -.avatar { - cursor: pointer; - position: absolute; - right: 5px; -} diff --git a/web-ui-external-feedback/src/components/header/Header.jsx b/web-ui-external-feedback/src/components/header/Header.jsx deleted file mode 100644 index 9ef096ff17..0000000000 --- a/web-ui-external-feedback/src/components/header/Header.jsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -import './Header.css'; - -const Header = ({ title, children }) => { - return ( -
    - {children} -

    {title}

    -
    - ); -}; - -export default Header; diff --git a/web-ui-external-feedback/src/components/header/Header.stories.jsx b/web-ui-external-feedback/src/components/header/Header.stories.jsx deleted file mode 100644 index 373df9e7b7..0000000000 --- a/web-ui-external-feedback/src/components/header/Header.stories.jsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; - -import Header from './Header'; - -export default { - title: 'Check-Ins/Header', - component: Header -}; - -const Template = args =>
    ; - -export const Simple = Template.bind({}); -Simple.args = { - title: 'Test Title' -}; diff --git a/web-ui-external-feedback/src/components/header/Header.test.jsx b/web-ui-external-feedback/src/components/header/Header.test.jsx deleted file mode 100644 index afe3de22eb..0000000000 --- a/web-ui-external-feedback/src/components/header/Header.test.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; -import Header from './Header'; -import renderer from 'react-test-renderer'; - -it('renders title', () => { - snapshot(
    ); -}); diff --git a/web-ui-external-feedback/src/components/header/__snapshots__/Header.test.jsx.snap b/web-ui-external-feedback/src/components/header/__snapshots__/Header.test.jsx.snap deleted file mode 100644 index 199805f371..0000000000 --- a/web-ui-external-feedback/src/components/header/__snapshots__/Header.test.jsx.snap +++ /dev/null @@ -1,13 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders title 1`] = ` -
    -
    -

    - Ze title -

    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/kudos/PublicKudos.css b/web-ui-external-feedback/src/components/kudos/PublicKudos.css deleted file mode 100644 index 2959c0fda8..0000000000 --- a/web-ui-external-feedback/src/components/kudos/PublicKudos.css +++ /dev/null @@ -1,9 +0,0 @@ -.public-kudos .kudos-title { - display: flex; - justify-content: space-between; - align-items: center; - gap: 1rem; -} - - - diff --git a/web-ui-external-feedback/src/components/kudos/PublicKudos.jsx b/web-ui-external-feedback/src/components/kudos/PublicKudos.jsx deleted file mode 100644 index 066fba75dd..0000000000 --- a/web-ui-external-feedback/src/components/kudos/PublicKudos.jsx +++ /dev/null @@ -1,83 +0,0 @@ -import React, { useCallback, useContext, useEffect, useState } from 'react'; - -import { UPDATE_TOAST } from '../../context/actions'; -import { AppContext } from '../../context/AppContext'; -import { selectCsrfToken } from '../../context/selectors'; -import { sortKudos } from '../../context/util'; - -import { getRecentKudos } from '../../api/kudos'; - -import KudosCard from './PublicKudosCard'; -import KudosDialog from '../kudos_dialog/KudosDialog'; -import SkeletonLoader from '../skeleton_loader/SkeletonLoader'; - -import StarIcon from '@mui/icons-material/Star'; -import { Button, Grid, Typography } from '@mui/material'; - -import './PublicKudos.css'; - -const PublicKudos = () => { - const { state, dispatch } = useContext(AppContext); - const csrf = selectCsrfToken(state); - - const [kudos, setKudos] = useState(null); - const [kudosDialogOpen, setKudosDialogOpen] = useState(false); - const [kudosLoading, setKudosLoading] = useState(false); - - let lastMonth = new Date(); - lastMonth.setMonth(lastMonth.getMonth() - 1); - - const loadKudos = useCallback(async () => { - setKudosLoading(true); - const res = await getRecentKudos(csrf); - if (res.error) return; - - const kudos = res.payload.data; - setKudos(sortKudos(kudos)); - setKudosLoading(false); - }, [csrf, dispatch]); - - useEffect(() => { - loadKudos(); - }, [csrf, dispatch]); - - return ( -
    -
    -

    Kudos

    - -
    - setKudosDialogOpen(false)} - /> - - - {kudosLoading ? ( -
    - {Array.from({ length: 5 }).map((_, index) => ( - - ))} -
    - ) : !kudosLoading && kudos?.length > 0 ? ( -
    - {kudos.map(k => ())} -
    - ) : ( - - There are currently no kudos - - )} -
    -
    -
    - ); -}; - -export default PublicKudos; diff --git a/web-ui-external-feedback/src/components/kudos/PublicKudosCard.css b/web-ui-external-feedback/src/components/kudos/PublicKudosCard.css deleted file mode 100644 index 2851ea69b5..0000000000 --- a/web-ui-external-feedback/src/components/kudos/PublicKudosCard.css +++ /dev/null @@ -1,3 +0,0 @@ -.kudos-card { - min-width: 450px; -} \ No newline at end of file diff --git a/web-ui-external-feedback/src/components/kudos/PublicKudosCard.jsx b/web-ui-external-feedback/src/components/kudos/PublicKudosCard.jsx deleted file mode 100644 index dc554602d8..0000000000 --- a/web-ui-external-feedback/src/components/kudos/PublicKudosCard.jsx +++ /dev/null @@ -1,122 +0,0 @@ -import React, { useCallback, useContext, useState } from "react"; -import PropTypes from "prop-types"; -import { - Card, - CardHeader, - CardContent, - Divider, - Typography, - Avatar, - Chip, - Button, - AvatarGroup, - Tooltip, - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - DialogActions, - TextField, -} from "@mui/material"; -import { selectCsrfToken, selectProfile } from "../../context/selectors"; -import { AppContext } from "../../context/AppContext"; -import { getAvatarURL } from "../../api/api"; -import DateFnsUtils from "@date-io/date-fns"; -import CheckIcon from "@mui/icons-material/Check"; -import CloseIcon from "@mui/icons-material/Close"; -import TeamIcon from "@mui/icons-material/Groups"; - -import { approveKudos, deleteKudos } from "../../api/kudos"; -import { UPDATE_TOAST } from "../../context/actions"; - -import "./PublicKudosCard.css"; - -const dateUtils = new DateFnsUtils(); - -const propTypes = { - kudos: PropTypes.shape({ - id: PropTypes.string.isRequired, - message: PropTypes.string.isRequired, - senderId: PropTypes.string.isRequired, - recipientTeam: PropTypes.object, - dateCreated: PropTypes.array.isRequired, - dateApproved: PropTypes.array, - recipientMembers: PropTypes.array, - }).isRequired, -}; - -const KudosCard = ({ kudos }) => { - const { state, dispatch } = useContext(AppContext); - const csrf = selectCsrfToken(state); - - const sender = selectProfile(state, kudos.senderId); - - const getRecipientComponent = useCallback(() => { - if (kudos.recipientTeam) { - return ( - - - - - - ); - } - - return ( - - {kudos.recipientMembers.map((member) => ( - - - - ))} - - ); - }, [kudos]); - - let titleText = kudos?.recipientTeam?.name ? "Kudos, " + kudos?.recipientTeam?.name + "!" : "Kudos!"; - if(kudos?.recipientMembers?.length === 1 && kudos?.recipientMembers[0]?.firstName) titleText = "Kudos, " + kudos?.recipientMembers[0]?.firstName + "!"; - - return ( - - from } - label={sender?.name} - />)} - subheaderTypographyProps={{variant:"subtitle1"}} - /> - - {kudos.message} - {kudos.recipientTeam && ( - - {kudos.recipientMembers.map((member) => ( - - - - ))} - - )} - - - ); -}; - -KudosCard.propTypes = propTypes; - -export default KudosCard; diff --git a/web-ui-external-feedback/src/components/kudos_card/KudosCard.css b/web-ui-external-feedback/src/components/kudos_card/KudosCard.css deleted file mode 100644 index 584cef55e3..0000000000 --- a/web-ui-external-feedback/src/components/kudos_card/KudosCard.css +++ /dev/null @@ -1,66 +0,0 @@ -.kudos-card .kudos-card-header { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding: 1rem; - cursor: pointer; -} - -.kudos-card .kudos-card-header .members-container { - display: flex; - flex-direction: row; - align-items: center; - gap: 0.5rem; -} - -.kudos-card .kudos-card-header .kudos-status-container .kudos-action-buttons { - display: flex; - flex-direction: row; - gap: 1rem; -} - -.kudos-card .kudos-card-content { - max-width: 650px; - padding: 1rem; -} - -.kudos-card .kudos-card-content .kudos-recipient-list { - display: flex; - flex-direction: row; - align-items: center; - gap: 0.5rem; - margin-top: 1rem; -} - -.kudos-card .MuiChip-label { - font-weight: bold; -} - -@media (max-width: 800px) { - .kudos-card .kudos-card-header { - display: block; - } - - .kudos-list .kudos-card .kudos-recipient-list { - display: block; - } -} - -@media (max-width: 425px) { - .kudos-card .kudos-card-header { - display: flex; - } - .kudos-list .kudos-card .members-container { - display: block; - flex-direction: column; - } - - .kudos-status-container { - text-align: center; - } - - .kudos-list .kudos-card .kudos-recipient-list { - display: block; - } -} diff --git a/web-ui-external-feedback/src/components/kudos_card/KudosCard.jsx b/web-ui-external-feedback/src/components/kudos_card/KudosCard.jsx deleted file mode 100644 index 168413127b..0000000000 --- a/web-ui-external-feedback/src/components/kudos_card/KudosCard.jsx +++ /dev/null @@ -1,278 +0,0 @@ -import React, { useCallback, useContext, useState } from "react"; -import PropTypes from "prop-types"; -import { - Paper, - Collapse, - Divider, - Typography, - Avatar, - Chip, - Button, - AvatarGroup, - Tooltip, - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - DialogActions, - TextField, -} from "@mui/material"; -import { selectCsrfToken, selectProfile } from "../../context/selectors"; -import { AppContext } from "../../context/AppContext"; -import { getAvatarURL } from "../../api/api"; -import DateFnsUtils from "@date-io/date-fns"; -import CheckIcon from "@mui/icons-material/Check"; -import CloseIcon from "@mui/icons-material/Close"; -import TeamIcon from "@mui/icons-material/Groups"; - -import "./KudosCard.css"; -import { approveKudos, deleteKudos } from "../../api/kudos"; -import { UPDATE_TOAST } from "../../context/actions"; - -const dateUtils = new DateFnsUtils(); - -const propTypes = { - kudos: PropTypes.shape({ - id: PropTypes.string.isRequired, - message: PropTypes.string.isRequired, - senderId: PropTypes.string.isRequired, - recipientTeam: PropTypes.object, - dateCreated: PropTypes.array.isRequired, - dateApproved: PropTypes.array, - recipientMembers: PropTypes.array, - }).isRequired, - includeActions: PropTypes.bool, - onKudosAction: PropTypes.func, -}; - -const KudosCard = ({ kudos, includeActions, onKudosAction }) => { - const { state, dispatch } = useContext(AppContext); - const csrf = selectCsrfToken(state); - - const [expanded, setExpanded] = useState(true); - const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); - // const [deleteReason, setDeleteReason] = useState(""); // TODO: setup optional reason for deleting a kudos - - const sender = selectProfile(state, kudos.senderId); - - const getRecipientComponent = useCallback(() => { - if (kudos.recipientTeam) { - return ( - - - - } - label={kudos.recipientTeam.name} - /> - ); - } else if (kudos.recipientMembers.length === 1) { - const [recipient] = kudos.recipientMembers; - return ( - } - label={`${recipient.firstName} ${recipient.lastName}`} - /> - ); - } - - return ( - - {kudos.recipientMembers.map((member) => ( - - - - ))} - - ); - }, [kudos]); - - const approveKudosCallback = useCallback( - async (event) => { - event.stopPropagation(); - const res = await approveKudos(kudos, csrf); - if (res?.payload?.data && !res.error) { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: "success", - toast: "Kudos approved", - }, - }); - onKudosAction(); - } else { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: "error", - toast: "Failed to approve kudos", - }, - }); - } - }, - [kudos, csrf, dispatch, onKudosAction] - ); - - const deleteKudosCallback = useCallback(async () => { - setDeleteDialogOpen(false); - const res = await deleteKudos(kudos.id, csrf); - if (res?.payload?.status === 204 && !res.error) { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: "success", - toast: "Pending kudos deleted", - }, - }); - onKudosAction(); - } else { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: "error", - toast: "Failed to delete kudos", - }, - }); - } - }, [kudos, csrf, dispatch, onKudosAction]); - - const getStatusComponent = useCallback(() => { - const dateApproved = kudos.dateApproved - ? new Date(kudos.dateApproved.join("/")) - : null; - const dateCreated = new Date(kudos.dateCreated.join("/")); - - if (includeActions) { - return ( -
    - - - - - - -
    - ); - } else if (dateApproved) { - return ( - <> - - Received{" "} - {dateApproved ? dateUtils.format(dateApproved, "MM/dd/yyyy") : ""} - - - ); - } - - return ( - <> - - Pending - - - Created {dateUtils.format(dateCreated, "MM/dd/yyyy")} - - - ); - }, [kudos, includeActions, approveKudosCallback]); - - const dateApproved = kudos.dateApproved - ? new Date(kudos.dateApproved.join("/")) - : null; - - return ( - <> - - Delete Kudos - - - Are you sure you want to deny approval for these kudos? The kudos - will be deleted. - - - - - - - - - -
    setExpanded(!expanded)} - > -
    - {getRecipientComponent()} - received kudos from - } - label={sender?.name} - /> -
    -
    {getStatusComponent()}
    -
    - - -
    - {kudos.message} - {kudos.recipientMembers?.length > 1 && ( -
    - - {kudos.recipientTeam ? "Team Members:" : "Members:"} - - {kudos.recipientMembers.map((recipient) => ( - } - label={`${recipient.firstName} ${recipient.lastName}`} - /> - ))} -
    - )} -
    -
    -
    - - ); -}; - -KudosCard.propTypes = propTypes; - -export default KudosCard; diff --git a/web-ui-external-feedback/src/components/kudos_dialog/KudosDialog.css b/web-ui-external-feedback/src/components/kudos_dialog/KudosDialog.css deleted file mode 100644 index c06923cc21..0000000000 --- a/web-ui-external-feedback/src/components/kudos_dialog/KudosDialog.css +++ /dev/null @@ -1,10 +0,0 @@ -.kudos-dialog .kudos-dialog-content { - margin: 8rem 6rem 1rem 6rem; - height: 100%; -} - -.kudos-dialog .kudos-dialog-content .kudos-recipient-container { - display: flex; - flex-direction: row; - gap: 1rem; -} \ No newline at end of file diff --git a/web-ui-external-feedback/src/components/kudos_dialog/KudosDialog.jsx b/web-ui-external-feedback/src/components/kudos_dialog/KudosDialog.jsx deleted file mode 100644 index 92cc98a41a..0000000000 --- a/web-ui-external-feedback/src/components/kudos_dialog/KudosDialog.jsx +++ /dev/null @@ -1,343 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { useCallback, useContext, useState } from 'react'; -import { Link } from 'react-router-dom'; -import CloseIcon from '@mui/icons-material/Close'; -import { - Alert, - AppBar, - Autocomplete, - Avatar, - Button, - Checkbox, - Chip, - Dialog, - FormControlLabel, - FormGroup, - IconButton, - MenuItem, - Slide, - TextField, - Toolbar, - Tooltip, - Typography -} from '@mui/material'; - -import { getAvatarURL } from '../../api/api'; -import { createKudos } from '../../api/kudos'; -import { UPDATE_TOAST } from '../../context/actions'; -import { AppContext } from '../../context/AppContext'; -import { - selectCsrfToken, - selectCurrentUser, - selectActiveTeams, - selectOrderedCurrentMemberProfiles, - selectProfile -} from '../../context/selectors'; -import './KudosDialog.css'; - -const Transition = React.forwardRef((props, ref) => { - return ; -}); - -const propTypes = { - open: PropTypes.bool.isRequired, - recipient: PropTypes.shape({ - id: PropTypes.string.isRequired, - name: PropTypes.string.isRequired - }), - teamId: PropTypes.string, - onClose: PropTypes.func -}; - -const KudosDialog = ({ open, recipient, teamId, onClose }) => { - const { state, dispatch } = useContext(AppContext); - const csrf = selectCsrfToken(state); - - const [recipientType, setRecipientType] = useState( - teamId ? 'TEAM' : 'MEMBERS' - ); - const [message, setMessage] = useState(''); - const [created, setCreated] = useState(false); - const [publicKudos, setPublicKudos] = useState(true); - const [selectedTeam, setSelectedTeam] = useState(null); - const [selectedMembers, setSelectedMembers] = useState( - recipient ? [recipient] : [] - ); - - const currentUser = selectCurrentUser(state); - const teams = selectActiveTeams(state); - const memberProfiles = selectOrderedCurrentMemberProfiles(state); - - const handleSubmit = useCallback(() => { - const saveKudos = async kudos => { - const res = await createKudos(kudos, csrf); - const data = res?.payload?.data; - if (!data || res.error) { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'Failed to give kudos' - } - }); - } - - return data; - }; - - if (message.trim().length > 0 && csrf) { - let recipients; - if (recipientType === 'TEAM') { - recipients = selectedTeam.teamMembers.map(teamMember => { - return selectProfile(state, teamMember.memberId); - }); - } else { - recipients = selectedMembers; - } - if (recipients && recipients.length > 0) { - const kudos = { - message: message, - senderId: currentUser.id, - teamId: recipientType === 'TEAM' ? selectedTeam.id : null, - recipientMembers: recipients, - publiclyVisible: publicKudos - }; - - saveKudos(kudos).then(res => { - if (res) { - setCreated(true); - } - }); - } else { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'You must select a recipient' - } - }); - } - } - }, [ - state, - csrf, - dispatch, - message, - currentUser, - recipientType, - selectedMembers, - selectedTeam - ]); - - const handleMessageChange = useCallback(event => { - setMessage(event.target.value); - }, []); - - const getTeamMembers = useCallback(() => { - return selectedTeam.teamMembers - ?.sort((a, b) => { - // Leads come first, then sort by name - if ((a.lead && b.lead) || (!a.lead && !b.lead)) { - return a.name.localeCompare(b.name); - } - return a.lead ? -1 : 1; - }) - .map(teamMember => { - const profile = selectProfile(state, teamMember?.memberId); - const chip = ( - } - style={{ border: teamMember?.lead ? '1px solid gray' : 'none' }} - /> - ); - return teamMember?.lead ? ( - - {chip} - - ) : ( - chip - ); - }); - }, [selectedTeam, state]); - - const handleClose = useCallback(() => { - if (created) { - onClose(); - setCreated(false); - setMessage(''); - } else { - onClose(); - } - }, [onClose, created]); - - return ( - - - - - - - - Give Kudos - - - -
    - {created ? ( -
    - 🎉 - - Thank you for sending kudos! - -
    - - - - -
    -
    - ) : ( -
    -
    - {recipientType === 'TEAM' && ( - - option.name || 'Team name not found' - } - value={selectedTeam} - onChange={(event, newValue) => setSelectedTeam(newValue)} - fullWidth - renderInput={params => ( - - )} - /> - )} - {recipientType === 'MEMBERS' && ( - member?.name} - value={selectedMembers} - onChange={(event, members) => { - setSelectedMembers(members); - }} - fullWidth - renderInput={params => ( - member.name} - /> - )} - /> - )} - - } - label="Public" - onChange={e => { - setPublicKudos(e.target.checked); - }} - /> - - { - setSelectedTeam(null); - setSelectedMembers([]); - setRecipientType(event.target.value); - }} - > - Team - Members - -
    - {selectedTeam && ( -
    - {getTeamMembers()} -
    - )} - - - Kudos will be visible to admins for approval, then sent to the - recipient. - - -
    - )} -
    -
    - ); -}; - -KudosDialog.propTypes = propTypes; - -export default KudosDialog; diff --git a/web-ui-external-feedback/src/components/member-directory/AdminMemberCard.jsx b/web-ui-external-feedback/src/components/member-directory/AdminMemberCard.jsx deleted file mode 100644 index d767c27fa4..0000000000 --- a/web-ui-external-feedback/src/components/member-directory/AdminMemberCard.jsx +++ /dev/null @@ -1,279 +0,0 @@ -import React, { useContext, useState } from 'react'; -import { styled } from '@mui/material/styles'; -import { Link } from 'react-router-dom'; - -import MemberModal from './MemberModal'; -import { AppContext } from '../../context/AppContext'; -import { DELETE_MEMBER_PROFILE, UPDATE_MEMBER_PROFILES, UPDATE_TOAST } from '../../context/actions'; -import { - selectProfileMap, - selectHasCreateMembersPermission, - selectHasDeleteMembersPermission, - selectHasImpersonateMembersPermission, -} from '../../context/selectors'; -import { getAvatarURL, resolve } from '../../api/api.js'; - -import Avatar from '@mui/material/Avatar'; -import PriorityHighIcon from '@mui/icons-material/PriorityHigh'; - -import SplitButton from '../split-button/SplitButton'; - -import { updateMember, deleteMember } from '../../api/member.js'; - -import { - Box, - Button, - Card, - CardActions, - CardContent, - CardHeader, - Container, - Dialog, - DialogActions, - DialogContent, - DialogContentText, - DialogTitle, - Tooltip, - Typography -} from '@mui/material'; - -import './MemberSummaryCard.css'; - -const PREFIX = 'AdminMemberCard'; -const classes = { - header: `${PREFIX}-header` -}; - -const StyledBox = styled(Box)(() => ({ - [`& .${classes.header}`]: { - cursor: 'pointer' - } -})); - -const AdminMemberCard = ({ member, index }) => { - const { state, dispatch } = useContext(AppContext); - const { memberProfiles, userProfile, csrf } = state; - const { - location, - name, - workEmail, - title, - supervisorid, - pdlId, - terminationDate - } = member; - const memberId = member?.id; - const supervisorProfile = selectProfileMap(state)[supervisorid]; - const pdlProfile = selectProfileMap(state)[pdlId]; - const [tooltipIsOpen, setTooltipIsOpen] = useState(false); - - const [open, setOpen] = useState(false); - const handleOpen = () => setOpen(true); - - const [openDelete, setOpenDelete] = useState(false); - const handleOpenDeleteConfirmation = () => setOpenDelete(true); - - const handleClose = () => setOpen(false); - const handleCloseDeleteConfirmation = () => setOpenDelete(false); - - const options = () => { - let entries = []; - if (selectHasCreateMembersPermission(state)) { - entries.push('Edit'); - } - if (selectHasDeleteMembersPermission(state)) { - entries.push('Delete'); - } - if (selectHasImpersonateMembersPermission(state)) { - // If we have not already impersonated a user, we can provide that option. - if (document.cookie.indexOf("OJWT=") == -1) { - entries.push('Impersonate'); - } - } - return entries; - } - - const handleAction = (e, index) => { - if (index === 0) { - handleOpen(); - } else if (index === 1) { - handleOpenDeleteConfirmation(); - } else if (index === 2) { - handleImpersonate(); - } - }; - - const handleImpersonate = async () => { - // "log in" as the chosen user with the default role. - const res = await resolve({ - method: 'POST', - url: '/impersonation/begin', - headers: { - 'X-CSRF-Header': csrf, - Accept: 'application/json', - 'Content-Type': 'application/json;charset=UTF-8' - }, - data: { email: workEmail } - }); - - // If that was successful, take the user back to the main page. - if (!res.error) window.location.href = "/"; - } - - const handleDeleteMember = async () => { - let res = await deleteMember(memberId, csrf); - if (res && res.payload && res.payload.status === 200) { - dispatch({ type: DELETE_MEMBER_PROFILE, payload: memberId }); - window.snackDispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'success', - toast: 'Member deleted' - } - }); - } - handleCloseDeleteConfirmation(); - }; - - return ( - - - - - {name} - - } - subheader={ - - {title} - - } - disableTypography - avatar={ - !terminationDate ? ( - - ) : ( - - setTooltipIsOpen(true)} - onClose={() => setTooltipIsOpen(false)} - enterTouchDelay={0} - placement="top-start" - title={'This member has been terminated'} - > - - - - ) - } - /> - - - - - - {workEmail} - -
    - Location: {location} -
    - Supervisor:{' '} - {supervisorid && ( - - {supervisorProfile?.name} - - )} -
    - PDL:{' '} - {pdlId && ( - - {pdlProfile?.name} - - )} -
    -
    -
    -
    - {(selectHasCreateMembersPermission(state) || - selectHasDeleteMembersPermission(state) || - selectHasImpersonateMembersPermission(state)) && ( - - - - Delete member? - - - Are you sure you want to delete the member's data? - - - - - - - - { - const res = await updateMember(member, csrf); - const data = - res.payload?.data && !res.error ? res.payload.data : null; - if (data) { - const copy = [...memberProfiles]; - const index = copy.findIndex( - profile => profile.id === data.id - ); - copy[index] = data; - dispatch({ - type: UPDATE_MEMBER_PROFILES, - payload: copy - }); - handleClose(); - } - }} - /> - - )} -
    -
    - ); -}; - -export default AdminMemberCard; diff --git a/web-ui-external-feedback/src/components/member-directory/MemberModal.css b/web-ui-external-feedback/src/components/member-directory/MemberModal.css deleted file mode 100644 index 60e3c4ffdb..0000000000 --- a/web-ui-external-feedback/src/components/member-directory/MemberModal.css +++ /dev/null @@ -1,41 +0,0 @@ -.member-modal { - background: var(--checkins-palette-background-paper); - border: 2px solid var(--muted); - height: 75%; - left: 50%; - max-width: 600px; - min-width: 400px; - overflow-y: auto; - position: absolute; - padding: 0.5rem; - top: 50%; - transform: translate(-50%, -50%); -} - -.member-modal h2 { - margin-block-end: 0rem; - margin-left: 0.5rem; -} - -.member-modal-actions { - margin-top: 1rem; - width: calc(100% - 1rem); - display: flex; - flex-direction: row; - justify-content: flex-end; -} - -.member-modal { - .MuiTextField-root.fullWidth { - width: calc(100% - 1rem); - } - - .MuiTextField-root.halfWidth { - width: calc(50% - 0.5rem); - } - - .MuiTextField-root { - margin: 0.5rem; - width: 25ch; - } -} diff --git a/web-ui-external-feedback/src/components/member-directory/MemberModal.jsx b/web-ui-external-feedback/src/components/member-directory/MemberModal.jsx deleted file mode 100644 index ef737139da..0000000000 --- a/web-ui-external-feedback/src/components/member-directory/MemberModal.jsx +++ /dev/null @@ -1,345 +0,0 @@ -import React, { useCallback, useContext, useState } from 'react'; -import { AppContext } from '../../context/AppContext'; -import { - selectOrderedPdls, - selectOrderedMemberFirstName, - selectCurrentMembers -} from '../../context/selectors'; - -import { Button, Modal, TextField } from '@mui/material'; -import Autocomplete from '@mui/material/Autocomplete'; -import { DatePicker } from '@mui/x-date-pickers'; -import { format } from 'date-fns'; -import { UPDATE_TOAST } from '../../context/actions'; - -import './MemberModal.css'; - -const emptyMember = { - employeeId: '', - firstName: '', - middleName: '', - lastName: '', - suffix: '', - workEmail: '', - title: '', - location: '', - birthDay: null, - pdlId: '', - supervisorid: '', - startDate: new Date(), - terminationDate: null -}; - -const MemberModal = ({ member, open, onSave, onClose }) => { - const { state, dispatch } = useContext(AppContext); - const memberProfiles = selectCurrentMembers(state); - const [editedMember, setMember] = useState(member); - const sortedPdls = selectOrderedPdls(state); - const [isNewMember, setIsNewMember] = useState( - Object.keys(member).length === 0 ? true : false - ); - const sortedMembers = selectOrderedMemberFirstName(state); - const onSupervisorChange = (event, newValue) => { - setMember({ - ...editedMember, - supervisorid: newValue ? newValue.id : '' - }); - }; - - const birthDay = editedMember?.birthDay || null; - - const terminationDate = editedMember?.terminationDate || null; - - const startDate = editedMember?.startDate - ? editedMember?.startDate - : setMember({ ...editedMember, startDate: new Date() }); - - const onPdlChange = (event, newValue) => { - setMember({ - ...editedMember, - pdlId: newValue ? newValue.id : '' - }); - }; - - const validateInputs = useCallback(() => { - let regEmail = - /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; // eslint-disable-line - if (!regEmail.test(editedMember.workEmail)) { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'Please enter a valid email' - } - }); - return false; - } - let todayYear = new Date().getFullYear(); - if ( - todayYear - editedMember.birthDay?.getFullYear() < 14 || - todayYear - editedMember.birthDay?.getFullYear() > 125 - ) { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'Please enter a valid birthday' - } - }); - return false; - } - if ( - todayYear - editedMember.startDate?.getFullYear() > 80 || - editedMember.startDate?.getFullYear() - todayYear > 1 - ) { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'Please enter a valid start date' - } - }); - return false; - } - if ( - editedMember.startDate?.getTime() > - editedMember.terminationDate?.getTime() - ) { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'Please enter a termination date that is after the start date' - } - }); - return false; - } - return true; - }, [editedMember, dispatch]); - - const validateRequiredInputsPresent = useCallback(() => { - return ( - editedMember.firstName?.length > 0 && - editedMember.lastName?.length > 0 && - editedMember.workEmail?.length > 0 && - editedMember.title?.length > 0 && - editedMember.location?.length > 0 && - editedMember.employeeId?.length > 0 && - startDate - ); - }, [editedMember, startDate]); - - const submitMemberClick = useCallback(async () => { - let required = validateRequiredInputsPresent(); - - let inputsFeasible = validateInputs(); - if (!required) { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: - 'One or more required fields are empty. Check starred input fields' - } - }); - } else if (required && inputsFeasible) { - onSave(editedMember).then(() => { - if (isNewMember.current) { - setMember({ emptyMember }); - setIsNewMember(true); - } - }); - } - }, [ - validateRequiredInputsPresent, - onSave, - dispatch, - validateInputs, - editedMember, - isNewMember - ]); - - return ( - -
    - - setMember({ ...editedMember, firstName: e.target.value }) - } - /> - - setMember({ ...editedMember, middleName: e.target.value }) - } - /> - - setMember({ ...editedMember, lastName: e.target.value }) - } - /> - setMember({ ...editedMember, suffix: e.target.value })} - /> - - setMember({ ...editedMember, workEmail: e.target.value }) - } - /> - setMember({ ...editedMember, title: e.target.value })} - /> - - setMember({ ...editedMember, location: e.target.value }) - } - /> - { - setMember({ ...editedMember, birthDay: date }); - }} - KeyboardButtonProps={{ - 'aria-label': 'Change Date' - }} - /> - - setMember({ ...editedMember, employeeId: e.target.value }) - } - /> - pdl?.id === editedMember.pdlId)) || - '' - } - onChange={onPdlChange} - getOptionLabel={option => option.name || ''} - renderInput={params => ( - - )} - /> - memberProfile.id === editedMember.supervisorid - )) || - '' - } - onChange={onSupervisorChange} - getOptionLabel={option => option.name || ''} - renderInput={params => ( - - )} - /> - { - setMember({ ...editedMember, startDate: e }); - }} - KeyboardButtonProps={{ - 'aria-label': 'Change Date' - }} - /> - { - setMember({ ...editedMember, terminationDate: date }); - }} - KeyboardButtonProps={{ - 'aria-label': 'Change Date' - }} - /> -
    - - -
    -
    -
    - ); -}; - -export default MemberModal; diff --git a/web-ui-external-feedback/src/components/member-directory/MemberModal.test.jsx b/web-ui-external-feedback/src/components/member-directory/MemberModal.test.jsx deleted file mode 100644 index 6006d30f21..0000000000 --- a/web-ui-external-feedback/src/components/member-directory/MemberModal.test.jsx +++ /dev/null @@ -1,68 +0,0 @@ -import React from 'react'; -import MemberSummaryCard from './MemberSummaryCard'; -import { AppContextProvider } from '../../context/AppContext'; -import { BrowserRouter } from 'react-router-dom'; - -const initialState = { - state: { - userProfile: { - memberProfile: { - id: '912834091823', - name: 'Current', - pdlId: '0987654321', - supervisorId: '9876543210' - }, - role: ['MEMBER'] - }, - memberProfiles: [ - { - id: '0987654321', - name: 'TestName', - lastName: 'Name' - }, - { - id: '9876543210', - name: 'TestName2', - lastName: 'Name2' - } - ] - } -}; - -const onSave = member => { - console.log(member); -}; - -const open = () => { - console.log('Open'); -}; - -const close = () => { - console.log('Closed'); -}; - -const member = { - firstName: 'tester', - lastName: 'teserson', - id: '2o34i2j34', - startDate: [2018, 1, 10], - location: 'STL', - imageURL: 'url.com', - title: 'engineer', - workEmail: 'testerson@oci.com' -}; - -it('renders correctly', () => { - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.css b/web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.css deleted file mode 100644 index d3b25b7447..0000000000 --- a/web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.css +++ /dev/null @@ -1,46 +0,0 @@ -.member-card { - max-height: 20rem; - width: 340px; - display: flex; - flex-direction: column; - justify-content: space-between; -} - -.member-card .member-summary-avatar { - height: 5rem; - width: 5rem; - margin-right: 1.25rem; -} - -.member-summary-parent { - display: flex; - align-items: center; -} - -.member-card .large { - width: theme-spacing(10); - height: theme-spacing(10); -} - -.member-card .info-container { - padding: 0; - margin-top: -16px; -} - -.member-card .split-button { - padding: 1rem; -} - -.member-card .MuiCardHeader-content h2 { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - width: 225px; -} - -.member-card .MuiCardHeader-content h3 { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - width: 225px; -} diff --git a/web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.jsx b/web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.jsx deleted file mode 100644 index f8ee684c2a..0000000000 --- a/web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.jsx +++ /dev/null @@ -1,141 +0,0 @@ -import React, { useContext, useState } from 'react'; -import { styled } from '@mui/material/styles'; -import { Link } from 'react-router-dom'; - -import { AppContext } from '../../context/AppContext'; -import { selectIsAdmin, selectProfileMap } from '../../context/selectors'; -import { getAvatarURL } from '../../api/api.js'; - -import Avatar from '@mui/material/Avatar'; -import PriorityHighIcon from '@mui/icons-material/PriorityHigh'; - -import { - Box, - Card, - CardContent, - CardHeader, - Container, - Tooltip, - Typography -} from '@mui/material'; - -import './MemberSummaryCard.css'; - -const PREFIX = 'MemberSummaryCard'; -const classes = { - header: `${PREFIX}-header` -}; - -const StyledBox = styled(Box)(() => ({ - [`& .${classes.header}`]: { - cursor: 'pointer' - } -})); - -const MemberSummaryCard = ({ member }) => { - const { state } = useContext(AppContext); - const isAdmin = selectIsAdmin(state); - const { - location, - name, - workEmail, - title, - supervisorid, - pdlId, - terminationDate - } = member; - const supervisorProfile = selectProfileMap(state)[supervisorid]; - const pdlProfile = selectProfileMap(state)[pdlId]; - const [tooltipIsOpen, setTooltipIsOpen] = useState(false); - - return ( - - - - - {name} - - } - subheader={ - - {title} - - } - disableTypography - avatar={ - isAdmin && terminationDate ? ( - - setTooltipIsOpen(true)} - onClose={() => setTooltipIsOpen(false)} - enterTouchDelay={0} - placement="top-start" - title={'This member has been terminated'} - > - - - - ) : ( - - ) - } - /> - - - - - - {workEmail} - -
    - Location: {location} -
    - Supervisor:{' '} - {supervisorid && ( - - {supervisorProfile?.name} - - )} -
    - PDL:{' '} - {pdlId && ( - - {pdlProfile?.name} - - )} -
    -
    -
    -
    -
    -
    - ); -}; - -export default MemberSummaryCard; diff --git a/web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.test.jsx b/web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.test.jsx deleted file mode 100644 index 93a73623cf..0000000000 --- a/web-ui-external-feedback/src/components/member-directory/MemberSummaryCard.test.jsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; -import MemberSummaryCard from './MemberSummaryCard'; -import { AppContextProvider } from '../../context/AppContext'; -import { BrowserRouter } from 'react-router-dom'; - -const initialState = { - state: { - userProfile: { - memberProfile: { - id: '912834091823', - name: 'Current', - pdlId: '0987654321', - supervisorId: '9876543210' - }, - role: ['MEMBER'] - }, - memberProfiles: [ - { - id: '0987654321', - name: 'TestName', - lastName: 'Name' - }, - { - id: '9876543210', - name: 'TestName2', - lastName: 'Name2' - } - ] - } -}; - -const member = { - name: 'testerson', - id: '2o34i2j34', - startDate: [2018, 1, 10], - location: 'STL', - imageURL: 'url.com', - title: 'engineer', - workEmail: 'testerson@oci.com' -}; - -it('renders correctly', () => { - snapshot( - - - - - - ); -}); diff --git a/web-ui-external-feedback/src/components/member-directory/__snapshots__/MemberModal.test.jsx.snap b/web-ui-external-feedback/src/components/member-directory/__snapshots__/MemberModal.test.jsx.snap deleted file mode 100644 index c49f45033c..0000000000 --- a/web-ui-external-feedback/src/components/member-directory/__snapshots__/MemberModal.test.jsx.snap +++ /dev/null @@ -1,76 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -

    -

    - engineer -

    -
    -
    -
    -
    -
    -

    - - testerson@oci.com - -
    - Location: - STL -
    - Supervisor: - -
    - PDL: - -
    -

    -
    -
    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/member-directory/__snapshots__/MemberSummaryCard.test.jsx.snap b/web-ui-external-feedback/src/components/member-directory/__snapshots__/MemberSummaryCard.test.jsx.snap deleted file mode 100644 index 9a739269a7..0000000000 --- a/web-ui-external-feedback/src/components/member-directory/__snapshots__/MemberSummaryCard.test.jsx.snap +++ /dev/null @@ -1,78 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`renders correctly 1`] = ` -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -

    - testerson -

    -

    - engineer -

    -
    -
    -
    -
    -
    -

    - - testerson@oci.com - -
    - Location: - STL -
    - Supervisor: - -
    - PDL: - -
    -

    -
    -
    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/member_selector/MemberSelector.css b/web-ui-external-feedback/src/components/member_selector/MemberSelector.css deleted file mode 100644 index 01e439e4cc..0000000000 --- a/web-ui-external-feedback/src/components/member_selector/MemberSelector.css +++ /dev/null @@ -1,33 +0,0 @@ -/* Workaround for bleeding style applied to MuiCardHeader-action */ -.member-selector-card .MuiCardHeader-action { - padding: 0; -} - -.member-selector-card .MuiCardHeader-avatar { - margin-right: 8px; -} - -.member-selector-card .member-selector-card-title-container { - display: flex; - flex-direction: row; - align-items: center; - gap: 0.5rem; -} - -.member-selector-card .member-selector-card-title { - font-size: 1rem; -} - -.member-selector-card .member-selector-card-count { - font-size: 1rem; -} - -@media screen and (max-width: 600px) { - .member-selector-card .member-selector-card-title { - font-size: 0.75rem; - } - - .member-selector-card .member-selector-card-count { - font-size: 0.75rem; - } -} diff --git a/web-ui-external-feedback/src/components/member_selector/MemberSelector.jsx b/web-ui-external-feedback/src/components/member_selector/MemberSelector.jsx deleted file mode 100644 index 508282b11a..0000000000 --- a/web-ui-external-feedback/src/components/member_selector/MemberSelector.jsx +++ /dev/null @@ -1,193 +0,0 @@ -import React, { useCallback, useContext, useEffect, useState } from 'react'; -import PropTypes from 'prop-types'; -import { - Box, - Card, - CardHeader, - IconButton, - Tooltip, - Typography -} from '@mui/material'; -import { Add, FileDownload } from '@mui/icons-material'; - -import MemberSelectorDialog, { - FilterType -} from './member_selector_dialog/MemberSelectorDialog'; -import { reportSelectedMembersCsv } from '../../api/member.js'; -import { AppContext } from '../../context/AppContext.jsx'; -import { selectCsrfToken } from '../../context/selectors.js'; -import fileDownload from 'js-file-download'; -import { UPDATE_TOAST } from '../../context/actions.js'; - -import './MemberSelector.css'; - -const propTypes = { - /** An array of filters to apply to the member list in the dialog. */ - initialFilters: PropTypes.arrayOf( - PropTypes.shape({ - type: PropTypes.oneOf(Object.values(FilterType)), - value: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.number, - PropTypes.bool - ]) - }) - ), - /** The members that are currently selected. Use to make this a controlled component. */ - selected: PropTypes.arrayOf(PropTypes.object), - /** Listener for whenever the list of selected members changes. Passes the updated list as an argument. */ - onChange: PropTypes.func, - /** Optional title for the card. Default is "Selected Members". */ - title: PropTypes.string, - /** Set to true to use the outlined variant of the card. Default is the elevated variant. */ - outlined: PropTypes.bool, - /** If true, include a button to export the list of members to a CSV file. False by default. */ - exportable: PropTypes.bool, - /** If true, members cannot be added to or removed from the current selection. False by default. */ - disabled: PropTypes.bool, - /** A custom class name to additionally apply to the top-level card */ - className: PropTypes.string, - /** Custom style properties to apply to the top-level card */ - style: PropTypes.object -}; - -const MemberSelector = ({ - initialFilters = [], - selected, - onChange, - title = 'Selected Members', - expand = true, - outlined = false, - exportable = false, - disabled = false, - className, - style -}) => { - const { state, dispatch } = useContext(AppContext); - const csrf = selectCsrfToken(state); - - const [dialogOpen, setDialogOpen] = useState(false); - const [expanded, setExpanded] = useState(expand); - const [menuAnchor, setMenuAnchor] = useState(null); - const [filters, setFilters] = useState(initialFilters); - - const isFilteredByRole = filters.some( - filter => filter.type === FilterType.ROLE - ); - const roleFilter = filters.find(filter => filter.type === FilterType.ROLE); - const memberDescriptor = isFilteredByRole ? roleFilter.value : 'Members'; - - const handleExpandClick = () => setExpanded(!expanded); - - // If the selector is disabled, make sure the selector dialog is closed - useEffect(() => { - if (disabled) { - setDialogOpen(false); - } - }, [disabled]); - - const replaceSelectedMembers = members => { - onChange(members); - setDialogOpen(false); - }; - - const removeMember = member => { - const newSelected = selected.filter(m => m.id !== member.id); - onChange(newSelected); - }; - - const downloadMemberCsv = useCallback(() => { - if (!exportable) return; - - const memberIds = selected.map(member => member.id); - reportSelectedMembersCsv(memberIds, csrf).then(res => { - if (res && !res.error) { - fileDownload(res.payload.data, 'members.csv'); - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'success', - toast: 'Member export has been saved' - } - }); - } else { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: 'Failed to export members to CSV' - } - }); - } - }); - }, [selected, csrf, dispatch]); - - const clearMembers = () => onChange([]); - - return ( - <> - - - - {title} - - - ({selected.length}) - -
    - } - action={ - - - setDialogOpen(true)} - disabled={disabled} - > - - - - {exportable && ( - - - - - - )} - - } - /> - - setDialogOpen(false)} - onSubmit={replaceSelectedMembers} - /> - - ); -}; - -MemberSelector.propTypes = propTypes; - -export default MemberSelector; diff --git a/web-ui-external-feedback/src/components/member_selector/MemberSelector.test.jsx b/web-ui-external-feedback/src/components/member_selector/MemberSelector.test.jsx deleted file mode 100644 index a225930908..0000000000 --- a/web-ui-external-feedback/src/components/member_selector/MemberSelector.test.jsx +++ /dev/null @@ -1,67 +0,0 @@ -import React from 'react'; -import { AppContextProvider } from '../../context/AppContext'; -import MemberSelector from './MemberSelector'; - -const initialState = { - state: { - userProfile: { - memberProfile: { - id: '912834091823', - name: 'Current', - pdlId: '0987654321', - supervisorId: '9876543210' - }, - role: ['MEMBER'] - }, - memberProfiles: [ - { - id: '0987654321', - name: 'TestName', - lastName: 'Name' - }, - { - id: '9876543210', - name: 'TestName2', - lastName: 'Name2' - } - ] - } -}; - -describe('MemberSelector', () => { - it('renders correctly with default props', () => { - snapshot( - - - - ); - }); - - it('renders correctly as a controlled component', () => { - snapshot( - - - - ); - }); - - it('renders correctly when disabled', () => { - snapshot( - - - - ); - }); -}); diff --git a/web-ui-external-feedback/src/components/member_selector/__snapshots__/MemberSelector.test.jsx.snap b/web-ui-external-feedback/src/components/member_selector/__snapshots__/MemberSelector.test.jsx.snap deleted file mode 100644 index d1dcddbe1a..0000000000 --- a/web-ui-external-feedback/src/components/member_selector/__snapshots__/MemberSelector.test.jsx.snap +++ /dev/null @@ -1,226 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`MemberSelector > renders correctly as a controlled component 1`] = ` -
    -
    -
    -
    - -
    -
    - Custom Title -
    -
    - ( - 2 - ) -
    -
    -
    -
    -
    -
    - - -
    -
    -
    -
    -
    -`; - -exports[`MemberSelector > renders correctly when disabled 1`] = ` -
    -
    -
    -
    - -
    -
    - Selected Members -
    -
    - ( - 2 - ) -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -`; - -exports[`MemberSelector > renders correctly with default props 1`] = ` -
    -
    -
    -
    - -
    -
    - Selected Members -
    -
    - ( - 0 - ) -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -`; diff --git a/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.css b/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.css deleted file mode 100644 index d7f8f4b6f6..0000000000 --- a/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.css +++ /dev/null @@ -1,99 +0,0 @@ -.member-selector-dialog .custom-tenure-picker { - width: 8rem; -} - -.member-selector-dialog .toolbar-title-container { - display: flex; - flex-direction: row; - align-items: center; - gap: 2rem; - flex-grow: 1; - padding-top: 2px; - margin-left: 10px; -} - -.member-selector-dialog .member-selector-dialog-content { - margin: 5rem 1rem 1rem 1rem; -} - -.member-selector-dialog .filter-type-select { - width: 150px; -} - -.member-selector-dialog .filter-input { - width: 350px; -} - -.member-selector-dialog .dialog-form-group { - display: flex; - flex-direction: row; - justify-content: space-between; - gap: 0.5rem; - padding-bottom: 1rem; - flex-wrap: nowrap; -} - -.member-selector-dialog .name-search-field { - width: 300px; -} - -.member-selector-dialog .filter-input-container { - display: flex; - flex-direction: row; - gap: 1rem; - flex-wrap: wrap; - width: 100%; -} - -.member-selector-dialog .direct-reports-only-checkbox { - margin-left: 0; -} - -.member-selector-dialog .toggle-selectable-members-checkbox { - margin-right: 16px; - align-self: center; -} - -@media screen and (max-width: 600px) { - .member-selector-dialog .toolbar-title-container { - flex-direction: column; - gap: 0; - align-items: flex-start; - } - - .member-selector-dialog .toolbar-title-container .toolbar-title { - font-size: 1.5em; - } - - .member-selector-dialog .toolbar-title-container .selected-count-label { - font-size: 1em; - } - - .member-selector-dialog .member-selector-dialog-content { - margin: 4rem 0 0 0; - } - - .member-selector-dialog .dialog-form-group { - gap: 1rem; - } - - .member-selector-dialog .filter-input-container { - flex-direction: column; - gap: 0.5rem; - flex-grow: 1; - } - - .member-selector-dialog .name-search-field { - margin-right: 0; - } - - .member-selector-dialog .toggle-selectable-members-checkbox { - align-self: flex-end; - } - - .member-selector-dialog .name-search-field, - .member-selector-dialog .filter-input, - .member-selector-dialog .filter-type-select { - width: 100%; - } -} diff --git a/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.jsx b/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.jsx deleted file mode 100644 index a24fc85109..0000000000 --- a/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.jsx +++ /dev/null @@ -1,625 +0,0 @@ -import { differenceInMonths } from 'date-fns'; -import React, { useCallback, useContext, useEffect, useState } from 'react'; -import PropTypes from 'prop-types'; -import { - AppBar, - Autocomplete, - Avatar, - Button, - Checkbox, - Dialog, - DialogContent, - Divider, - FormControl, - FormControlLabel, - FormGroup, - IconButton, - InputAdornment, - InputLabel, - List, - ListItem, - ListItemAvatar, - ListItemButton, - ListItemText, - MenuItem, - Select, - Slide, - TextField, - Toolbar, - Typography -} from '@mui/material'; -import CloseIcon from '@mui/icons-material/Close'; -import SearchIcon from '@mui/icons-material/Search'; -import { DatePicker } from '@mui/x-date-pickers'; - -import { getAvatarURL } from '../../../api/api'; -import { AppContext } from '../../../context/AppContext'; -import { - selectCsrfToken, - selectCurrentMembers, - selectActiveGuilds, - selectMappedUserRoles, - selectRoles, - selectSkills, - selectSubordinates, - selectSupervisors, - selectTeamMembersBySupervisorId, - selectActiveTeams, -} from '../../../context/selectors'; -import { UPDATE_TOAST } from '../../../context/actions'; -import { getMembersByTeam } from '../../../api/team'; -import { getMembersByGuild } from '../../../api/guild'; -import { getSkillMembers } from '../../../api/memberskill'; - -import './MemberSelectorDialog.css'; - -const DialogTransition = React.forwardRef((props, ref) => ( - -)); - -export const FilterType = Object.freeze({ - GUILD: 'Guild', - TEAM: 'Team', - TITLE: 'Title', - LOCATION: 'Location', - ROLE: 'Role', - SKILL: 'Skill', - MANAGER: 'Manager' -}); - -export const Tenures = Object.freeze({ - All: 'All', - Months6: '6 Months', - Years1: '1 Year', - Years5: '5 Years', - Years10: '10 Years', - Years20: '20 Years', - Custom: 'Custom' -}); - -const tenureToMonths = { - [Tenures.Months6]: 6, - [Tenures.Years1]: 12, - [Tenures.Years5]: 60, - [Tenures.Years10]: 120, - [Tenures.Years20]: 240, - [Tenures.Custom]: 0 -}; - -const propTypes = { - initialFilters: PropTypes.arrayOf( - PropTypes.shape({ - tenure: PropTypes.oneOf(Object.values(Tenures)), - type: PropTypes.oneOf(Object.values(FilterType)), - value: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.number, - PropTypes.bool - ]) - }) - ), - memberDescriptor: PropTypes.string, - open: PropTypes.bool.isRequired, - selectedMembers: PropTypes.arrayOf(PropTypes.object).isRequired, - onClose: PropTypes.func, - onSubmit: PropTypes.func -}; - -const MemberSelectorDialog = ({ - open, - memberDescriptor = 'Members', - initialFilters = [], - selectedMembers, - onClose, - onSubmit -}) => { - const { state, dispatch } = useContext(AppContext); - const csrf = selectCsrfToken(state); - const members = selectCurrentMembers(state); - - // Use the first initial filter as the default filter type - const [initialFilter] = initialFilters; - - // Contains set of ids of checked members for instant add/remove operations - const [checked, setChecked] = useState(new Set()); - - const [nameQuery, setNameQuery] = useState(''); - const [filterType, setFilterType] = useState( - initialFilter?.type || FilterType.TEAM - ); - const [filterOptions, setFilterOptions] = useState(null); - const [filter, setFilter] = useState(null); - const [filteredMembers, setFilteredMembers] = useState([]); - const [directReportsOnly, setDirectReportsOnly] = useState(false); - const [selectableMembers, setSelectableMembers] = useState([]); - const [tenure, setTenure] = useState(initialFilter?.tenure || Tenures.All); - const [customTenure, setCustomTenure] = useState(new Date()); - - const handleSubmit = useCallback(() => { - const membersToAdd = members.filter(member => checked.has(member.id)); - onSubmit(membersToAdd); - }, [checked, members, onSubmit]); - - const initializeChecked = useCallback(() => { - const initialChecked = new Set(); - selectedMembers.forEach(member => initialChecked.add(member.id)); - setChecked(initialChecked); - }); - - // Reset the dialog when it closes, or set the initial filter when it opens - useEffect(() => { - if (!open) { - // Reset all state except for the chosen filter type and its corresponding options - setNameQuery(''); - setFilter(null); - setFilteredMembers([]); - setDirectReportsOnly(false); - setSelectableMembers([]); - } else { - initializeChecked(); - // If the dialog is opened with initial filters, set the initial filter - if (initialFilter && initialFilter.type === FilterType.ROLE) { - setFilterType(initialFilter.type); - setFilter( - selectRoles(state).find(role => role.role === initialFilter.value) - ); - } - } - }, [open, selectedMembers]); - - // Change filter options when filter type is changed - useEffect(() => { - const getFilterOptions = () => { - switch (filterType) { - case FilterType.TEAM: - const teams = selectActiveTeams(state); - return { - options: teams, - label: team => team.name, - equals: (team1, team2) => team1.id === team2.id - }; - case FilterType.GUILD: - const guilds = selectActiveGuilds(state); - return { - options: guilds, - label: guild => guild.name, - equals: (guild1, guild2) => guild1.id === guild2.id - }; - case FilterType.TITLE: - // Create a list of unique titles from current members - let titles = members - .filter(member => !!member.title) - .map(member => member.title); - titles = [...new Set(titles)]; - return { - options: titles, - label: title => title, - equals: (title1, title2) => title1 === title2 - }; - case FilterType.LOCATION: - let locations = members - .filter(member => !!member.location) - .map(member => member.location); - locations = [...new Set(locations)]; - return { - options: locations, - label: location => location, - equals: (location1, location2) => location1 === location2 - }; - case FilterType.ROLE: - const roles = selectRoles(state); - return { - options: roles, - label: role => role.role, - equals: (role1, role2) => role1.id === role2.id - }; - case FilterType.SKILL: - let skills = selectSkills(state); - return { - options: skills, - label: skill => skill.name, - equals: (skill1, skill2) => skill1.id === skill2.id - }; - case FilterType.MANAGER: - const supervisors = selectSupervisors(state); - return { - options: supervisors, - label: supervisor => supervisor.name, - equals: (supervisor1, supervisor2) => - supervisor1.id === supervisor2.id - }; - default: - console.warn( - `Cannot get options for FilterType ${filterType}; no implementation provided` - ); - return null; - } - }; - - setFilterOptions(getFilterOptions()); - }, [filterType, members, state]); - - const showError = useCallback( - message => { - dispatch({ - type: UPDATE_TOAST, - payload: { - severity: 'error', - toast: message - } - }); - }, - [dispatch] - ); - - // Filters the list of members based on the selected filter type and filter - useEffect(() => { - const getFilteredMembers = async () => { - let filteredMemberList = [...members]; - - // Exclude members that don't have the selected tenure. - if (tenure === Tenures.Custom) { - filteredMemberList = members.filter(member => { - const start = new Date(member.startDate); - return start <= customTenure; - }); - } else if (tenure !== Tenures.All) { - const now = new Date(); - const requiredMonths = tenureToMonths[tenure]; - filteredMemberList = members.filter(member => { - const start = new Date(member.startDate); - const diffMonths = differenceInMonths(now, start); - return diffMonths >= requiredMonths; - }); - } - - // If a filter is selected, use it to filter the list of selectable members - if (filter) { - switch (filterType) { - case FilterType.TEAM: - const teamId = filter.id; - const teamRes = await getMembersByTeam(teamId, csrf); - if (!teamRes.error) { - const teamMembers = teamRes.payload.data; - // Collect team member ids into a set for instant lookup when filtering - const memberIdsForTeam = new Set( - teamMembers.map(teamMember => teamMember.memberId) - ); - filteredMemberList = filteredMemberList.filter(member => - memberIdsForTeam.has(member.id) - ); - break; - } else { - showError(`Could not retrieve members for team ${filter.name}`); - } - break; - case FilterType.GUILD: - const guildId = filter.id; - const guildRes = await getMembersByGuild(guildId, csrf); - if (!guildRes.error) { - const guildMembers = guildRes.payload.data; - // Collect guild member ids into a set for instant lookup when filtering - const memberIdsForGuild = new Set( - guildMembers.map(guildMember => guildMember.memberId) - ); - filteredMemberList = filteredMemberList.filter(member => - memberIdsForGuild.has(member.id) - ); - } else { - showError(`Could not retrieve members for guild ${filter.name}`); - } - break; - case FilterType.TITLE: - filteredMemberList = filteredMemberList.filter( - member => member.title === filter - ); - break; - case FilterType.LOCATION: - filteredMemberList = filteredMemberList.filter( - member => member.location === filter - ); - break; - case FilterType.ROLE: - const mappedUserRoles = selectMappedUserRoles(state); - filteredMemberList = filteredMemberList.filter( - member => - member.id in mappedUserRoles && - mappedUserRoles[member.id].has(filter.role) - ); - break; - case FilterType.SKILL: - const skillId = filter.id; - const skillRes = await getSkillMembers(skillId, csrf); - if (!skillRes.error) { - const memberSkills = skillRes.payload.data; - // Collect member skill ids into a set for instant lookup when filtering - const memberIdsForSkill = new Set( - memberSkills.map(memberSkill => memberSkill.memberid) - ); - filteredMemberList = filteredMemberList.filter(member => - memberIdsForSkill.has(member.id) - ); - } else { - showError(`Could not retrieve members with skill ${filter.name}`); - } - break; - case FilterType.MANAGER: - const managerId = filter.id; - // Determine whether to include all subordinates or only direct subordinates - const subordinates = directReportsOnly - ? selectTeamMembersBySupervisorId(state, managerId) - : selectSubordinates(state, managerId); - // Collect subordinate ids into a set for instant lookup when filtering - const subordinateIds = new Set( - subordinates.map(member => member.id) - ); - filteredMemberList = filteredMemberList.filter(member => - subordinateIds.has(member.id) - ); - break; - default: - console.warn( - `Cannot filter members based on FilterType ${filterType}; no implementation provided` - ); - } - } - - return filteredMemberList; - }; - - if (open) { - getFilteredMembers().then(filtered => { - setFilteredMembers(filtered); - }); - } - }, [ - csrf, - customTenure, - directReportsOnly, - filter, - filterType, - members, - open, - selectedMembers, - showError, - state, - tenure - ]); - - useEffect(() => { - let selectable = [...filteredMembers]; - - // Search by member name - if (nameQuery) { - const query = nameQuery.trim().toLowerCase(); - selectable = selectable.filter(member => - member.name.toLowerCase().includes(query) - ); - } - - setSelectableMembers(selectable); - }, [nameQuery, filteredMembers]); - - const handleCheckboxToggle = useCallback( - member => { - const newChecked = new Set(checked); - if (checked.has(member.id)) { - newChecked.delete(member.id); - } else { - newChecked.add(member.id); - } - setChecked(newChecked); - }, - [checked] - ); - - const handleToggleAll = useCallback( - toggle => { - const newChecked = new Set(checked); - if (toggle) { - selectableMembers.forEach(member => { - newChecked.add(member.id); - }); - } else { - selectableMembers.forEach(member => { - newChecked.delete(member.id); - }); - } - setChecked(newChecked); - }, - [checked, selectableMembers] - ); - - const visibleChecked = useCallback(() => { - // Find only the checked members that are currently visible - return selectableMembers.filter(member => checked.has(member.id)); - }, [selectableMembers, checked]); - - return ( - - - - - - -
    - - Select {memberDescriptor} - - - {checked.size} selected - -
    - -
    -
    - - -
    - setNameQuery(event.target.value)} - InputProps={{ - endAdornment: ( - - - - ) - }} - /> - - Filter Type - - - ( - - )} - disablePortal - disabled={!filterOptions || !!initialFilter} - options={filterOptions ? filterOptions.options : []} - getOptionLabel={filterOptions ? filterOptions.label : () => ''} - isOptionEqualToValue={ - filterOptions ? filterOptions.equals : () => false - } - value={filter} - onChange={(_, value) => setFilter(value)} - /> -
    - handleToggleAll(event.target.checked)} - checked={ - selectableMembers.length > 0 && - visibleChecked().length === selectableMembers.length - } - indeterminate={ - visibleChecked().length > 0 && - visibleChecked().length !== selectableMembers.length - } - disabled={selectableMembers.length === 0} - /> -
    - -
    - {filterType === FilterType.MANAGER && ( - - setDirectReportsOnly(event.target.checked) - } - /> - } - label="Direct reports only" - /> - )} - - Required Tenure - - - {tenure === Tenures.Custom && ( - - )} -
    -
    - - - {selectableMembers.map(member => ( - handleCheckboxToggle(member)} - secondaryAction={ - - } - > - - - - - {member.name} - } - secondary={ - - {member.title} - - } - /> - - - ))} - - -
    -
    - ); -}; - -MemberSelectorDialog.propTypes = propTypes; - -export default MemberSelectorDialog; diff --git a/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.spec.jsx b/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.spec.jsx deleted file mode 100644 index 9d36237959..0000000000 --- a/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.spec.jsx +++ /dev/null @@ -1,202 +0,0 @@ -import React from 'react'; -import { render, screen, within } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { AppContextProvider } from '../../../context/AppContext.jsx'; -import MemberSelectorDialog from './MemberSelectorDialog.jsx'; -import { setupServer } from 'msw/node'; -import { http, HttpResponse } from 'msw'; - -const managerProfile = { - name: 'Jane Doe', - id: '3p45j3k45', - startDate: [2017, 2, 11], - location: 'STL', - title: 'Manager', - workEmail: 'janedoe@objectcomputing.com' -}; - -const currentUserProfile = { - id: 9876, - pdlId: 8765, - name: 'Current User', - firstName: 'Current', - lastName: 'User', - supervisorid: managerProfile.id -}; - -const memberProfile = { - name: 'Bob Jones', - id: '2o34i2j34', - startDate: [2018, 1, 10], - location: 'STL', - title: 'Engineer', - workEmail: 'bobjones@objectcomputing.com', - supervisorid: currentUserProfile.id -}; - -const testGuild = { - id: 111, - name: 'Test Guild', - description: 'A guild used for testing.', - guildLeads: [{ id: 124, name: managerProfile.name }], - guildMembers: [], - active: true, -}; - -const initialState = { - csrf: 'O_3eLX2-e05qpS_yOeg1ZVAs9nDhspEi', - userProfile: { - name: currentUserProfile.name, - firstName: currentUserProfile.firstName, - lastName: currentUserProfile.lastName, - role: ['MEMBER'], - imageUrl: - 'https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg', - memberProfile: currentUserProfile - }, - memberProfiles: [currentUserProfile, memberProfile, managerProfile], - skills: [ - { id: '918275', name: 'skill1', description: 'first' }, - { id: '9183455', name: 'skill2', description: 'second' } - ], - checkins: [], - guilds: [testGuild], - teams: [], - roles: [], - userRoles: [], - memberSkills: [], - index: 0 -}; - -const server = setupServer( - http.get( - `http://localhost:8080/services/guilds/members?guildId=${testGuild.id}`, - () => - HttpResponse.json([ - { memberId: managerProfile.id, guildId: testGuild.id } - ]) - ) -); - -beforeAll(() => server.listen()); -afterEach(() => server.resetHandlers()); -afterAll(() => server.close()); - -describe('MemberSelectorDialog', () => { - beforeEach(async () => { - render( - - - - ); - - // Wait for the dialog to be visible - await screen.findByRole('heading', { name: 'Select Members' }); - }); - - it('Populates the list of members by default', async () => { - const memberList = await screen.findAllByRole('listitem', {}); - expect(memberList).toHaveLength(initialState.memberProfiles.length); - }); - - it('Filters the list of members by name', async () => { - let memberList = await screen.findAllByRole('listitem', {}); - expect(memberList).toHaveLength(initialState.memberProfiles.length); - const nameField = await screen.findByRole('textbox', { name: /name/i }); - expect(nameField).toHaveValue(''); - - await userEvent.type(nameField, 'bob'); - expect(nameField).toHaveValue('bob'); - memberList = await screen.findAllByRole('listitem', {}); - expect(memberList).toHaveLength(1); - - within(memberList[0]).getByText(memberProfile.name, {}); - }); - - it('Filters the list of members by guild', async () => { - let memberList = await screen.findAllByRole('listitem', {}); - expect(memberList).toHaveLength(initialState.memberProfiles.length); - - const filterField = await screen.findByRole('combobox', { - name: /filter value/i - }); - let filterTypeField = await screen.findByRole('combobox', { - name: /filter type/i - }); - expect(filterField.innerHTML).toBe(''); - expect(filterTypeField.innerHTML).toBe('Team'); - - // Set the filter type to guild - await userEvent.click(filterTypeField); - let optionToSelect = await screen.findByRole('option', { name: /guild/i }); - await userEvent.click(optionToSelect); - expect(filterTypeField.innerHTML).toBe('Guild'); - - // Select a guild to use as the filter - await userEvent.click(filterField); - optionToSelect = await screen.findByRole('option', { - name: testGuild.name - }); - await userEvent.click(optionToSelect); - expect(filterField.value).toBe(testGuild.name); - - // Only members in the guild should be visible - memberList = await screen.findAllByRole('listitem', {}); - expect(memberList).toHaveLength(1); - within(memberList[0]).getByText(managerProfile.name, {}); - }); - - it('Filters the list of members by manager (with indirect reports)', async () => { - let memberList = await screen.findAllByRole('listitem', {}); - expect(memberList).toHaveLength(initialState.memberProfiles.length); - - const filterField = await screen.findByRole('combobox', { - name: /filter value/i - }); - let filterTypeField = await screen.findByRole('combobox', { - name: /filter type/i - }); - expect(filterField.innerHTML).toBe(''); - expect(filterTypeField.innerHTML).toBe('Team'); - - // Set filter type to manager - await userEvent.click(filterTypeField); - let optionToSelect = await screen.findByRole('option', { - name: /manager/i - }); - await userEvent.click(optionToSelect); - expect(filterTypeField.innerHTML).toBe('Manager'); - - // Select a manager to use as the filter - await userEvent.click(filterField); - optionToSelect = await screen.findByRole('option', { - name: managerProfile.name - }); - await userEvent.click(optionToSelect); - expect(filterField.value).toBe(managerProfile.name); - - // All subordinates of the selected manager should be visible - memberList = await screen.findAllByRole('listitem', {}); - expect(memberList).toHaveLength(2); - screen.getByText(memberProfile.name, {}); - screen.getByText(currentUserProfile.name, {}); - - // Change the checkbox to only show direct reports - const checkbox = await screen.findByRole('checkbox', { - name: /direct reports only/i - }); - expect(checkbox).not.toBeChecked(); - await userEvent.click(checkbox); - expect(checkbox).toBeChecked(); - - // Only direct reports should be visible - memberList = await screen.findAllByRole('listitem', {}); - expect(memberList).toHaveLength(1); - screen.getByText(currentUserProfile.name, {}); - }); -}); diff --git a/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.test.jsx b/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.test.jsx deleted file mode 100644 index 44caecfea8..0000000000 --- a/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/MemberSelectorDialog.test.jsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; -import MemberSelectorDialog from './MemberSelectorDialog'; -import { AppContextProvider } from '../../../context/AppContext'; -import { render, screen } from '@testing-library/react'; - -const currentUserProfile = { - id: 9876, - pdlId: 8765, - name: 'Current User', - firstName: 'Current', - lastName: 'User' -}; - -const initialState = { - state: { - csrf: 'O_3eLX2-e05qpS_yOeg1ZVAs9nDhspEi', - userProfile: { - name: currentUserProfile.name, - firstName: currentUserProfile.firstName, - lastName: currentUserProfile.lastName, - role: ['MEMBER'], - imageUrl: - 'https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg', - memberProfile: currentUserProfile - }, - memberProfiles: [ - currentUserProfile, - { - name: 'Bob Jones', - id: '2o34i2j34', - startDate: [2018, 1, 10], - location: 'STL', - title: 'Engineer', - workEmail: 'bobjones@objectcomputing.com' - }, - { - name: 'Jane Doe', - id: '3p45j3k45', - startDate: [2017, 2, 11], - location: 'STL', - title: 'Manager', - workEmail: 'janedoe@objectcomputing.com' - } - ], - skills: [ - { id: '918275', name: 'skill1', description: 'first' }, - { id: '9183455', name: 'skill2', description: 'second' } - ], - checkins: [], - guilds: [], - teams: [], - roles: [], - userRoles: [], - memberSkills: [], - index: 0 - } -}; - -describe('MemberSelectorDialog', () => { - it('renders correctly', async () => { - const component = ( - - - - ); - - const rendered = render(component); - await screen.findByRole('dialog', {}); - expect(rendered.baseElement).toMatchSnapshot(); - }); -}); diff --git a/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/__snapshots__/MemberSelectorDialog.test.jsx.snap b/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/__snapshots__/MemberSelectorDialog.test.jsx.snap deleted file mode 100644 index 318f2ef2b8..0000000000 --- a/web-ui-external-feedback/src/components/member_selector/member_selector_dialog/__snapshots__/MemberSelectorDialog.test.jsx.snap +++ /dev/null @@ -1,571 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`MemberSelectorDialog > renders correctly 1`] = ` - -

    a{iU6*nmqr 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 Wd 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