ソースを参照

Add missing 'opt-in' campaign feature to the new UI

Kailash Nadh 5 年 前
コミット
13a252a7b3
3 ファイル変更25 行追加12 行削除
  1. 1 7
      campaigns.go
  2. 3 0
      frontend/src/views/Campaigns.vue
  3. 21 5
      frontend/src/views/Lists.vue

+ 1 - 7
campaigns.go

@@ -638,13 +638,9 @@ func makeOptinCampaignMessage(o campaignReq, app *App) (campaignReq, error) {
 	}
 
 	// Construct the opt-in URL with list IDs.
-	var (
-		listIDs   = url.Values{}
-		listNames = make([]string, 0, len(lists))
-	)
+	listIDs := url.Values{}
 	for _, l := range lists {
 		listIDs.Add("l", l.UUID)
-		listNames = append(listNames, l.Name)
 	}
 	// optinURLFunc := template.URL("{{ OptinURL }}?" + listIDs.Encode())
 	optinURLAttr := template.HTMLAttr(fmt.Sprintf(`href="{{ OptinURL }}%s"`, listIDs.Encode()))
@@ -660,8 +656,6 @@ func makeOptinCampaignMessage(o campaignReq, app *App) (campaignReq, error) {
 			"Error compiling opt-in campaign template.")
 	}
 
-	o.Name = "Opt-in campaign " + strings.Join(listNames, ", ")
-	o.Subject = "Confirm your subscription(s)"
 	o.Body = b.String()
 	return o, nil
 }

+ 3 - 0
frontend/src/views/Campaigns.vue

@@ -45,6 +45,9 @@
             <b-table-column field="name" label="Name" sortable width="25%">
               <div>
                 <p>
+                  <b-tag v-if="props.row.type !== 'regular'" class="is-small">
+                    {{ props.row.type }}
+                  </b-tag>
                   <router-link :to="{ name: 'campaign', params: { 'id': props.row.id }}">
                     {{ props.row.name }}</router-link>
                 </p>

+ 21 - 5
frontend/src/views/Lists.vue

@@ -36,14 +36,13 @@
                   {{ ' ' }}
                   {{ props.row.optin }}
                 </b-tag>{{ ' ' }}
-                <router-link :to="{name: 'campaign', params: {id: 'new'},
-                  query: {type: 'optin', 'list_id': props.row.id}}"
-                  v-if="props.row.optin === 'double'" class="is-size-7 send-optin">
+                <a v-if="props.row.optin === 'double'" class="is-size-7 send-optin"
+                  href="#" @click="$utils.confirm(null, () => createOptinCampaign(props.row))">
                   <b-tooltip label="Send opt-in campaign" type="is-dark">
                     <b-icon icon="rocket-launch-outline" size="is-small" />
                     Send opt-in campaign
                   </b-tooltip>
-                </router-link>
+                </a>
               </div>
             </b-table-column>
 
@@ -149,10 +148,27 @@ export default Vue.extend({
         },
       );
     },
+
+    createOptinCampaign(list) {
+      const data = {
+        name: `Opt-in to ${list.name}`,
+        subject: `Confirm subscription(s) ${list.name}`,
+        lists: [list.id],
+        from_email: this.serverConfig.fromEmail,
+        content_type: 'richtext',
+        messenger: 'email',
+        type: 'optin',
+      };
+
+      this.$api.createCampaign(data).then((d) => {
+        this.$router.push({ name: 'campaign', hash: '#content', params: { id: d.id } });
+      });
+      return false;
+    },
   },
 
   computed: {
-    ...mapState(['lists', 'loading']),
+    ...mapState(['lists', 'serverConfig', 'loading']),
   },
 
   mounted() {