| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | import { defineStore } from 'pinia';import { ref, computed } from 'vue';export const useWPSStore = defineStore('wps', () => {    const connectionStatus = ref<'connected' | 'disconnected'>('disconnected');    const activeDocument = ref<any>(null);    const documents = ref<any[]>([]);    const paragraphContent = ref<any>({        text: '',        html: '',        revisions: [],        comments: [],        hasRevisions: false,        hasComments: false    });    const hasUnsavedChanges = ref(false);    const autoSync = ref(true);    const isConnected = computed(() => connectionStatus.value === 'connected');    const hasRevisions = computed(() => paragraphContent.value.revisions.length > 0);    const hasComments = computed(() => paragraphContent.value.comments.length > 0);    const canEdit = computed(() => isConnected.value && !!activeDocument.value);    const setupEventListeners = () => {        window.electronAPI.onWPSStatusChange((_event, status) => {            connectionStatus.value = status.connected ? 'connected' : 'disconnected';            documents.value = status.documents || [];            activeDocument.value = status.activeDocument || null;        });        window.electronAPI.onDocumentsListChange((_event, docs) => {            documents.value = docs;        });        window.electronAPI.onActiveDocumentChange((_event, doc) => {            activeDocument.value = doc;            hasUnsavedChanges.value = false;        });        window.electronAPI.onFullParagraphContentChange((_event, content) => {            paragraphContent.value = content;            hasUnsavedChanges.value = false;        });    };    const refreshParagraph = async (): Promise<boolean> => {        if (!isConnected.value) return false;        try {            const content = await window.electronAPI.getFullParagraphContent();            paragraphContent.value = content;            hasUnsavedChanges.value = false;            return true;        } catch (error) {            console.error('Failed to refresh paragraph:', error);            return false;        }    };    const updateParagraph = async (content: string) => {        if (!isConnected.value) return { success: false, error: 'WPS not connected' };        try {            const result = await window.electronAPI.updateParagraphWithRevisions(content);            if (result.success) {                hasUnsavedChanges.value = false;                await refreshParagraph();            }            return result;        } catch (error: any) {            return { success: false, error: error.message };        }    };    const navigateParagraph = async (direction: 'prev' | 'next') => {        if (!isConnected.value) return false;        return await window.electronAPI.navigateParagraph(direction);    };    return {        connectionStatus,        activeDocument,        documents,        paragraphContent,        hasUnsavedChanges,        autoSync,        isConnected,        hasRevisions,        hasComments,        canEdit,        setupEventListeners,        refreshParagraph,        updateParagraph,        navigateParagraph    };});
 |