BossBey File Manager
PHP:
8.2.30
OS:
Linux
User:
imagivibe
Root
/
home
/
imagivibe
/
www
/
wp-content
/
plugins
/
really-simple-ssl
/
settings
/
src
/
Settings
/
TwoFA
📤 Upload
📝 New File
📁 New Folder
Close
Editing: TwoFaDataTableStore.js
/* Creates A Store For Risk Data using Zustand */ import {create} from 'zustand'; import * as rsssl_api from "../../utils/api"; import {produce} from "immer"; import apiFetch from "@wordpress/api-fetch"; const DynamicDataTableStore = create((set, get) => ({ processing: false, dataLoaded: false, pagination: {}, dataActions: {currentPage:1, currentRowsPerPage:5, filterValue: 'all',filterColumn: 'user_role'}, totalRecords:0, DynamicDataTable: [], setDataLoaded: (dataLoaded) => set((state) => ({ ...state, dataLoaded: dataLoaded })), hardResetUser: async (id) => { if (get().processing) return; set({processing: true}); try { const response = await rsssl_api.doAction( 'two_fa_reset_user', {id} ); if (response) { set(state => ({ ...state, processing: false, })); // Return the response for the calling function to use return response; } } catch (e) { console.log(e); } }, fetchDynamicData: async (role_filter = 'all') => { if (get().processing) return; set({processing: true}); let allData = []; // Will hold all fetched rows let offset = 0; // Start from 0 const limit = 1000; // How many to fetch per request let totalRecords = 0; let negativeCount = 0; try { while (true) { // Clone current dataActions and add pagination params const params = { ...get().dataActions, number: limit, // Tells the server how many rows you want offset: offset, negative_count: negativeCount, ...(role_filter !== 'all' && { role_filter: role_filter }) }; // Make the request const response = await rsssl_api.doAction('two_fa_table', params); // If something went wrong or no data returned, break out if (!response || !response.data) { break; } // Accumulate data allData.push(...response.data); // Grab totalRecords from the response (the server must return it) if (response.totalRecords) { totalRecords = response.totalRecords; negativeCount = response.negative_count; } // If the number of records fetched in this request is less than the limit, // it means there are no more records to fetch. if (response.data.length < limit) { break; } // Otherwise, increment offset to fetch the "next page" offset += limit; } // Once the loop is done, we have all the data in allData set(state => ({ ...state, DynamicDataTable: allData, // Store *all* fetched rows dataLoaded: true, processing: false, totalRecords: totalRecords, // Keep track if you need it })); // Optionally return it if this function is called from elsewhere return { data: allData, totalRecords, }; } catch (e) { console.log(e); set(state => ({ ...state, processing: false, dataLoaded: true, })); } }, handleTableSearch: async (search, searchColumns) => { const typingTimer = setTimeout(async () => { set(produce((state) => { state.dataActions = {...state.dataActions, search, searchColumns}; })); await get().fetchDynamicData(); }, 500); return () => { clearTimeout(typingTimer); }; }, handlePageChange: async (page, pageSize) => { //Add the page and pageSize to the dataActions set(produce((state) => { state.dataActions = {...state.dataActions, currentPage: page}; }) ); await get().fetchDynamicData(); }, handleRowsPerPageChange: async (currentRowsPerPage, currentPage) => { //Add the page and pageSize to the dataActions set(produce((state) => { state.dataActions = {...state.dataActions, currentRowsPerPage, currentPage}; }) ); await get().fetchDynamicData(); }, //this handles all pagination and sorting handleTableSort: (sortColumn, sortDirection) => { set( produce((state) => { // Update sort parameters in dataActions state.dataActions.sortColumn = sortColumn.column; state.dataActions.sortDirection = sortDirection; // Sort the existing DynamicDataTable in place state.DynamicDataTable.sort((a, b) => { const aVal = a[sortColumn.column]; const bVal = b[sortColumn.column]; // Compare the two values. Adjust comparison logic if necessary if (aVal < bVal) { return sortDirection === 'asc' ? -1 : 1; } if (aVal > bVal) { return sortDirection === 'asc' ? 1 : -1; } return 0; }); }) ); }, handleUsersTableFilter: async (column, filterValue) => { //Add the column and sortDirection to the dataActions set(produce((state) => { state.dataActions = {...state.dataActions, filterColumn: column, filterValue}; }) ); // Fetch the data again await get().fetchDynamicData(); }, })); export default DynamicDataTableStore;
Save
Cancel