Add '+ New Package' button to expense detail packages section
Visible whenever the user can manage. Always routes to the package creation page. The link-existing dropdown still shows when other packages exist. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -224,7 +224,15 @@
|
|||||||
|
|
||||||
<!-- Packages -->
|
<!-- Packages -->
|
||||||
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-700 dark:bg-gray-800">
|
<div class="rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-700 dark:bg-gray-800">
|
||||||
<h2 class="mb-3 font-semibold text-gray-900 dark:text-white">Linked Packages</h2>
|
<div class="mb-3 flex items-center justify-between">
|
||||||
|
<h2 class="font-semibold text-gray-900 dark:text-white">Linked Packages</h2>
|
||||||
|
{#if canManage}
|
||||||
|
<a href={`/companies/${data.company.id}/packages/new`}
|
||||||
|
class="rounded-md bg-blue-600 px-3 py-1.5 text-xs font-medium text-white hover:bg-blue-700">
|
||||||
|
+ New Package
|
||||||
|
</a>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
|
||||||
{#if data.linkedPackages.length > 0}
|
{#if data.linkedPackages.length > 0}
|
||||||
<div class="mb-3 flex flex-wrap gap-2">
|
<div class="mb-3 flex flex-wrap gap-2">
|
||||||
@@ -246,23 +254,28 @@
|
|||||||
<p class="mb-3 text-sm text-gray-500 dark:text-gray-400">No packages linked yet.</p>
|
<p class="mb-3 text-sm text-gray-500 dark:text-gray-400">No packages linked yet.</p>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if canManage && data.availablePackages.length > 0}
|
{#if canManage}
|
||||||
|
{@const selectable = data.availablePackages.filter((p) => !data.linkedPackages.find((l) => l.id === p.id))}
|
||||||
|
{#if selectable.length > 0}
|
||||||
<form method="POST" action="?/linkPackage" use:enhance={() => async ({ update, formElement }) => {
|
<form method="POST" action="?/linkPackage" use:enhance={() => async ({ update, formElement }) => {
|
||||||
await update({ reset: false });
|
await update({ reset: false });
|
||||||
formElement.reset();
|
formElement.reset();
|
||||||
}} class="flex items-center gap-2 border-t border-gray-100 pt-3 text-sm dark:border-gray-700">
|
}} class="flex items-center gap-2 border-t border-gray-100 pt-3 text-sm dark:border-gray-700">
|
||||||
<select name="packageId" required class={inputCls + ' flex-1'}>
|
<select name="packageId" required class={inputCls + ' flex-1'}>
|
||||||
<option value="" disabled selected>Select package to link</option>
|
<option value="" disabled selected>Select an existing package</option>
|
||||||
{#each data.availablePackages as pkg (pkg.id)}
|
{#each selectable as pkg (pkg.id)}
|
||||||
{#if !data.linkedPackages.find((l) => l.id === pkg.id)}
|
|
||||||
<option value={pkg.id}>{pkg.trackingNumber} — {pkg.carrier} ({pkg.direction})</option>
|
<option value={pkg.id}>{pkg.trackingNumber} — {pkg.carrier} ({pkg.direction})</option>
|
||||||
{/if}
|
|
||||||
{/each}
|
{/each}
|
||||||
</select>
|
</select>
|
||||||
<button type="submit" class="rounded-md bg-blue-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-blue-700">
|
<button type="submit" class="rounded-md bg-blue-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-blue-700">
|
||||||
Link
|
Link
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
{:else if data.availablePackages.length === 0}
|
||||||
|
<p class="border-t border-gray-100 pt-3 text-xs text-gray-500 dark:border-gray-700 dark:text-gray-400">
|
||||||
|
No packages exist yet. Use "+ New Package" above to create one.
|
||||||
|
</p>
|
||||||
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
Reference in New Issue
Block a user