<template>
    <div>
        <Head>
            <Title>Vue Deferred Content Component</Title>
            <Meta name="description" content="DeferredContent postpones the loading the content that is initially not in the viewport until it becomes visible on scroll." />
        </Head>

        <div class="content-section introduction">
            <div class="feature-intro">
                <h1>DeferredContent</h1>
                <p>DeferredContent postpones the loading the content that is initially not in the viewport until it becomes visible on scroll.</p>
            </div>
            <AppDemoActions />
        </div>

        <div class="content-section implementation">
            <div class="card">
                <div style="height: 800px">Scroll down to lazy load an image and the DataTable which initiates a query that is not executed on initial page load to speed up load performance.</div>

                <DeferredContent @load="onImageLoad">
                    <img src="/demo/images/nature/nature4.jpg" alt="Nature" />
                </DeferredContent>

                <div style="height: 500px"></div>

                <DeferredContent @load="onDataLoad" role="region" aria-live="polite" aria-label="Content loaded after page scrolled down">
                    <DataTable :value="products" responsiveLayout="scroll">
                        <Column field="code" header="Code"></Column>
                        <Column field="name" header="Name"></Column>
                        <Column field="category" header="Category"></Column>
                        <Column field="quantity" header="Quantity"></Column>
                    </DataTable>
                </DeferredContent>
            </div>
        </div>

        <DeferredContentDoc />
    </div>
</template>

<script>
import ProductService from '../../service/ProductService';
import DeferredContentDoc from './DeferredContentDoc';

export default {
    data() {
        return {
            products: null
        };
    },
    productService: null,
    created() {
        this.productService = new ProductService();
    },
    methods: {
        onImageLoad() {
            this.$toast.add({ severity: 'success', summary: 'Image Initialized', detail: 'Scroll down to load the datatable' });
        },
        onDataLoad() {
            this.productService.getProductsSmall().then((data) => (this.products = data));
            this.$toast.add({ severity: 'success', summary: 'Data Initialized', detail: 'Render Completed' });
        }
    },
    components: {
        DeferredContentDoc: DeferredContentDoc
    }
};
</script>