refactor: enhance UI components and navigation structure, implement export functionality for wizard steps, and update routing for improved user experience

This commit is contained in:
Jennie Robinson Faber 2025-08-16 13:17:36 +01:00
parent 37ab8d7bab
commit d7e52293e4
18 changed files with 3802 additions and 3318 deletions

View file

@ -1,8 +1,23 @@
<template>
<div class="space-y-4">
<div>
<div class="flex items-center justify-between mb-6">
<h3 class="text-2xl font-black text-black">Who's on your team?</h3>
<div class="max-w-4xl mx-auto space-y-6">
<!-- Section Header with Export Controls -->
<div class="flex items-center justify-between mb-8">
<div>
<h3 class="text-2xl font-black text-black mb-2">Who's on your team?</h3>
<p class="text-neutral-600">
Add everyone who'll be working in the co-op, even if they're not ready
to be paid yet.
</p>
</div>
<div class="flex items-center gap-3">
<UButton
variant="outline"
color="gray"
size="sm"
@click="exportMembers">
<UIcon name="i-heroicons-arrow-down-tray" class="mr-1" />
Export
</UButton>
<UButton
v-if="members.length > 0"
@click="addMember"
@ -26,8 +41,7 @@
class="text-center py-12 border-4 border-dashed border-black rounded-xl bg-white shadow-lg">
<h4 class="font-medium text-neutral-900 mb-2">No team members yet</h4>
<p class="text-sm text-neutral-500 mb-4">
Add everyone who'll be working in the co-op, even if they're not ready
to be paid yet.
Get started by adding your first team member.
</p>
<UButton @click="addMember" size="lg" variant="solid" color="primary">
<UIcon name="i-heroicons-plus" class="mr-2" />
@ -218,4 +232,24 @@ function addMember() {
function removeMember(id: string) {
membersStore.removeMember(id);
}
function exportMembers() {
const exportData = {
members: members.value,
exportedAt: new Date().toISOString(),
section: "members",
};
const blob = new Blob([JSON.stringify(exportData, null, 2)], {
type: "application/json",
});
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = `coop-members-${new Date().toISOString().split("T")[0]}.json`;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
}
</script>