diff --git a/manage/app/gql/queries/campaign/email-links.graphql b/manage/app/gql/queries/campaign/email-links.graphql
index 3c7624cb..0df38a6c 100644
--- a/manage/app/gql/queries/campaign/email-links.graphql
+++ b/manage/app/gql/queries/campaign/email-links.graphql
@@ -1,7 +1,27 @@
-#import 'leads-manage/gql/fragments/campaign/email-links'
-
-query CampaignEditEmailLinks($input: ModelIdInput!) {
+query CampaignEditEmailLinks($input: ModelIdInput!, $urlGroupsInput: EmailCampaignUrlGroupInput) {
emailCampaign(input: $input) {
- ...EmailCampaignLinksFragment
+ id
+ urlGroups(input: $urlGroupsInput) {
+ url {
+ id
+ title
+ values {
+ resolved
+ }
+ }
+ deploymentGroups {
+ active
+ deployment {
+ id
+ entity
+ name
+ typeDescription
+ sentDate
+ metrics {
+ sent
+ }
+ }
+ }
+ }
}
}
diff --git a/manage/app/routes/campaign/edit/email/links.js b/manage/app/routes/campaign/edit/email/links.js
index ac9c8e7c..c48ba67f 100644
--- a/manage/app/routes/campaign/edit/email/links.js
+++ b/manage/app/routes/campaign/edit/email/links.js
@@ -5,9 +5,19 @@ import FormMixin from 'leads-manage/mixins/form-mixin';
import query from 'leads-manage/gql/queries/campaign/email-links';
export default Route.extend(FormMixin, RouteQueryManager, {
- model() {
+ queryParams: {
+ 'deployments-filter': '',
+ },
+
+ async model(params) {
const id = this.modelFor('campaign.edit.email').get('id');
- const variables = { input: { id } };
- return this.get('apollo').watchQuery({ query, variables, fetchPolicy: 'network-only' }, 'emailCampaign');
+ const deploymentsFilter = params['deployments-filter'];
+ const urlGroupsInput = deploymentsFilter ? { deploymentsFilter } : null;
+ const variables = {
+ input: { id },
+ ...urlGroupsInput && { urlGroupsInput },
+ };
+ const result = await this.get('apollo').watchQuery({ query, variables, fetchPolicy: 'network-only' }, 'emailCampaign');
+ return {...result, deploymentsFilter };
},
});
diff --git a/manage/app/templates/campaign/edit/email/links.hbs b/manage/app/templates/campaign/edit/email/links.hbs
index f7ddcfd3..20d8cd8c 100644
--- a/manage/app/templates/campaign/edit/email/links.hbs
+++ b/manage/app/templates/campaign/edit/email/links.hbs
@@ -6,6 +6,20 @@
{{/modal.header}}
{{#modal.body}}
+
+
+
+
{{email-campaign/url-groups
urlGroups=model.urlGroups
disabled=isActionRunning
diff --git a/monorepo/services/server/src/graphql/definitions/campaign.js b/monorepo/services/server/src/graphql/definitions/campaign.js
index 04f446a9..bc3f163b 100644
--- a/monorepo/services/server/src/graphql/definitions/campaign.js
+++ b/monorepo/services/server/src/graphql/definitions/campaign.js
@@ -136,7 +136,7 @@ type EmailCampaign {
displayDeliveredMetrics: Boolean
enforceMaxEmailDomains: Boolean
urlCount: Int!
- urlGroups: [EmailCampaignUrlGroup!]!
+ urlGroups(input: EmailCampaignUrlGroupInput): [EmailCampaignUrlGroup!]!
"Whether this email campaign has any eligible deployment data."
hasDeployments: Boolean!
}
@@ -402,6 +402,10 @@ input CampaignStatusInput {
enabled: Boolean!
}
+input EmailCampaignUrlGroupInput {
+ deploymentsFilter: String!
+}
+
enum CampaignSortField {
fullName
createdAt
diff --git a/monorepo/services/server/src/graphql/resolvers/campaign.js b/monorepo/services/server/src/graphql/resolvers/campaign.js
index d505d083..de3f386b 100644
--- a/monorepo/services/server/src/graphql/resolvers/campaign.js
+++ b/monorepo/services/server/src/graphql/resolvers/campaign.js
@@ -299,7 +299,9 @@ module.exports = {
/**
* @todo find a way to not re-query the campaign here.
*/
- urlGroups: async (emailCampaign) => {
+ urlGroups: async (emailCampaign, { input }) => {
+ const deploymentsFilter = input ? input.deploymentsFilter : null;
+ const deploymentsFilterRegEx = deploymentsFilter ? new RegExp(deploymentsFilter, 'i') : null;
const { id } = emailCampaign;
const campaign = await Campaign.findOne({ 'email._id': id });
if (!campaign) return [];
@@ -310,13 +312,20 @@ module.exports = {
const { deployment } = deploymentUrl;
const { _id: urlId } = deploymentUrl.url;
if (!m.has(`${urlId}`)) m.set(`${urlId}`, new Map());
- m.get(`${urlId}`).set(deployment.entity, deployment);
+ if (
+ (deploymentsFilterRegEx && deployment.name.match(deploymentsFilterRegEx))
+ || !deploymentsFilterRegEx
+ ) {
+ m.get(`${urlId}`).set(deployment.entity, deployment);
+ }
return m;
}, new Map());
const arr = [];
map.forEach((deployments, urlId) => {
- arr.push({ urlId, deployments, excludeUrls });
+ if (deployments.size) {
+ arr.push({ urlId, deployments, excludeUrls });
+ }
});
return arr;
},