%PDF- %PDF-
Direktori : /data/www_bck/varak.net_bck/stats.varak.net/plugins/Dashboard/vue/src/Dashboard/ |
Current File : //data/www_bck/varak.net_bck/stats.varak.net/plugins/Dashboard/vue/src/Dashboard/Dashboard.store.ts |
/*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ import { computed, readonly, reactive, DeepReadonly, } from 'vue'; import { AjaxHelper } from 'CoreHome'; import { DashboardLayout, Dashboard } from '../types'; interface DashboardStoreState { dashboards: Dashboard[]; } class DashboardStore { private privateState = reactive<DashboardStoreState>({ dashboards: [], }); readonly state = computed(() => readonly(this.privateState)); readonly dashboards = computed(() => this.state.value.dashboards); private dashboardsPromise: Promise<DeepReadonly<Dashboard[]>>|null = null; getDashboard(dashboardId: string|number) { return this.getAllDashboards().then( (dashboards) => dashboards.find( (b) => parseInt(`${b.id}`, 10) === parseInt(`${dashboardId}`, 10), ), ); } getDashboardLayout(dashboardId: string|number): Promise<DashboardLayout> { return AjaxHelper.fetch<DashboardLayout>( { module: 'Dashboard', action: 'getDashboardLayout', idDashboard: dashboardId, }, { withTokenInUrl: true, }, ); } reloadAllDashboards(): ReturnType<DashboardStore['getAllDashboards']> { this.dashboardsPromise = null; return this.getAllDashboards(); } getAllDashboards(): Promise<DeepReadonly<Dashboard[]>> { if (!this.dashboardsPromise) { this.dashboardsPromise = AjaxHelper.fetch<Dashboard[]>({ method: 'Dashboard.getDashboards', filter_limit: '-1', }).then((response) => { if (response) { this.privateState.dashboards = response; } return this.dashboards.value; }); } return this.dashboardsPromise; } } export default new DashboardStore();