Ghost/ghost/admin/app/templates/offers.hbs

187 lines
11 KiB
Handlebars
Raw Normal View History

<section class="gh-canvas gh-offers">
<GhCanvasHeader class="gh-canvas-header sticky">
<h2 class="gh-canvas-title" data-test-screen-title>Offers</h2>
<section class="gh-offers-actions view-actions">
{{#if this.membersUtils.hasActiveTiers}}
<div>
<div class="gh-contentfilter-menu gh-contentfilter-type {{if (not-eq this.selectedType.value "active") "gh-contentfilter-selected"}}" data-test-type-select="true">
<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>
</div>
<LinkTo @route="offer.new" class="gh-btn gh-btn-primary"><span>New offer</span></LinkTo>
{{/if}}
</section>
</GhCanvasHeader>
<section class="view-container">
{{#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>
<LinkTo @route="settings-x.settings-x" @model="tiers" class="gh-btn gh-btn-green">
<span>Manage tiers</span>
</LinkTo>
</div>
{{else if (and this.offersExist this.filteredOffers.length)}}
<table class="gh-list gh-offers-list" data-test-offers-list>
<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"}}
{{else}}
{{gh-pluralize this.filteredOffers.length "archived offer"}}
{{/if}}
</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|}}
<tr class="gh-list-row" data-test-list="offers-list-item" data-test-offer="{{offer.name}}">
<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>
<LinkTo @route="members" @query={{hash filter=(concat "offer_redemptions:[" offer.id "]")}} class="gh-list-data" data-test-list="redemption-count">
<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>
</div>
</div>
</tr>
{{/each}}
</tbody>
</table>
{{else}}
{{#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">
<span>{{svg-jar "plus"}} Add offer</span>
</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>
<LinkTo @route="offers" @query={{hash type="active" author=null tag=null}} class="gh-btn gh-btn-lg">
<span>Show active offers</span>
</LinkTo>
</div>
</div>
{{/if}}
{{/if}}
2021-10-04 16:42:05 +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">
<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>
</div>
<div class="gh-btn"><span>Read more</span></div>
</a>
2021-10-04 16:42:05 +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>
</div>
<div class="gh-btn"><span>Read more</span></div>
</a>
2021-10-04 16:42:05 +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>
</div>
<div class="gh-btn"><span>Read more</span></div>
</a>
2021-10-04 16:42:05 +03:00
</div>
2021-10-04 16:42:05 +03:00
</div>
</div>
{{/if}}
2021-10-04 16:42:05 +03:00
</section>
</section>