MCPcopy Create free account
hub / github.com/error311/FileRise / attachPortalFolderPickers

Function attachPortalFolderPickers

public/js/adminPortals.js:1742–1829  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1740// ─────────────────────
1741
1742function attachPortalFolderPickers() {
1743 const body = document.getElementById('clientPortalsBody');
1744 if (!body) return;
1745
1746 body.querySelectorAll('.portal-card').forEach(card => {
1747 const input = card.querySelector('[data-portal-field="folder"]');
1748 const browseBtn = card.querySelector('.portal-folder-browse-btn');
1749 const sourceSelect = card.querySelector('[data-portal-field="sourceId"]');
1750 if (!input) return;
1751
1752 if (input.dataset._portalFolderPickerBound === '1') return;
1753 input.dataset._portalFolderPickerBound = '1';
1754
1755 // Preferred path: if you ever add a central folder picker, use it:
1756 const useNativePicker = typeof window.FileRiseFolderPicker === 'function';
1757
1758 const getSourceId = () => normalizePortalSourceId(sourceSelect ? sourceSelect.value : '') || getPortalSourceFallbackId();
1759
1760 const openPicker = async () => {
1761 const sourceId = getSourceId();
1762 if (useNativePicker) {
1763 try {
1764 const folder = await window.FileRiseFolderPicker({
1765 current: input.value || '',
1766 mode: 'select-folder',
1767 source: 'client-portals',
1768 sourceId
1769 });
1770 if (folder) input.value = folder;
1771 return;
1772 } catch (e) {
1773 console.error('Folder picker error', e);
1774 showToast(t('admin_portal_open_folder_picker_failed'));
1775 return;
1776 }
1777 }
1778
1779 // Fallback: datalist built from /api/folder/getFolderList.php
1780 try {
1781 const safeSourceId = (sourceId || 'local').replace(/[^A-Za-z0-9_-]/g, '') || 'local';
1782 const datalistId = 'portalFolderList-' + safeSourceId;
1783 let datalist = document.getElementById(datalistId);
1784 if (!datalist) {
1785 datalist = document.createElement('datalist');
1786 datalist.id = datalistId;
1787 document.body.appendChild(datalist);
1788
1789 const folders = await loadPortalFolderList(sourceId);
1790 datalist.innerHTML = '';
1791 folders.forEach(f => {
1792 const opt = document.createElement('option');
1793 opt.value = f;
1794 datalist.appendChild(opt);
1795 });
1796 }
1797
1798 input.setAttribute('list', datalistId);
1799 input.focus();

Callers 1

loadClientPortalsListFunction · 0.85

Calls 1

openPickerFunction · 0.85

Tested by

no test coverage detected