PluginProbe
The Innovative Form Builder – IvyForms / 0.3
The Innovative Form Builder – IvyForms v0.3
1.5.1 1.5 1.4.1 1.4 trunk 0.1.2 0.2 0.2.1 0.3 0.3.1 0.4 0.5 0.6 0.6.1 0.6.1-backup 0.6.1.1 0.7 0.8 0.8.1 0.8.2 0.9 0.9.1 1.0 1.1 1.1.1 All 27 releases
ivyforms / frontend / src / stores / useAllEntries.ts

useAllEntries.ts in The Innovative Form Builder – IvyForms 0.3, at frontend/src/stores/useAllEntries.ts

182 lines 4.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { defineStore } from 'pinia'
2 import { ref } from 'vue'
3 import { useLabels } from '@/composables/useLabels'
4 import IvyMessage from '@/views/_components/message/ivyMessage.ts'
5 import { useApiClient } from '@/composables/useApiClient.ts'
6
7 export const useAllEntries = defineStore('allEntries', () => {
8 const tableData = ref([])
9 const entryFields = ref([])
10 const paginationMeta = ref({
11 page: 1,
12 perPage: 10,
13 total: 0,
14 })
15 const filterCount = ref({
16 readTrueCount: 0,
17 readFalseCount: 0,
18 starredTrueCount: 0,
19 starredFalseCount: 0,
20 })
21
22 const { getLabel } = useLabels()
23 const { request } = useApiClient()
24 const fetchData = async ({
25 page = 1,
26 perPage = 10,
27 search = '',
28 sortBy = '',
29 sortOrder = 'desc',
30 dateRange = [],
31 filters = {},
32 shouldGetCount = true,
33 formId = null,
34 searchFieldValue = false,
35 }: {
36 page?: number
37 perPage?: number
38 search?: string
39 sortBy?: string
40 sortOrder?: string
41 dateRange?: Array<string>
42 filters?: Record<string, string | number | null>
43 shouldGetCount?: boolean
44 formId?: number | null
45 searchFieldValue?: boolean
46 } = {}) => {
47 try {
48 // Always include formId in filters if present
49 const mergedFilters = { ...filters }
50 if (formId !== null && formId !== undefined) {
51 mergedFilters.formId = formId
52 }
53 const params: Record<
54 string,
55 string | number | boolean | null | string[] | Record<string, string | number>
56 > = {
57 page,
58 perPage,
59 search,
60 orderBy: sortBy,
61 order: sortOrder,
62 dateRange,
63 filters: mergedFilters,
64 shouldGetCount,
65 searchFieldValue,
66 }
67 const { data, error } = await request('entries/search', {
68 method: 'GET',
69 params,
70 })
71 if (error) {
72 IvyMessage({
73 message: `${getLabel('error_fetching_entries')} ${error}`,
74 type: 'error',
75 })
76 return
77 }
78
79 const response = data.data
80 tableData.value = response.data.data
81 paginationMeta.value = response.data.meta
82 if (shouldGetCount) {
83 filterCount.value = response.data.filterCount
84 }
85 entryFields.value = response.data.entryFields
86 } catch (error) {
87 IvyMessage({
88 message: `${getLabel('error_fetching_entries')} ${error}`,
89 type: 'error',
90 })
91 }
92 }
93
94 const updateStarred = async (id: number, starred: boolean) => {
95 try {
96 const { data, error, status } = await request(`entry/update/starred/${id}/`, {
97 method: 'POST',
98 data: {
99 attribute: 'starred',
100 value: starred,
101 },
102 })
103
104 if (error || status >= 400) {
105 IvyMessage({
106 message: starred
107 ? `${getLabel('failed_to_star_entry')} ${data?.message || error}`
108 : `${getLabel('failed_to_unstar_entry')} ${data?.message || error}`,
109 type: 'error',
110 })
111 } else {
112 IvyMessage({
113 message: starred ? getLabel('entry_starred') : getLabel('entry_unstarred'),
114 type: 'success',
115 })
116 }
117 } catch (error) {
118 IvyMessage({
119 message: starred
120 ? `${getLabel('failed_to_star_entry')} ${error}`
121 : `${getLabel('failed_to_unstar_entry')} ${error}`,
122 type: 'error',
123 })
124 }
125 }
126
127 const updateStatus = async (id: number, status: string) => {
128 try {
129 const {
130 data,
131 error,
132 status: httpStatus,
133 } = await request(`entry/update/status/${id}/`, {
134 method: 'POST',
135 data: {
136 value: status,
137 },
138 })
139
140 if (error || httpStatus >= 400) {
141 IvyMessage({
142 message: `${getLabel('failed_to_update_entry_status')} ${data?.message || error}`,
143 type: 'error',
144 })
145 } else {
146 IvyMessage({
147 message: status === 'read' ? getLabel('entry_read') : getLabel('entry_unread'),
148 type: 'success',
149 })
150 }
151 } catch (error) {
152 IvyMessage({
153 message: `${getLabel('failed_to_update_entry_status')} ${error}`,
154 type: 'error',
155 })
156 }
157 }
158
159 const reset = () => {
160 tableData.value = []
161 entryFields.value = []
162 paginationMeta.value = { page: 1, perPage: 10, total: 0 }
163 filterCount.value = {
164 readTrueCount: 0,
165 readFalseCount: 0,
166 starredTrueCount: 0,
167 starredFalseCount: 0,
168 }
169 }
170
171 return {
172 tableData,
173 paginationMeta,
174 filterCount,
175 entryFields,
176 fetchData,
177 updateStarred,
178 updateStatus,
179 reset,
180 }
181 })
182