@gpa-gemstone/react-interactive
Version: 
Interactive UI Components for GPA products
165 lines (164 loc) • 7.69 kB
JavaScript
;
// ******************************************************************************************************
//  GenericController.tsx - Gbtc
//
//  Copyright © 2023, Grid Protection Alliance.  All Rights Reserved.
//
//  Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See
//  the NOTICE file distributed with this work for additional information regarding copyright ownership.
//  The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this
//  file except in compliance with the License. You may obtain a copy of the License at:
//
//      http://opensource.org/licenses/MIT
//
//  Unless agreed to in writing, the subject software distributed under the License is distributed on an
//  "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the
//  License for the specific language governing permissions and limitations.
//
//  Code Modification History:
//  ----------------------------------------------------------------------------------------------------
//  04/05/2024 - C. Lackner
//       Generated original version of source code.
// ******************************************************************************************************
var __assign = (this && this.__assign) || function () {
    __assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
var $ = __importStar(require("jquery"));
var GenericController = /** @class */ (function () {
    /**
     * Creates a new Controler of type T, which can be used to perform basic CRUD operations against
     * a specified web api. without the Reduxstore associated with GenericSlice
     * @typeParam T - Model of Generic Slice
     * @param {string} apiPath - string containing relative path to web api
     * @returns a new GenericController<T>
     */
    function GenericController(apiPath, defaultSort, ascending) {
        if (ascending === void 0) { ascending = true; }
        var _this = this;
        this.APIPath = "";
        this.APIPath = apiPath;
        this.DefaultSort = defaultSort;
        this.Ascending = ascending;
        var fetch = function (parentID, sortField, ascending) {
            var sort = sortField;
            var asc = ascending;
            sort = sort === undefined ? _this.DefaultSort : sort;
            asc = asc === undefined ? _this.Ascending : asc;
            var handle = _this.GetRecords(asc, sort, parentID !== null && parentID !== void 0 ? parentID : undefined);
            return handle.then(function (d) {
                return $.Deferred().resolve(JSON.parse(d.toString())).promise();
            }).promise(handle);
        };
        var dBAction = function (verb, record) {
            var handle = _this.Action(verb, record);
            return handle;
        };
        var dBSearch = function (filter, sortField, ascending, parentID) {
            var sort = sortField;
            var asc = ascending;
            sort = sort === undefined ? _this.DefaultSort : sort;
            asc = asc === undefined ? _this.Ascending : asc;
            var handle = _this.Search(filter, asc, sort, parentID);
            return handle.then(function (d) {
                return $.Deferred().resolve(JSON.parse(d)).promise();
            }).promise(handle);
        };
        var dBPage = function (filter, sortField, ascending, page, parentID) {
            var sort = sortField;
            var asc = ascending;
            var pg = page !== null && page !== void 0 ? page : 0;
            sort = sort === undefined ? _this.DefaultSort : sort;
            asc = asc === undefined ? _this.Ascending : asc;
            var handle = _this.FetchPage(filter, asc, sort, pg, parentID);
            return handle.done(function (d) { return ({ NumberOfPages: d.NumberOfPages, Data: JSON.parse(d.Data), RecordsPerPage: d.RecordsPerPage, TotalRecords: d.TotalRecords }); });
        };
        this.Fetch = fetch;
        this.DBAction = dBAction;
        this.DBSearch = dBSearch;
        this.PagedSearch = dBPage;
    }
    GenericController.prototype.GetRecords = function (ascending, sortField, parentID) {
        return $.ajax({
            type: "GET",
            url: "".concat(this.APIPath).concat((parentID != null ? '/' + parentID : ''), "/").concat(sortField.toString(), "/").concat((ascending !== null && ascending !== void 0 ? ascending : false) ? '1' : '0'),
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            cache: true,
            async: true
        });
    };
    GenericController.prototype.Action = function (verb, record) {
        var action = '';
        if (verb === 'POST')
            action = 'Add';
        else if (verb === 'DELETE')
            action = 'Delete';
        else if (verb === 'PATCH')
            action = 'Update';
        return $.ajax({
            type: verb,
            url: "".concat(this.APIPath, "/").concat(action),
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            data: JSON.stringify(__assign({}, record)),
            cache: false,
            async: true
        });
    };
    GenericController.prototype.Search = function (filter, ascending, sortField, parentID) {
        return $.ajax({
            type: 'POST',
            url: "".concat(this.APIPath, "/").concat(parentID != null ? "".concat(parentID, "/") : '', "SearchableList"),
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            data: JSON.stringify({ Searches: filter, OrderBy: sortField, Ascending: ascending }),
            cache: false,
            async: true
        });
    };
    GenericController.prototype.FetchPage = function (filter, ascending, sortField, page, parentID) {
        return $.ajax({
            type: 'POST',
            url: "".concat(this.APIPath, "/").concat(parentID != null ? "".concat(parentID, "/") : '', "PagedList/").concat(page),
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            data: JSON.stringify({ Searches: filter, OrderBy: sortField, Ascending: ascending }),
            cache: false,
            async: true
        });
    };
    return GenericController;
}());
exports.default = GenericController;