{#if !authState.isAuthenticated}

Job Info

Please authenticate to access job information

{:else}

Job Info

{#if hasVoicePermission} {/if}
{#if showFiltersPanel}
Division
{#each divisions as div} {/each}
Active
{#each activeOptions as opt} {/each}
Estimator
{#each estimators as est} {/each}
Status
{#each statuses as stat} {/each}
{/if} {#if error}
{error}
{/if}
{#if loading}
Loading jobs...
{:else if visibleJobs.length === 0}
No jobs found
{:else} {#each visibleJobs as job (job.id)} {/each} {/if}
{authState.user?.email}
{/if}
{#if showDetailModal && selectedJob}
{#if !showNotesTab && !showFolderContents}
{#each Object.entries(selectedJob) as [key, value]} {#if key !== 'id' && value !== null && value !== undefined && !key.startsWith('collectionId') && key !== 'collectionName' && key !== 'Job_Folder_Link'}
{key}
{typeof value === 'object' ? JSON.stringify(value) : String(value)}
{/if} {/each}
{#if selectedJob.Job_Folder_Link} {/if}
{:else if showFolderContents}
{#if loadingFiles}
Loading files...
{:else if filesError}
{filesError}
{:else if jobFiles.length === 0}
No files found in folder
{:else}
{#each ['managerInfo', 'contracts', 'plans', 'submittals', 'other'] as category} {@const categoryFiles = jobFiles .filter(f => !f.isFolder && categorizeFile(f.name) === category) .filter(f => folderSearchFilter === '' || f.name.toLowerCase().includes(folderSearchFilter.toLowerCase())) } {@const categoryTitles = { managerInfo: 'Manager Info', contracts: 'Contracts / Estimates', plans: 'Plans', submittals: 'Submittals', other: 'Other' }} {#if categoryFiles.length > 0}
{categoryTitles[category]} ({categoryFiles.length})
{#each categoryFiles as file, idx (file.id || file.name)} {/each}
{/if} {/each}
{/if}
{:else}
{selectedJob.Notes || '(No notes)'}
{/if}
{/if} {#if showFileViewer && currentViewerFile}
{currentViewerFile.name || 'File Preview'}
{#if showPdfViewer && currentPdf}
{Math.round(currentPdf.scale * 100)}%
{#if !currentPdf.isImage && currentPdf.pages > 1}
Page {currentPdf.page} / {currentPdf.pages}
{/if}
{:else if currentViewerFile.url} {:else}
Unable to preview file
No URL available
{/if}
{/if}