Przejdź do głównej treści

Kursy walut

Morse

Aktualne kursy walut w tabeli pobierane z API nbp.pl z tabeli C. Przelicznik walut uwzględnia kursy kupna i sprzedaży.

Tabela kursów walut

Waluta Kod Kupno Sprzedaż

Przelicznik walut

Kod po stronie przeglądarki

<div id="app">
    <h2 class="my-3 text-center">Tabela kursów walut</h2>
    <table class="table">
        <thead>
            <tr>
                <th>Waluta</th>
                <th>Kod</th>
                <th>Kupno</th>
                <th>Sprzedaż</th>
            </tr>    
        </thead>
        <tbody data-bind="foreach: result">
            <tr>
                <td data-bind="text: currency"></td>
                <td data-bind="text: code"></td>
                <td data-bind="text: bid"></td>
                <td data-bind="text: ask"></td>
            </tr>
        </tbody>
    </table>
    <h2 class="my-3 text-center">Przelicznik walut</h2>
    <div class="row">
        <div class="col">
            <label class="form-label" for="inputValue">Wartość wejściowa</label>
            <input type="number" id="inputValue" class="form-control" data-bind="textInput: inputValue">
        </div>
        <div class="col">
            <label class="form-label" for="inputCurrency">Waluta wejściowa</label>
            <select id="inputCurrency" class="form-select" data-bind="foreach: options, value: selectedOptionFrom">
                <option data-bind="value: $data, text: $data"></option>
            </select> 
        </div>
        <div class="col">
            <label class="form-label" for="outputCurrency">Waluta wyjściowa</label>
            <select id="outputCurrency" class="form-select" data-bind="foreach: options, value: selectedOptionTo">
                <option data-bind="value: $data, text: $data"></option>
            </select> 
        </div>
        <div class="col">
            <label class="form-label" for="outputValue">Wartość wyjściowa</label>
            <input type="text" id="outputValue" class="form-control" data-bind="value: computedOutputValue" readonly>
        </div>
    </div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {    
var ViewModel = function()
{
    var self = this;
    self.result = ko.observable('');
    self.rates = ko.observableArray([]); 
    self.options = ko.observableArray([]);
    self.selectedOptionFrom = ko.observable('');
    self.selectedOptionTo = ko.observable('');
    self.inputValue = ko.observable('1.00');
    //methods
    self.search = function ()
    {
        var data = {format: 'json'};
        self.result('');
        self.rates([]);
        self.options([]);
        axios.get('https://api.nbp.pl/api/exchangerates/tables/C?format=json').then(function (response) {            
            var obj = {
                currency: 'polski złoty',
                code: 'PLN',
                bid: 1.0000,
                ask: 1.0000
            };            
            var rates = response.data[0].rates;
            self.result(rates);
            rates.push(obj);
            self.rates(rates);

            for (var i = 0; i < rates.length; i++)
            {
                self.options.push(rates[i].code);
            }
            self.selectedOptionFrom('USD');
            self.selectedOptionTo('PLN');
        }).catch(function (error) {
            BootstrapToast.show({title: 'Błąd', message: 'Błąd pobierania danych', when: 'teraz', type: 'text-bg-danger'});
        });
    };
    //computed
    self.computedOutputValue = ko.pureComputed(function() {
        var from = self.selectedOptionFrom();
        var to = self.selectedOptionTo();
        var input = self.inputValue();
                
        if (from == to)
        {
            return parseFloat(input).toFixed(2);  
        }

        var value = 0;
        for (var i = 0; i < self.rates().length; i++)
        {
            var obj = self.rates()[i];
            if (obj.code == from)
            {
                value = input * obj.bid;
                break;
            }
        }
        for (var i = 0; i < self.rates().length; i++)
        {
            var obj = self.rates()[i];
            if (obj.code == to)
            {
                value = value / obj.ask;
                break;
            }
        }
        
        return parseFloat(value).toFixed(2);  
    });
};
var vm = new ViewModel();
ko.applyBindings(vm, document.getElementById('app'));
vm.search();
});    
</script>

Kod po stronie serwera

Informacja

Aplikacja nie korzysta z kodu po stronie serwera.

Tagi

Axios KnockoutJS

Dziękujemy!
()

Informacja o cookies

Moja strona internetowa wykorzystuje wyłącznie niezbędne pliki cookies, które są wymagane do jej prawidłowego działania. Nie używam ciasteczek w celach marketingowych ani analitycznych. Korzystając z mojej strony, wyrażasz zgodę na stosowanie tych plików. Możesz dowiedzieć się więcej w mojej polityce prywatności.