2021-10-04 17:17:32 +03:00
|
|
|
|
<section class="gh-canvas gh-offers">
|
2022-10-04 08:35:29 +03:00
|
|
|
|
<GhCanvasHeader class="gh-canvas-header sticky">
|
2021-10-04 14:01:12 +03:00
|
|
|
|
<h2 class="gh-canvas-title" data-test-screen-title>Offers</h2>
|
2021-10-14 18:14:27 +03:00
|
|
|
|
<section class="gh-offers-actions view-actions">
|
2022-11-11 12:11:34 +03:00
|
|
|
|
{{#if this.membersUtils.hasActiveTiers}}
|
|
|
|
|
<div>
|
2023-01-04 12:39:32 +03:00
|
|
|
|
<div class="gh-contentfilter-menu gh-contentfilter-type {{if (not-eq this.selectedType.value "active") "gh-contentfilter-selected"}}" data-test-type-select="true">
|
2022-11-11 12:11:34 +03:00
|
|
|
|
<PowerSelect
|
|
|
|
|
@selected={{this.selectedType}}
|
|
|
|
|
@options={{this.availableTypes}}
|
|
|
|
|
@searchEnabled={{false}}
|
|
|
|
|
@onChange={{this.onTypeChange}}
|
|
|
|
|
@triggerComponent={{component "gh-power-select/trigger"}}
|
|
|
|
|
@triggerClass="gh-contentfilter-menu-trigger"
|
|
|
|
|
@dropdownClass="gh-contentfilter-menu-dropdown"
|
|
|
|
|
@matchTriggerWidth={{false}}
|
|
|
|
|
as |type|
|
|
|
|
|
>
|
|
|
|
|
{{#if type.name}}{{type.name}} offers{{else}}<span class="red">Unknown type</span>{{/if}}
|
|
|
|
|
</PowerSelect>
|
|
|
|
|
</div>
|
2021-10-14 18:14:27 +03:00
|
|
|
|
</div>
|
2022-11-11 12:11:34 +03:00
|
|
|
|
<LinkTo @route="offer.new" class="gh-btn gh-btn-primary"><span>New offer</span></LinkTo>
|
|
|
|
|
{{/if}}
|
2021-10-04 14:01:12 +03:00
|
|
|
|
</section>
|
|
|
|
|
</GhCanvasHeader>
|
|
|
|
|
|
|
|
|
|
<section class="view-container">
|
2022-11-11 12:11:34 +03:00
|
|
|
|
{{#if (not this.membersUtils.hasActiveTiers)}}
|
|
|
|
|
<div class="gh-offers-list-cta missing-tiers">
|
|
|
|
|
{{svg-jar "discount-bubble" class="discount-bubble"}}
|
|
|
|
|
<h4>You must have an active tier to create offers</h4>
|
2023-10-09 10:12:46 +03:00
|
|
|
|
<LinkTo @route="settings-x.settings-x" @model="tiers" class="gh-btn gh-btn-green">
|
|
|
|
|
<span>Manage tiers</span>
|
|
|
|
|
</LinkTo>
|
2022-11-11 12:11:34 +03:00
|
|
|
|
</div>
|
|
|
|
|
{{else if (and this.offersExist this.filteredOffers.length)}}
|
2023-01-11 10:35:55 +03:00
|
|
|
|
<table class="gh-list gh-offers-list" data-test-offers-list>
|
2023-01-04 12:39:32 +03:00
|
|
|
|
<thead>
|
|
|
|
|
<tr class="gh-list-row header">
|
|
|
|
|
<th class="gh-list-header">
|
|
|
|
|
{{#if (eq this.selectedType.value "active")}}
|
|
|
|
|
{{gh-pluralize this.filteredOffers.length "active offer"}}
|
2022-08-10 13:32:34 +03:00
|
|
|
|
{{else}}
|
2023-01-04 12:39:32 +03:00
|
|
|
|
{{gh-pluralize this.filteredOffers.length "archived offer"}}
|
2022-08-10 13:32:34 +03:00
|
|
|
|
{{/if}}
|
2023-01-04 12:39:32 +03:00
|
|
|
|
</th>
|
|
|
|
|
<th class="gh-list-header">Tier</th>
|
|
|
|
|
<th class="gh-list-header">Terms</th>
|
|
|
|
|
<th class="gh-list-header">Price</th>
|
|
|
|
|
<th class="gh-list-header">Redemptions</th>
|
|
|
|
|
<th class="gh-list-header gh-list-cellwidth-10"></th>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
{{#each this.filteredOffers as |offer|}}
|
2023-01-06 16:09:25 +03:00
|
|
|
|
<tr class="gh-list-row" data-test-list="offers-list-item" data-test-offer="{{offer.name}}">
|
2023-01-04 12:39:32 +03:00
|
|
|
|
<LinkTo @route="offer" @model={{offer}} class="gh-list-data" data-test-list="offer-name">
|
|
|
|
|
<h3>{{offer.name}}</h3>
|
|
|
|
|
</LinkTo>
|
|
|
|
|
<LinkTo @route="offer" @model={{offer}} class="gh-list-data">
|
|
|
|
|
<span>{{offer.tier.name}}</span>
|
|
|
|
|
<span class="midgrey">-</span>
|
|
|
|
|
<span class="midgrey">{{if (eq offer.cadence 'month') 'Monthly' 'Yearly'}} </span>
|
|
|
|
|
</LinkTo>
|
|
|
|
|
<LinkTo @route="offer" @model={{offer}} class="gh-list-data">
|
|
|
|
|
<span class="offer-value">
|
|
|
|
|
{{#if (eq offer.type 'percent')}}
|
|
|
|
|
{{svg-jar "offer"}}
|
|
|
|
|
<span class="green fw6">{{offer.amount}}% OFF</span>
|
|
|
|
|
{{/if}}
|
|
|
|
|
{{#if (eq offer.type 'fixed')}}
|
|
|
|
|
<span class="blue">{{svg-jar "offer"}}</span>
|
|
|
|
|
<span class="blue fw6">{{gh-price-amount offer.amount}} <span class="ttu">{{offer.currency}}</span> OFF</span>
|
|
|
|
|
{{/if}}
|
|
|
|
|
{{#if (eq offer.type 'trial')}}
|
|
|
|
|
<span class="pink">{{svg-jar "offer"}}</span>
|
|
|
|
|
<span class="pink fw6"><span class="ttu">{{offer.amount}}</span> DAYS FREE</span>
|
|
|
|
|
{{/if}}
|
|
|
|
|
{{#if (not-eq offer.type 'trial')}}
|
|
|
|
|
<span class="dib ml1 midgrey ttc"> –
|
|
|
|
|
{{if (eq offer.duration 'once') "First-payment" "Repeating"}}
|
|
|
|
|
</span>
|
|
|
|
|
{{/if}}
|
|
|
|
|
</span>
|
|
|
|
|
</LinkTo>
|
|
|
|
|
<LinkTo @route="offer" @model={{offer}} class="gh-list-data">
|
|
|
|
|
{{#if (eq offer.type 'trial')}}
|
|
|
|
|
<span>{{currency-symbol offer.finalCurrency}}{{gh-price-amount offer.originalPrice}}</span>
|
|
|
|
|
{{else}}
|
|
|
|
|
<span>{{currency-symbol offer.finalCurrency}}{{gh-price-amount offer.updatedPrice}}</span>
|
|
|
|
|
<span class="midgrey strike ml2">{{currency-symbol offer.finalCurrency}}{{gh-price-amount offer.originalPrice}}</span>
|
|
|
|
|
{{/if}}
|
|
|
|
|
</LinkTo>
|
2024-01-22 18:14:08 +03:00
|
|
|
|
<LinkTo @route="members" @query={{hash filter=(concat "offer_redemptions:[" offer.id "]")}} class="gh-list-data" data-test-list="redemption-count">
|
2023-01-04 12:39:32 +03:00
|
|
|
|
<span class="midgrey">{{offer.redemptionCount}}</span>
|
|
|
|
|
</LinkTo>
|
|
|
|
|
<div class="gh-list-data gh-list-cellwidth-10 gh-list-chevron">
|
|
|
|
|
<div class="flex items-center justify-end w-100 h-100">
|
|
|
|
|
<button
|
|
|
|
|
type="button"
|
|
|
|
|
class="gh-btn gh-btn-icon gh-btn-text gh-offer-link-button"
|
|
|
|
|
data-tooltip="Get shareable link"
|
|
|
|
|
aria-label="Get shareable link"
|
|
|
|
|
{{on "click" (fn this.openLinkDialog offer)}}
|
|
|
|
|
>
|
|
|
|
|
<span>{{svg-jar "link"}}</span>
|
|
|
|
|
</button>
|
|
|
|
|
<LinkTo @route="offer" @model={{offer}}>
|
|
|
|
|
<span class="nr2 lh-1">{{svg-jar "arrow-right" class="w6 h6 fill-midgrey pa1"}}</span>
|
|
|
|
|
</LinkTo>
|
2021-10-08 06:58:17 +03:00
|
|
|
|
</div>
|
2021-10-06 17:29:15 +03:00
|
|
|
|
</div>
|
2023-01-04 12:39:32 +03:00
|
|
|
|
</tr>
|
|
|
|
|
{{/each}}
|
|
|
|
|
</tbody>
|
2021-10-04 14:55:17 +03:00
|
|
|
|
</table>
|
|
|
|
|
{{else}}
|
2021-10-15 13:49:42 +03:00
|
|
|
|
{{#if (eq this.selectedType.value "active")}}
|
|
|
|
|
<div class="gh-offers-list-cta">
|
|
|
|
|
{{svg-jar "discount-bubble" class="discount-bubble"}}
|
|
|
|
|
<h4>Provide special offers to new signups</h4>
|
|
|
|
|
<p>
|
|
|
|
|
Boost your subscriptions by creating targeted discounts to potential members.
|
|
|
|
|
</p>
|
|
|
|
|
<LinkTo @route="offer.new" class="gh-btn gh-btn-green gh-btn-icon">
|
2022-09-02 18:56:02 +03:00
|
|
|
|
<span>{{svg-jar "plus"}} Add offer</span>
|
2021-10-15 13:49:42 +03:00
|
|
|
|
</LinkTo>
|
|
|
|
|
</div>
|
|
|
|
|
{{else}}
|
|
|
|
|
<div class="no-posts-box">
|
|
|
|
|
<div class="no-posts">
|
2022-06-02 00:31:23 +03:00
|
|
|
|
<h4>You have no archived offers.</h4>
|
2022-12-16 13:32:05 +03:00
|
|
|
|
<LinkTo @route="offers" @query={{hash type="active" author=null tag=null}} class="gh-btn gh-btn-lg">
|
2021-10-15 13:49:42 +03:00
|
|
|
|
<span>Show active offers</span>
|
|
|
|
|
</LinkTo>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
{{/if}}
|
2021-10-04 14:55:17 +03:00
|
|
|
|
{{/if}}
|
2021-10-04 16:42:05 +03:00
|
|
|
|
|
2021-10-15 13:49:42 +03:00
|
|
|
|
{{#if (eq this.selectedType.value "active")}}
|
|
|
|
|
<div class="gh-main-section gh-offers-help">
|
|
|
|
|
<h2 class="gh-main-section-header small bn">Get the most out of offers</h2>
|
|
|
|
|
<div class="gh-main-section-block">
|
|
|
|
|
<div class="gh-main-section-content grey">
|
2022-02-02 19:09:43 +03:00
|
|
|
|
<a href="https://ghost.org/help/offers" target="_blank" class="gh-offers-help-card" rel="noopener noreferrer">
|
2021-10-22 11:27:46 +03:00
|
|
|
|
<div class="gh-offers-help-content">
|
2021-10-22 11:31:02 +03:00
|
|
|
|
<div class="thumbnail" style="background-image: url(assets/img/marketing/offers-1.jpg);"></div>
|
2021-10-22 11:27:46 +03:00
|
|
|
|
<div class="text">
|
|
|
|
|
<h3>How to create offers in Ghost</h3>
|
|
|
|
|
<p>Find out how to create and promote offers to increase your subscriptions.</p>
|
|
|
|
|
</div>
|
2021-10-15 13:49:42 +03:00
|
|
|
|
</div>
|
|
|
|
|
<div class="gh-btn"><span>Read more</span></div>
|
|
|
|
|
</a>
|
2021-10-04 16:42:05 +03:00
|
|
|
|
|
2022-02-02 19:09:43 +03:00
|
|
|
|
<a href="https://ghost.org/resources/proven-discount-strategies" target="_blank" class="gh-offers-help-card" rel="noopener noreferrer">
|
2021-10-22 11:27:46 +03:00
|
|
|
|
<div class="gh-offers-help-content">
|
2021-10-22 11:31:02 +03:00
|
|
|
|
<div class="thumbnail" style="background-image: url(assets/img/marketing/offers-3.jpg);"></div>
|
2021-10-22 11:27:46 +03:00
|
|
|
|
<div class="text">
|
|
|
|
|
<h3>Proven discount strategies for publishers</h3>
|
|
|
|
|
<p>Setting up the right timing for your offers is as critical as finding the right amount.</p>
|
|
|
|
|
</div>
|
2021-10-15 13:49:42 +03:00
|
|
|
|
</div>
|
|
|
|
|
<div class="gh-btn"><span>Read more</span></div>
|
|
|
|
|
</a>
|
2021-10-04 16:42:05 +03:00
|
|
|
|
|
2022-02-02 19:09:43 +03:00
|
|
|
|
<a href="https://ghost.org/resources/conversion-vs-retention-offers" target="_blank" class="gh-offers-help-card" rel="noopener noreferrer">
|
2021-10-22 11:27:46 +03:00
|
|
|
|
<div class="gh-offers-help-content">
|
2021-10-22 11:31:02 +03:00
|
|
|
|
<div class="thumbnail" style="background-image: url(assets/img/marketing/offers-2.jpg)"></div>
|
2021-10-22 11:27:46 +03:00
|
|
|
|
<div class="text">
|
|
|
|
|
<h3>Offer pricing: Conversion vs retention</h3>
|
|
|
|
|
<p>As your business evolves, your discount strategy should too.</p>
|
|
|
|
|
</div>
|
2021-10-15 13:49:42 +03:00
|
|
|
|
</div>
|
|
|
|
|
<div class="gh-btn"><span>Read more</span></div>
|
|
|
|
|
</a>
|
2021-10-04 16:42:05 +03:00
|
|
|
|
|
2021-10-15 13:49:42 +03:00
|
|
|
|
</div>
|
2021-10-04 16:42:05 +03:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2021-10-15 13:49:42 +03:00
|
|
|
|
{{/if}}
|
2021-10-04 16:42:05 +03:00
|
|
|
|
|
2021-10-04 14:01:12 +03:00
|
|
|
|
</section>
|
2021-10-06 17:29:15 +03:00
|
|
|
|
</section>
|