overview leht

SvelteJS/Sapper project overview leht

Story

Minge pivotaltrackerisse ja looge uus story nimega “As a user I see an overview page when I log on”. Lisa loole järgmine ülesanned:

  • There is an overview on the nav
  • When I am not logged in and try to access the overview page, I am redirected to login
  • When I log in, I am redirected to that page
  • On the overview page I see my name
  • I see my accounts
  • I see my funds
  • I see the past operations on my accounts
  • The positive sums are green and the negative sums are red

Overview alus

Alustame Nav.svelte failist, lisame ühe rea mis suunab meid overview.svelte lehtele kui me oleme sisse loginud.

1234567{#if $session.token}    <li><a aria-current="{segment === 'logout' ? 'page' : undefined}"href="{logout}"on:click|preventDefault={logout}>logout</a></li>    <li><a aria-current="{segment === 'overview' ? 'page' : undefined}"href="overview">overview</a></li>{:else}    <li><a aria-current="{segment === 'register' ? 'page' : undefined}"href="register">register</a></li>    <li><a aria-current="{segment === 'login' ? 'page' : undefined}"href="login">login</a></li>{/if}

Seejärel loome ka ‘overview.svelte’ faili teel /src/routes

ja sisestage järgmist skript failile. See suunab kasutaja login lehele, kui ta pole sisse logitud.

1234567<script context="module">    export async function preload({ params }, { token }) {        if (!token) {            this.redirect(302, `/login`);        }    }</script>

Pärast, minge ‘login.svelte’ failisse ja muudake esimest skripti sellele:

1234567<script context="module">    export async function preload({ params }, { token }) {        if (token) {            this.redirect(302, `/overview`);        }    }</script>

Sellega, esimest kolm ülessanet on tehtud.

Täiendavad failid

Meil on vaja lisada 2 faili projektisse et jätkama. Esimene on ‘getMyData.js’ ja teine on ‘getTransactions.js’. Mõlemad failid asuvad teel ‘/src/routes/auth’.

getMyData faili sisu

12345678import* as api from 'api.js';exportasyncfunctionpost(reg,res){    api.get('users/current', reg.session.token ).then(response => {        res.setHeader('Content-Type', 'application/json');        res.end(JSON.stringify(response));    })}

getTransactions faili sisu

12345678import* as api from 'api.js';exportasyncfunctionpost(reg,res){    api.get('transactions', reg.session.token ).then(response => {        res.setHeader('Content-Type', 'application/json');        res.end(JSON.stringify(response));    })}

Kui mõlemad failid on lisatud, lähme ‘overview.svelte’ failisse ja lisame järgmist skripti milles on meile vajalikud funktsioonid:

12345678910111213<script>    import{post} from 'utils.js';    asyncfunctiongetMyData(){        returnawaitpost('auth/getMyData').then(r=>{            r.funds = r.accounts.reduce((funds,account) => funds + account.balance,0)            returnr        })    }    asyncfunctiongetTransactions(){        returnawaitpost('auth/getTransactions')    }</script>

Pärast ülaltootud skripti lisamist, lisa ka järgmist koodijupp mis näitab meile meie kontod info.

123456789101112131415161718192021{#if process.browser}    {#await getMyData()}        Loading...     {:then my}        <section>            <p style="font-size: xx-large">{my.name}</p>        </section>        <section>            My funds            <p style="font-size: xx-large; color: {my.funds >= 0 ? 'green':'red'}">{my.funds}</p>        </section>        <section>            <ul>                {#each my.accounts as account}                    <li>{account.number} ({account.name})</li>                {/each}            </ul>        </section>            {/await}{/if}

Kui te kirjutasid kõik kuni selle punktini, siis näete oma konto info overview lehel kui olete sisse loginud

Sellega on esimest 6 ülessaned loos tehtud

Varasemate operatsioonide tabel

Lähme ‘overview.svelte’ failile jälle ja lisame sellele tabelit:

123456789101112131415<section>    <table class="table table-striped table-bordered">        <thead>        <tr>            <th>senderName</th>            <th>amount</th>            <th>createdAt</th>            <th>status</th>        </tr>        </thead>        <tbody>        </tbody>    </table></section>

Kui me preagu lähme meie overview lehele siis näeme ainult tühjat tabelit:

Et seda parandada muudame meie tabelit järgsena:

1234567891011121314151617181920212223242526<section>    {#await getTransactions()}        loading    {:then transactions}        <table class="table table-striped table-bordered">            <thead>            <tr>                <th>senderName</th>                <th>amount</th>                <th>createdAt</th>                <th>status</th>            </tr>            </thead>            <tbody>            {#each transactions as transaction}            <tr>                <td><b>{transaction.senderName}</b><br>{transaction.explanation}</td>                <td style="color: {transaction.amount>= 0 ? 'green' : 'red'}">{transaction.amount} {transaction.currency}</td>                <td><b>{transaction.createdAt}</b><br>{transaction.explanation}</td>                <td><b>{transaction.status}</b><br>{transaction.statusDetail}</td>            </tr>            {/each}            </tbody>        </table>    {/await}</section>

Sellega on kõik ülessanned tehtud. Võite teha commit’i uuel harul nimega ‘#storyIdAs_a_user_I_see_an_overview_page_when_I_log_on’, kus lisate mitte storyID aga võtate oma loo ID Pivotal Tracker’s

Meie tulemus

Lõpp tulemus

Overview.svelte lõppu kood

12345678910111213141516171819202122232425262728293031323334353637383940414243444546{#if process.browser}    {#await getMyData()}        Loading...     {:then my}        <section>            <p style="font-size: xx-large">{my.name}</p>        </section>        <section>            My funds            <p style="font-size: xx-large; color: {my.funds >= 0 ? 'green':'red'}">{my.funds}</p>        </section>        <section>            <ul>                {#each my.accounts as account}                    <li>{account.number} ({account.name})</li>                {/each}            </ul>        </section>        <section>            {#await getTransactions()}                loading            {:then transactions}                <table class="table table-striped table-bordered">                    <thead>                    <tr>                        <th>senderName</th>                        <th>amount</th>                        <th>createdAt</th>                        <th>status</th>                    </tr>                    </thead>                    <tbody>                    {#each transactions as transaction}                    <tr>                        <td><b>{transaction.senderName}</b><br>{transaction.explanation}</td>                        <td style="color: {transaction.amount>= 0 ? 'green' : 'red'}">{transaction.amount} {transaction.currency}</td>                        <td><b>{transaction.createdAt}</b><br>{transaction.explanation}</td>                        <td><b>{transaction.status}</b><br>{transaction.statusDetail}</td>                    </tr>                    {/each}                    </tbody>                </table>            {/await}        </section>    {/await}{/if}