import { defineStore } from "pinia"; import loadingStore from './loading.js'; import pinia from '@/stores/main.js' import axios from "axios"; import moment from 'moment'; import {useToast} from 'vue-toast-notification'; import 'vue-toast-notification/dist/theme-sugar.css'; const loading = loadingStore(pinia); const $toast = useToast(); // Delay loading and toast 待模組化 let delay = s => new Promise((resolve, reject) => setTimeout(resolve, s)); export default defineStore('filesStore', { state: () => ({ allFilter: [ { log: {}, fileType: '', ownerName: '', } ], allEventLog: [ { parentLog: '', fileType: '', ownerName: '', } ], switchFilesTagData: { ALL: ['Log', 'Filter', 'Rule', 'Design'], DISCOVER: ['Log', 'Filter', 'Rule'], COMPARE: ['Log','Filter'], DESIGN: ['Log', 'Design'], }, filesTag: 'ALL', httpStatus: 200, }), getters: { /** * Get allFiles and switch files tag */ allFiles: state => { let result = [ ...state.allEventLog, ...state.allFilter ]; let data = state.switchFilesTagData; let filesTag = state.filesTag; result = result.filter(file => data[filesTag].includes(file.fileType)); return result; }, }, actions: { /** * Fetch event logs api */ async fetchEventLog() { const api = '/api/logs'; try { const response = await axios.get(api); this.allEventLog = response.data; this.allEventLog.map(o => { o.icon = 'work_history'; o.parentLog = "-"; o.fileType = "Log"; o.ownerName = o.owner.name; o.updated_at = moment(o.updated_at).utcOffset('+08:00').format('YYYY-MM-DD HH:mm'); o.accessed_at = o.accessed_at ? moment(o.accessed_at).utcOffset('+08:00').format('YYYY-MM-DD HH:mm') : null; return this.allEventLog }) if(this.httpStatus < 300) loading.isLoading = false; } catch(error) { console.dir(error); // safari 測試 this.httpStatus = error.request.status; delay().then(() =>{ loading.isLoading = true; return delay(1000); }).then(()=>{ loading.isLoading = false; return delay(500); }).then(() => { $toast.default('Failed to load the logs.',{position: 'bottom'}); }) }; }, /** * Fetch filters api */ async fetchFilter() { const api = '/api/filters'; try { const response = await axios.get(api); this.allFilter = response.data; this.allFilter.map(o => { o.icon = 'tornado'; o.parentLog = o.log.name; o.fileType = "Filter"; o.ownerName = o.owner.name; o.updated_at = moment(o.updated_at).utcOffset('+08:00').format('YYYY-MM-DD HH:mm'); o.accessed_at = o.accessed_at ? moment(o.accessed_at).utcOffset('+08:00').format('YYYY-MM-DD HH:mm') : null; }); if(this.httpStatus < 300) loading.isLoading = false; } catch(error) { console.dir(error); // safari 測試 this.httpStatus = error.request.status; delay().then(() =>{ loading.isLoading = true; return delay(1000); }).then(()=>{ loading.isLoading = false; return delay(500); }).then(() => { $toast.default('Failed to load the filters.',{position: 'bottom'}); }) }; }, // fetchRule(){o.icon = local_police} // fetchDesign(){o.icon = shape_line} }, })