From a8200b09aaa7a8f1acc46a05b581735a1009af2b Mon Sep 17 00:00:00 2001 From: Saif Sultan Date: Mon, 2 Jun 2025 12:21:28 +0530 Subject: [PATCH 1/3] `gpfup-count-files-groups.js`: Added snippet to count files in groups. --- .../gpfup-count-files-groups.js | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 gp-file-upload-pro/gpfup-count-files-groups.js diff --git a/gp-file-upload-pro/gpfup-count-files-groups.js b/gp-file-upload-pro/gpfup-count-files-groups.js new file mode 100644 index 000000000..0979e784c --- /dev/null +++ b/gp-file-upload-pro/gpfup-count-files-groups.js @@ -0,0 +1,66 @@ +/** + * Gravity Perks // File Upload Pro // Count Files in Groups + * https://gravitywiz.com/documentation/gravity-forms-file-upload-pro/ + * + * Instruction Video: https://www.loom.com/share/2328e327125844bebdcabf7c9baaabca + */ +var formId = GFFORMID; + +// Map count field IDs to arrays of file upload field IDs +var countMapping = { + 5: [1, 3, 4], // Number Field ID 5 counts files from File Upload Field IDs 1, 3, 4 + 10: [7, 8, 9] // Number Field ID 10 counts files from File Upload Field IDs 7, 8, 9 + // Add more mappings if needed +}; + +// Find all GPFUP keys for the form +var gpfupInstances = Object.keys(window).filter(function (key) { + return key.startsWith('GPFUP_' + formId + '_'); +}); + +if (!gpfupInstances.length) { + return; +} + +// Build reverse lookup: uploadFieldID => associated countFieldIDs +var uploadToCountMap = {}; +Object.entries(countMapping).forEach(function ([countFieldID, uploadFieldIDs]) { + uploadFieldIDs.forEach(function (uploadFieldID) { + if (!uploadToCountMap[uploadFieldID]) { + uploadToCountMap[uploadFieldID] = []; + } + uploadToCountMap[uploadFieldID].push(parseInt(countFieldID)); + }); +}); + +// Function to update all relevant count fields +function updateAllCountFields() { + Object.entries(countMapping).forEach(function ([countFieldID, uploadFieldIDs]) { + var total = uploadFieldIDs.reduce(function (sum, uploadFieldID) { + var key = 'GPFUP_' + formId + '_' + uploadFieldID; + var store = window[key] && window[key].$store; + return sum + (store ? (store.state.files.length || 0) : 0); + }, 0); + + var selector = '#input_' + formId + '_' + countFieldID; + jQuery(selector).val(total).change(); + }); +} + +// Subscribe to relevant GPFUP fields +gpfupInstances.forEach(function (key) { + var parts = key.split('_'); + var fieldID = parseInt(parts[2]); // GPFUP_formId_fieldId + var store = window[key].$store; + + if (uploadToCountMap[fieldID]) { + store.subscribe(function (mutation, state) { + if (mutation.type === 'SET_FILES') { + updateAllCountFields(); + } + }); + } +}); + +// Initial count on load +updateAllCountFields(); From 68c80f2ce431b2d46c7eb68fe54cc5912b649cca Mon Sep 17 00:00:00 2001 From: Saif Sultan Date: Mon, 2 Jun 2025 12:39:59 +0530 Subject: [PATCH 2/3] `gpfup-count-files-groups.js`: Added snippet to count files in groups. `gpfup-count-files-groups.js`: Added snippet to count files in groups. `gpfup-count-files-groups.js`: Added snippet to count files in groups. --- .../gpfup-count-files-groups.js | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/gp-file-upload-pro/gpfup-count-files-groups.js b/gp-file-upload-pro/gpfup-count-files-groups.js index 0979e784c..b8179f3cd 100644 --- a/gp-file-upload-pro/gpfup-count-files-groups.js +++ b/gp-file-upload-pro/gpfup-count-files-groups.js @@ -4,13 +4,13 @@ * * Instruction Video: https://www.loom.com/share/2328e327125844bebdcabf7c9baaabca */ -var formId = GFFORMID; +const formId = GFFORMID; // Map count field IDs to arrays of file upload field IDs -var countMapping = { +const countMapping = { 5: [1, 3, 4], // Number Field ID 5 counts files from File Upload Field IDs 1, 3, 4 10: [7, 8, 9] // Number Field ID 10 counts files from File Upload Field IDs 7, 8, 9 - // Add more mappings if needed + // Add more mappings as needed: countFieldID: [uploadFieldID1, uploadFieldID2, ...] }; // Find all GPFUP keys for the form @@ -18,14 +18,10 @@ var gpfupInstances = Object.keys(window).filter(function (key) { return key.startsWith('GPFUP_' + formId + '_'); }); -if (!gpfupInstances.length) { - return; -} - // Build reverse lookup: uploadFieldID => associated countFieldIDs -var uploadToCountMap = {}; -Object.entries(countMapping).forEach(function ([countFieldID, uploadFieldIDs]) { - uploadFieldIDs.forEach(function (uploadFieldID) { +const uploadToCountMap = {}; +Object.entries(countMapping).forEach(([countFieldID, uploadFieldIDs]) => { + uploadFieldIDs.forEach((uploadFieldID) => { if (!uploadToCountMap[uploadFieldID]) { uploadToCountMap[uploadFieldID] = []; } @@ -35,32 +31,37 @@ Object.entries(countMapping).forEach(function ([countFieldID, uploadFieldIDs]) { // Function to update all relevant count fields function updateAllCountFields() { - Object.entries(countMapping).forEach(function ([countFieldID, uploadFieldIDs]) { - var total = uploadFieldIDs.reduce(function (sum, uploadFieldID) { - var key = 'GPFUP_' + formId + '_' + uploadFieldID; - var store = window[key] && window[key].$store; + Object.entries(countMapping).forEach(([countFieldID, uploadFieldIDs]) => { + const total = uploadFieldIDs.reduce((sum, uploadFieldID) => { + const key = 'GPFUP_' + formId + '_' + uploadFieldID; + const store = window[key]?.$store; return sum + (store ? (store.state.files.length || 0) : 0); }, 0); - var selector = '#input_' + formId + '_' + countFieldID; - jQuery(selector).val(total).change(); + const selector = '#input_' + formId + '_' + countFieldID; + const $field = jQuery(selector); + if ($field.length) { + $field.val(total).change(); + } }); } -// Subscribe to relevant GPFUP fields -gpfupInstances.forEach(function (key) { - var parts = key.split('_'); - var fieldID = parseInt(parts[2]); // GPFUP_formId_fieldId - var store = window[key].$store; +if (gpfupInstances.length) { + // Subscribe to relevant GPFUP fields + gpfupInstances.forEach((key) => { + const parts = key.split('_'); + const fieldID = parseInt(parts[2]); // GPFUP_formId_fieldId + const store = window[key].$store; - if (uploadToCountMap[fieldID]) { - store.subscribe(function (mutation, state) { - if (mutation.type === 'SET_FILES') { - updateAllCountFields(); - } - }); - } -}); + if (uploadToCountMap[fieldID]) { + store.subscribe((mutation, state) => { + if (mutation.type === 'SET_FILES') { + updateAllCountFields(); + } + }); + } + }); +} // Initial count on load updateAllCountFields(); From 5e0203785c9e76c8399ae319837df076f3ed2afd Mon Sep 17 00:00:00 2001 From: Saif Sultan Date: Fri, 13 Jun 2025 22:33:56 +0530 Subject: [PATCH 3/3] `gpfup-count-files-groups.js`: Added snippet to count files in groups. --- gp-file-upload-pro/gpfup-count-files-groups.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/gp-file-upload-pro/gpfup-count-files-groups.js b/gp-file-upload-pro/gpfup-count-files-groups.js index b8179f3cd..2073c58d0 100644 --- a/gp-file-upload-pro/gpfup-count-files-groups.js +++ b/gp-file-upload-pro/gpfup-count-files-groups.js @@ -30,8 +30,9 @@ Object.entries(countMapping).forEach(([countFieldID, uploadFieldIDs]) => { }); // Function to update all relevant count fields -function updateAllCountFields() { - Object.entries(countMapping).forEach(([countFieldID, uploadFieldIDs]) => { +function updateCountFields(countFieldIDs = Object.keys(countMapping)) { + countFieldIDs.forEach((countFieldID) => { + const uploadFieldIDs = countMapping[countFieldID]; const total = uploadFieldIDs.reduce((sum, uploadFieldID) => { const key = 'GPFUP_' + formId + '_' + uploadFieldID; const store = window[key]?.$store; @@ -56,12 +57,12 @@ if (gpfupInstances.length) { if (uploadToCountMap[fieldID]) { store.subscribe((mutation, state) => { if (mutation.type === 'SET_FILES') { - updateAllCountFields(); + updateCountFields(uploadToCountMap[fieldID]); } }); } }); } -// Initial count on load -updateAllCountFields(); +// Initial count on load for all fields +updateCountFields();