-
-
-
+
+
+
@@ -1811,7 +1808,7 @@
document.getElementById('noteType').value = 'personal';
document.getElementById('jobNumber').value = '';
document.getElementById('jobNumberContainer').classList.add('hidden');
- document.getElementById('userSearchInput').value = '';
+ document.getElementById('shareNoteInput').value = '';
selectedUsers = [];
renderSelectedUsers();
clearAudio();
@@ -1886,24 +1883,30 @@
.map(iconBtnHtml)
.join('');
- // Create type indicator badge with matching card background colors
- const typeColorMap = {
- personal: { bg: 'bg-amber-200', border: 'border-amber-400', text: 'text-amber-900' },
- manager: { bg: 'bg-orange-300', border: 'border-orange-500', text: 'text-orange-900' },
- job: { bg: 'bg-pink-300', border: 'border-pink-500', text: 'text-pink-900' },
- };
- const typeColor = typeColorMap[type] || { bg: 'bg-gray-200', border: 'border-gray-400', text: 'text-gray-900' };
- const typeBadge = `
${escapeHtml(type)}`;
+ // Only create type indicator badge for shared notes
+ let typeBadge = '';
+ if (note.shared) {
+ const typeColorMap = {
+ personal: { bg: 'bg-amber-200', border: 'border-amber-400', text: 'text-amber-900' },
+ manager: { bg: 'bg-orange-300', border: 'border-orange-500', text: 'text-orange-900' },
+ job: { bg: 'bg-pink-300', border: 'border-pink-500', text: 'text-pink-900' },
+ };
+ const typeColor = typeColorMap[type] || { bg: 'bg-gray-200', border: 'border-gray-400', text: 'text-gray-900' };
+ typeBadge = `
${escapeHtml(type)}`;
+ }
card.innerHTML = `
${escapeHtml(title)}
${formatDateShort(note.created)}
-
${escapeHtml(snippet || '(empty)')}
-
-
${attachmentIcons}
- ${typeBadge}
+
${escapeHtml(snippet || '(empty)')}
+
+
${escapeHtml(meta)}
+
+ ${attachmentIcons}
+ ${typeBadge}
+
`;
frag.appendChild(card);
@@ -2541,97 +2544,45 @@
});
// --- Share Note Logic ---
- let selectedUsers = []; // { id, displayName, firstName }
- const userSearchInput = document.getElementById('userSearchInput');
- const userSuggestions = document.getElementById('userSuggestions');
+ let selectedUsers = []; // { name }
+ const shareNoteInput = document.getElementById('shareNoteInput');
const selectedUsersContainer = document.getElementById('selectedUsersContainer');
- userSearchInput.addEventListener('input', async (e) => {
- const query = e.target.value.trim().toLowerCase();
- userSuggestions.innerHTML = '';
+ shareNoteInput.addEventListener('input', (e) => {
+ const input = e.target.value;
+ const names = input.split(',')
+ .map(name => name.trim())
+ .filter(name => name.length > 0);
- if (!query) {
- userSuggestions.classList.add('hidden');
- return;
- }
-
- try {
- const allUsers = await pb.collection('users').getFullList({
- sort: 'displayName'
- });
-
- const matching = allUsers.filter(u =>
- u.displayName?.toLowerCase().includes(query) ||
- u.firstName?.toLowerCase().includes(query) ||
- u.email?.toLowerCase().includes(query)
- ).filter(u => !selectedUsers.find(su => su.id === u.id));
-
- if (matching.length === 0) {
- userSuggestions.innerHTML = '
No users found
';
- } else {
- matching.forEach(user => {
- const option = document.createElement('button');
- option.type = 'button';
- option.className = 'w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 transition';
- option.innerHTML = `
${escapeHtml(user.displayName || user.email)}
${escapeHtml(user.email)}
`;
- option.addEventListener('click', (ev) => {
- ev.preventDefault();
- selectUser(user);
- userSearchInput.value = '';
- userSuggestions.classList.add('hidden');
- });
- userSuggestions.appendChild(option);
- });
- }
- userSuggestions.classList.remove('hidden');
- } catch (err) {
- console.error('Failed to load users:', err);
- userSuggestions.innerHTML = '
Failed to load users
';
- }
+ selectedUsers = names.map(name => ({
+ name: name,
+ firstName: name.split(' ')[0]
+ }));
+
+ renderSelectedUsers();
});
- function selectUser(user) {
- if (selectedUsers.find(u => u.id === user.id)) return;
-
- selectedUsers.push({
- id: user.id,
- displayName: user.displayName || user.email,
- firstName: user.firstName || (user.displayName?.split(' ')[0] || 'User')
- });
-
- renderSelectedUsers();
- }
-
- function removeUser(userId) {
- selectedUsers = selectedUsers.filter(u => u.id !== userId);
- renderSelectedUsers();
- }
-
function renderSelectedUsers() {
selectedUsersContainer.innerHTML = '';
- selectedUsers.forEach(user => {
+ selectedUsers.forEach((user, index) => {
const capsule = document.createElement('div');
capsule.className = 'inline-flex items-center gap-2 px-3 py-1 rounded-full bg-green-100 border border-green-300 text-sm text-gray-800';
capsule.innerHTML = `
${escapeHtml(user.firstName)}
-
+
`;
const removeBtn = capsule.querySelector('[data-remove-user]');
removeBtn.addEventListener('click', (e) => {
e.preventDefault();
- removeUser(user.id);
+ selectedUsers = selectedUsers.filter((_, i) => i !== index);
+ const remaining = selectedUsers.map(u => u.name).join(', ');
+ shareNoteInput.value = remaining;
+ renderSelectedUsers();
});
selectedUsersContainer.appendChild(capsule);
});
}
- // Close suggestions when clicking outside
- document.addEventListener('click', (e) => {
- if (!e.target.closest('#userSearchInput') && !e.target.closest('#userSuggestions')) {
- userSuggestions.classList.add('hidden');
- }
- });
-
// --- Submit note ---
async function submitNote() {
const statusEl = document.getElementById('submitStatus');
@@ -2681,8 +2632,8 @@
job_note: jobNoteValue === 'yes',
type: noteType,
userId: pb.authStore.model?.id || pb.authStore.record?.id,
- shared: selectedUsers.length > 0,
- shared_with: selectedUsers.map(u => u.id),
+ shared: selectedUsers.length > 0 ? true : false,
+ shared_with: selectedUsers.map(u => u.name),
};
// Only include job_number if it has a value
@@ -2747,7 +2698,11 @@
loadNotesList();
showNotesList();
} catch (e) {
- console.error(e);
+ console.error('Error creating note:', e);
+ console.error('Full error:', JSON.stringify(e, null, 2));
+ if (e.response) {
+ console.error('Response data:', e.response);
+ }
statusEl.textContent = `Error saving: ${e.message}`;
}
}