Skip to content

Commit bcd4e32

Browse files
authored
gpfup-count-files-groups.js: Added snippet to count files in groups.
1 parent b7a1074 commit bcd4e32

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/**
2+
* Gravity Perks // File Upload Pro // Count Files in Groups
3+
* https://gravitywiz.com/documentation/gravity-forms-file-upload-pro/
4+
*
5+
* Instruction Video: https://www.loom.com/share/2328e327125844bebdcabf7c9baaabca
6+
*/
7+
const formId = GFFORMID;
8+
9+
// Map count field IDs to arrays of file upload field IDs
10+
const countMapping = {
11+
5: [1, 3, 4], // Number Field ID 5 counts files from File Upload Field IDs 1, 3, 4
12+
10: [7, 8, 9] // Number Field ID 10 counts files from File Upload Field IDs 7, 8, 9
13+
// Add more mappings as needed: countFieldID: [uploadFieldID1, uploadFieldID2, ...]
14+
};
15+
16+
// Find all GPFUP keys for the form
17+
var gpfupInstances = Object.keys(window).filter(function (key) {
18+
return key.startsWith('GPFUP_' + formId + '_');
19+
});
20+
21+
// Build reverse lookup: uploadFieldID => associated countFieldIDs
22+
const uploadToCountMap = {};
23+
Object.entries(countMapping).forEach(([countFieldID, uploadFieldIDs]) => {
24+
uploadFieldIDs.forEach((uploadFieldID) => {
25+
if (!uploadToCountMap[uploadFieldID]) {
26+
uploadToCountMap[uploadFieldID] = [];
27+
}
28+
uploadToCountMap[uploadFieldID].push(parseInt(countFieldID));
29+
});
30+
});
31+
32+
// Function to update all relevant count fields
33+
function updateCountFields(countFieldIDs = Object.keys(countMapping)) {
34+
countFieldIDs.forEach((countFieldID) => {
35+
const uploadFieldIDs = countMapping[countFieldID];
36+
const total = uploadFieldIDs.reduce((sum, uploadFieldID) => {
37+
const key = 'GPFUP_' + formId + '_' + uploadFieldID;
38+
const store = window[key]?.$store;
39+
return sum + (store ? (store.state.files.length || 0) : 0);
40+
}, 0);
41+
42+
const selector = '#input_' + formId + '_' + countFieldID;
43+
const $field = jQuery(selector);
44+
if ($field.length) {
45+
$field.val(total).change();
46+
}
47+
});
48+
}
49+
50+
if (gpfupInstances.length) {
51+
// Subscribe to relevant GPFUP fields
52+
gpfupInstances.forEach((key) => {
53+
const parts = key.split('_');
54+
const fieldID = parseInt(parts[2]); // GPFUP_formId_fieldId
55+
const store = window[key].$store;
56+
57+
if (uploadToCountMap[fieldID]) {
58+
store.subscribe((mutation, state) => {
59+
if (mutation.type === 'SET_FILES') {
60+
updateCountFields(uploadToCountMap[fieldID]);
61+
}
62+
});
63+
}
64+
});
65+
}
66+
67+
// Initial count on load for all fields
68+
updateCountFields();

0 commit comments

Comments
 (0)