MDL-68506 core_table: Add a tableContentRefreshed event
[moodle.git] / lib / table / amd / build / dynamic.min.js.map
1 {"version":3,"sources":["../src/dynamic.js"],"names":["watching","checkTableIsDynamic","tableRoot","Error","matches","Selectors","main","region","getFiltersetFromTable","JSON","parse","dataset","tableFilters","refreshTableContent","filterset","tableComponent","tableHandler","tableUniqueid","sortBy","tableSortBy","sortOrder","tableSortOrder","joinType","jointype","filters","firstinitial","tableFirstInitial","lastinitial","tableLastInitial","pageNumber","tablePageNumber","pageSize","tablePageSize","then","data","placeholder","document","createElement","innerHTML","html","replaceWith","childNodes","getTableFromId","dispatchEvent","CustomEvent","Events","tableContentRefreshed","bubbles","updateTable","firstInitial","lastInitial","refreshContent","stringify","Promise","resolve","setFilters","setSortOrder","setPageNumber","setPageSize","setFirstInitial","setLastInitial","init","addEventListener","e","target","closest","sortableLink","table","links","sortableColumn","preventDefault","sortby","sortorder","firstInitialLink","initialsBar","initial","lastInitialLink","pageItem","paginationBar","tableRegionId","querySelector","fromRegionId"],"mappings":"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","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Module to handle dynamic table features.\n *\n * @module     core_table/dynamic\n * @package    core_table\n * @copyright  2020 Simey Lameze <simey@moodle.com>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport {fetch as fetchTableData} from 'core_table/local/dynamic/repository';\nimport * as Selectors from 'core_table/local/dynamic/selectors';\nimport Events from './local/dynamic/events';\n\nlet watching = false;\n\n/**\n * Ensure that a table is a dynamic table.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Bool}\n */\nconst checkTableIsDynamic = tableRoot => {\n    if (!tableRoot) {\n        // The table is not a dynamic table.\n        throw new Error(\"The table specified is not a dynamic table and cannot be updated\");\n    }\n\n    if (!tableRoot.matches(Selectors.main.region)) {\n        // The table is not a dynamic table.\n        throw new Error(\"The table specified is not a dynamic table and cannot be updated\");\n    }\n\n    return true;\n};\n\n/**\n * Get the filterset data from a known dynamic table.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Object}\n */\nconst getFiltersetFromTable = tableRoot => {\n    return JSON.parse(tableRoot.dataset.tableFilters);\n};\n\n/**\n * Update the specified table based on its current values.\n *\n * @param {HTMLElement} tableRoot\n * @returns {Promise}\n */\nexport const refreshTableContent = tableRoot => {\n    const filterset = getFiltersetFromTable(tableRoot);\n\n    return fetchTableData(\n        tableRoot.dataset.tableComponent,\n        tableRoot.dataset.tableHandler,\n        tableRoot.dataset.tableUniqueid,\n        {\n            sortBy: tableRoot.dataset.tableSortBy,\n            sortOrder: tableRoot.dataset.tableSortOrder,\n            joinType: filterset.jointype,\n            filters: filterset.filters,\n            firstinitial: tableRoot.dataset.tableFirstInitial,\n            lastinitial: tableRoot.dataset.tableLastInitial,\n            pageNumber: tableRoot.dataset.tablePageNumber,\n            pageSize: tableRoot.dataset.tablePageSize,\n        }\n    )\n    .then(data => {\n        const placeholder = document.createElement('div');\n        placeholder.innerHTML = data.html;\n        tableRoot.replaceWith(...placeholder.childNodes);\n\n        // Update the tableRoot.\n        return getTableFromId(tableRoot.dataset.tableUniqueid);\n    }).then(tableRoot => {\n        tableRoot.dispatchEvent(new CustomEvent(Events.tableContentRefreshed, {\n            bubbles: true,\n        }));\n\n        return tableRoot;\n    });\n};\n\nexport const updateTable = (tableRoot, {\n    sortBy = null,\n    sortOrder = null,\n    filters = null,\n    firstInitial = null,\n    lastInitial = null,\n    pageNumber = null,\n    pageSize = null,\n} = {}, refreshContent = true) => {\n    checkTableIsDynamic(tableRoot);\n\n    // Update sort fields.\n    if (sortBy && sortOrder) {\n        tableRoot.dataset.tableSortBy = sortBy;\n        tableRoot.dataset.tableSortOrder = sortOrder;\n    }\n\n    // Update initials.\n    if (firstInitial !== null) {\n        tableRoot.dataset.tableFirstInitial = firstInitial;\n    }\n\n    if (lastInitial !== null) {\n        tableRoot.dataset.tableLastInitial = lastInitial;\n    }\n\n    if (pageNumber !== null) {\n        tableRoot.dataset.tablePageNumber = pageNumber;\n    }\n\n    if (pageSize !== null) {\n        tableRoot.dataset.tablePageSize = pageSize;\n    }\n\n    // Update filters.\n    if (filters) {\n        tableRoot.dataset.tableFilters = JSON.stringify(filters);\n    }\n\n    // Refresh.\n    if (refreshContent) {\n        return refreshTableContent(tableRoot);\n    } else {\n        return Promise.resolve(tableRoot);\n    }\n};\n\n/**\n * Update the specified table using the new filters.\n *\n * @param {HTMLElement} tableRoot\n * @param {Object} filters\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setFilters = (tableRoot, filters, refreshContent = true) =>\n    updateTable(tableRoot, {filters}, refreshContent);\n\n/**\n * Update the sort order.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} sortBy\n * @param {Number} sortOrder\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setSortOrder = (tableRoot, sortBy, sortOrder, refreshContent = true) =>\n    updateTable(tableRoot, {sortBy, sortOrder}, refreshContent);\n\n/**\n * Set the page number.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} pageNumber\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setPageNumber = (tableRoot, pageNumber, refreshContent = true) =>\n    updateTable(tableRoot, {pageNumber}, refreshContent);\n\n/**\n * Set the page size.\n *\n * @param {HTMLElement} tableRoot\n * @param {Number} pageSize\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setPageSize = (tableRoot, pageSize, refreshContent = true) =>\n    updateTable(tableRoot, {pageSize, pageNumber: 0}, refreshContent);\n\n/**\n * Update the first initial to show.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} firstInitial\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setFirstInitial = (tableRoot, firstInitial, refreshContent = true) =>\n    updateTable(tableRoot, {firstInitial}, refreshContent);\n\n/**\n * Update the last initial to show.\n *\n * @param {HTMLElement} tableRoot\n * @param {String} lastInitial\n * @param {Bool} refreshContent\n * @returns {Promise}\n */\nexport const setLastInitial = (tableRoot, lastInitial, refreshContent = true) =>\n    updateTable(tableRoot, {lastInitial}, refreshContent);\n\n/**\n * Set up listeners to handle table updates.\n */\nexport const init = () => {\n    if (watching) {\n        // Already watching.\n        return;\n    }\n    watching = true;\n\n    document.addEventListener('click', e => {\n        const tableRoot = e.target.closest(Selectors.main.region);\n\n        if (!tableRoot) {\n            return;\n        }\n\n        const sortableLink = e.target.closest(Selectors.table.links.sortableColumn);\n        if (sortableLink) {\n            e.preventDefault();\n\n            setSortOrder(tableRoot, sortableLink.dataset.sortby, sortableLink.dataset.sortorder);\n        }\n\n        const firstInitialLink = e.target.closest(Selectors.initialsBar.links.firstInitial);\n        if (firstInitialLink !== null) {\n            e.preventDefault();\n\n            setFirstInitial(tableRoot, firstInitialLink.dataset.initial);\n        }\n\n        const lastInitialLink = e.target.closest(Selectors.initialsBar.links.lastInitial);\n        if (lastInitialLink !== null) {\n            e.preventDefault();\n\n            setLastInitial(tableRoot, lastInitialLink.dataset.initial);\n        }\n\n        const pageItem = e.target.closest(Selectors.paginationBar.links.pageItem);\n        if (pageItem) {\n            e.preventDefault();\n\n            setPageNumber(tableRoot, pageItem.dataset.pageNumber);\n        }\n    });\n};\n\n/**\n * Fetch the table via its table region id.\n *\n * @param {String} tableRegionId\n * @returns {HTMLElement}\n */\nexport const getTableFromId = tableRegionId => {\n    const tableRoot = document.querySelector(Selectors.main.fromRegionId(tableRegionId));\n\n\n    if (!tableRoot) {\n        // The table is not a dynamic table.\n        throw new Error(\"The table specified is not a dynamic table and cannot be updated\");\n    }\n\n    return tableRoot;\n};\n\nexport {\n    Events\n};\n"],"file":"dynamic.min.js"}