Server IP : 192.158.238.246 / Your IP : 3.22.217.190 Web Server : LiteSpeed System : Linux uniform.iwebfusion.net 4.18.0-553.27.1.lve.1.el8.x86_64 #1 SMP Wed Nov 20 15:58:00 UTC 2024 x86_64 User : jenniferflocom ( 1321) PHP Version : 8.1.32 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/thread-self/root/home/jenniferflocom/www/wp-content/plugins/give/src/Log/Admin/Logs/ |
Upload File : |
import {useState} from 'react'; import { Card, Label, Notice, Spinner, Pagination, Select, Table, Button, PeriodSelector, Modal, } from '@givewp/components'; import API, {useLogFetcher, getEndpoint} from './api'; import styles from './styles.module.scss'; import {__} from '@wordpress/i18n'; const Logs = () => { const [state, setState] = useState({ initialLoad: false, currentPage: 1, currentStatus: '', // log type currentSource: '', currentCategory: '', sortColumn: '', sortDirection: '', startDate: null, endDate: null, pages: 0, statuses: [], sources: [], categories: [], isSorting: false, }); const [logModal, setLogModal] = useState({ visible: false, }); const [logFlushModal, setLogFlushModal] = useState({ visible: false, }); const parameters = { page: state.currentPage, sort: state.sortColumn, direction: state.sortDirection, type: state.currentStatus, source: state.currentSource, category: state.currentCategory, start: state.startDate ? state.startDate.format('YYYY-MM-DD') : '', end: state.endDate ? state.endDate.format('YYYY-MM-DD') : '', }; const {data, isLoading, isError} = useLogFetcher(getEndpoint('/get-logs', parameters), { onSuccess: ({response}) => { setState((previousState) => { return { ...previousState, initialLoad: true, pages: response.pages, statuses: response.statuses, categories: response.categories, sources: response.sources, currentPage: state.currentPage > response.pages ? 1 : state.currentPage, isSorting: false, }; }); }, }); const openLogModal = (log) => { setLogModal({ visible: true, id: log.id, type: log.log_type, category: log.category, source: log.source, description: log.description, date: log.date, message: log.message, context: JSON.stringify(log.context, null, ' '), }); }; const closeLogModal = () => { setLogModal({visible: false}); }; const openLogFlushModal = (e) => { e.preventDefault(); setLogFlushModal({visible: true}); }; const closeLogFlushModal = () => { setLogFlushModal({visible: false}); }; const flushLogs = () => { setLogFlushModal({ visible: true, flushing: true, }); API.delete('/flush-logs') .then(() => { window.location.reload(); }) .catch(() => { setLogFlushModal((previousState) => { return { ...previousState, type: 'error', error: true, }; }); }); }; const setSortDirectionForColumn = (column, direction) => { setState((previousState) => { return { ...previousState, sortColumn: column, sortDirection: direction, isSorting: true, }; }); }; const setCurrentPage = (currentPage) => { setState((previousState) => { return { ...previousState, currentPage, }; }); }; const setCurrentCategory = (e) => { const category = e.target.value; setState((previousState) => { return { ...previousState, currentCategory: category, }; }); }; const setCurrentStatus = (e) => { const status = e.target.value; setState((previousState) => { return { ...previousState, currentStatus: status, }; }); }; const setCurrentSource = (e) => { const source = e.target.value; setState((previousState) => { return { ...previousState, currentSource: source, }; }); }; const setDates = (startDate, endDate) => { setState((previousState) => { return { ...previousState, startDate, endDate, }; }); }; const getCategories = () => { const defaultCategory = { value: '', label: __('All categories', 'give'), }; const categories = Object.values(state.categories).map((label) => { return { label, value: label, }; }); return [defaultCategory, ...categories]; }; const getStatuses = () => { const defaultStatus = { value: '', label: __('All statuses', 'give'), }; const statuses = Object.entries(state.statuses).map(([value, label]) => { return { label, value, }; }); return [defaultStatus, ...statuses]; }; const getSources = () => { const defaultSource = { value: '', label: __('All sources', 'give'), }; const sources = Object.values(state.sources).map((label) => { return { label, value: label, }; }); return [defaultSource, ...sources]; }; const getLogModal = () => { return ( <Modal visible={logModal.visible} type={logModal.type} handleClose={closeLogModal} data-givewp-test="log-modal" > <Modal.Title> <Label type={logModal.type} text={getLogTypeText(logModal.type)} /> <strong style={{marginLeft: 20}}> {__('Log ID', 'give')}: {logModal.id} </strong> <Modal.CloseIcon onClick={closeLogModal} data-givewp-test="log-modal-close" /> </Modal.Title> <Modal.Section title={__('Description', 'give')} content={logModal.message} /> <Modal.Section title={__('Category', 'give')} content={logModal.category} /> <Modal.Section title={__('Source', 'give')} content={logModal.source} /> <Modal.Section title={__('Date & Time', 'give')} content={logModal.date} /> <Modal.AdditionalContext type={logModal.type} context={logModal.context} /> </Modal> ); }; const getLogFlushConfirmationModal = () => { return ( <Modal visible={logFlushModal.visible} type={logFlushModal.type} handleClose={closeLogFlushModal}> {logFlushModal.flushing ? ( <Modal.Content align="center"> {logFlushModal.error ? ( <> <h2>{__('Something went wrong!', 'give')}</h2> <div> Try to{' '} <a onClick={() => window.location.reload()} href="#"> reload </a>{' '} the browser </div> </> ) : ( <> <Spinner /> <div style={{marginTop: 20}}>{__('Flushing logs', 'give')}</div> </> )} </Modal.Content> ) : ( <> <Modal.Title>{__('Flush all logs', 'give')}</Modal.Title> <Modal.Content>{__('Do you want to flush all logs?', 'give')}</Modal.Content> <Modal.Content> <button style={{marginRight: 20}} className="button button-primary" onClick={flushLogs} data-givewp-test="flush-logs-confirm-btn" > {__('Confirm', 'give')} </button> <button className="button" onClick={closeLogFlushModal}> {__('Cancel', 'give')} </button> </Modal.Content> </> )} </Modal> ); }; const getLogTypeText = (type) => { if (type in window.GiveLogs.logTypes) { return window.GiveLogs.logTypes[type]; } return type; }; const resetQueryParameters = (e) => { e.preventDefault(); // Reset table sort state Table.resetSortState(); setState((previousState) => { return { ...previousState, currentPage: 1, currentStatus: '', currentSource: '', currentCategory: '', sortColumn: '', sortDirection: '', startDate: null, endDate: null, }; }); }; const columns = [ { key: 'log_type', label: __('Status', 'give'), sort: true, sortCallback: (direction) => setSortDirectionForColumn('log_type', direction), }, { key: 'category', label: __('Category', 'give'), sort: true, sortCallback: (direction) => setSortDirectionForColumn('category', direction), }, { key: 'source', label: __('Source', 'give'), sort: true, sortCallback: (direction) => setSortDirectionForColumn('source', direction), }, { key: 'date', label: __('Date/Time', 'give'), sort: true, sortCallback: (direction) => setSortDirectionForColumn('date', direction), }, { key: 'message', label: __('Description', 'give'), }, { key: 'details', label: __('Details', 'give'), append: true, styles: { maxWidth: 100, textAlign: 'center', justifyContent: 'center', }, }, ]; const columnFilters = { log_type: (type) => <Label type={type} text={getLogTypeText(type)} />, details: (value, log) => { return ( <Button data-givewp-test="view-log" onClick={(e) => { e.preventDefault(); openLogModal(log); }} icon={true} > <span className="dashicons dashicons-visibility" /> </Button> ); }, }; // Initial load if (!state.initialLoad && isLoading) { return ( <Notice> <Spinner /> <h2>{__('Loading log activity', 'give')}</h2> </Notice> ); } // Is error? if (isError) { return ( <Notice> <h2>{__('Something went wrong!', 'give')}</h2> <div> Try to{' '} <a onClick={() => window.location.reload()} href="#"> reload </a>{' '} the browser </div> </Notice> ); } return ( <> <div className={styles.headerRow}> <Select options={getStatuses()} onChange={setCurrentStatus} defaultValue={state.currentStatus} className={styles.headerItem} data-givewp-test="logs-status-dropdown" /> <Select options={getCategories()} onChange={setCurrentCategory} defaultValue={state.currentCategory} className={styles.headerItem} data-givewp-test="logs-category-dropdown" /> <Select options={getSources()} onChange={setCurrentSource} defaultValue={state.currentSource} className={styles.headerItem} data-givewp-test="logs-source-dropdown" /> <PeriodSelector period={{ startDate: state.startDate, endDate: state.endDate, }} setDates={setDates} /> <Button onClick={resetQueryParameters}>{__('Reset', 'give')}</Button> <div className={styles.pagination}> <Pagination currentPage={state.currentPage} setPage={setCurrentPage} totalPages={state.pages} disabled={isLoading} /> </div> </div> <Card> <Table columns={columns} data={data} columnFilters={columnFilters} isLoading={isLoading} isSorting={state.isSorting} stripped={false} data-givewp-test="logs-table" /> </Card> <div className={styles.footerRow}> {data && data.length > 0 && ( <button className="button" onClick={openLogFlushModal} data-givewp-test="flush-logs-btn"> {__('Flush all logs', 'give')} </button> )} <div className={styles.pagination}> <Pagination currentPage={state.currentPage} setPage={setCurrentPage} totalPages={state.pages} disabled={isLoading} /> </div> </div> {logModal.visible && getLogModal()} {logFlushModal.visible && getLogFlushConfirmationModal()} </> ); }; export default Logs;