65 lines
2.9 KiB
XML
65 lines
2.9 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<templates xml:space="preserve">
|
|
<t t-name="custom_subscriptions.AppSelectorTemplate" owl="1">
|
|
<div class="app-selector-wrapper">
|
|
|
|
<div class="app-selector-header">
|
|
<h1>Choose your Apps</h1>
|
|
<p>Free instant access. No credit card required.</p>
|
|
</div>
|
|
|
|
<div class="app-selector-content">
|
|
|
|
<!-- App Grid -->
|
|
<div class="app-grid">
|
|
<t t-if="state.loading">
|
|
<div class="text-center p-5 text-muted">Loading apps...</div>
|
|
</t>
|
|
<t t-else="">
|
|
<t t-foreach="Object.keys(state.categories)" t-as="category" t-key="category">
|
|
<div class="category-section">
|
|
<h2 class="category-title" t-esc="category"/>
|
|
<div class="app-cards-row">
|
|
<t t-foreach="state.categories[category]" t-as="app" t-key="app.id">
|
|
<div class="app-card"
|
|
t-att-class="isSelected(app.id) ? 'selected' : ''"
|
|
t-on-click="() => this.toggleSelection(app.id)">
|
|
|
|
<div class="card-check">
|
|
<i class="fa fa-check"/>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<img t-att-src="app.icon" class="app-icon" alt="" onerror="this.src='/web/static/img/placeholder.png'"/>
|
|
<div class="app-name" t-esc="app.name"/>
|
|
<div class="app-desc" t-esc="app.shortdesc"/>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</t>
|
|
</div>
|
|
|
|
<!-- Sidebar -->
|
|
<div class="app-sidebar">
|
|
<div class="sidebar-card">
|
|
<h3><t t-esc="state.selectedIds.length"/> Apps selected</h3>
|
|
|
|
<div class="trial-info">
|
|
<p><strong>Community Edition</strong></p>
|
|
<p>Install modules instantly.</p>
|
|
<p>No credit card required.</p>
|
|
</div>
|
|
|
|
<button class="btn-continue" t-on-click="installApps" t-att-disabled="state.selectedIds.length === 0">
|
|
Continue
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</templates> |