remove old messaging system
This commit is contained in:
@@ -81,7 +81,11 @@ export const hono = {
|
||||
return request(
|
||||
'PATCH',
|
||||
`/api/admin/${famId}/fam`,
|
||||
{ payday, ...(paydayTime !== undefined ? { paydayTime } : {}), ...(timezone !== undefined ? { timezone } : {}) },
|
||||
{
|
||||
payday,
|
||||
...(paydayTime !== undefined ? { paydayTime } : {}),
|
||||
...(timezone !== undefined ? { timezone } : {})
|
||||
},
|
||||
sessionHeaders(event)
|
||||
);
|
||||
},
|
||||
@@ -111,11 +115,11 @@ export const hono = {
|
||||
sessionHeaders(event)
|
||||
);
|
||||
},
|
||||
async issueAllRewards(event: RequestEvent, famId: string, memberId: string, message?: string) {
|
||||
async issueAllRewards(event: RequestEvent, famId: string, memberId: string) {
|
||||
return request(
|
||||
'POST',
|
||||
`/api/admin/${famId}/rewards/issue-all`,
|
||||
{ memberId, message },
|
||||
{ memberId },
|
||||
sessionHeaders(event)
|
||||
);
|
||||
},
|
||||
@@ -196,14 +200,6 @@ export const hono = {
|
||||
sessionHeaders(event)
|
||||
);
|
||||
},
|
||||
async sendMessage(event: RequestEvent, famId: string, memberId: string, message: string) {
|
||||
return request(
|
||||
'POST',
|
||||
`/api/admin/${famId}/send-message`,
|
||||
{ memberId, message },
|
||||
sessionHeaders(event)
|
||||
);
|
||||
},
|
||||
async memberChores(event: RequestEvent, famId: string, memberId: string) {
|
||||
return request(
|
||||
'GET',
|
||||
|
||||
@@ -174,12 +174,8 @@ export const actions = {
|
||||
const famId = event.locals.session.famId;
|
||||
const fd = await event.request.formData();
|
||||
const rewardId = fd.get('id') as string;
|
||||
const message = fd.get('message') as string;
|
||||
try {
|
||||
const record = await hono.admin.claimReward(event, famId, rewardId);
|
||||
if (message) {
|
||||
await hono.admin.sendMessage(event, famId, record.memberId, message);
|
||||
}
|
||||
return { record };
|
||||
} catch (e) {
|
||||
return { error: e instanceof Error ? e.message : 'Failed to claim reward' };
|
||||
@@ -191,9 +187,8 @@ export const actions = {
|
||||
const famId = event.locals.session.famId;
|
||||
const fd = await event.request.formData();
|
||||
const memberId = fd.get('memberId') as string;
|
||||
const message = fd.get('message') as string;
|
||||
try {
|
||||
const result = await hono.admin.issueAllRewards(event, famId, memberId, message || undefined);
|
||||
const result = await hono.admin.issueAllRewards(event, famId, memberId);
|
||||
return { count: result.count };
|
||||
} catch (e) {
|
||||
return { error: e instanceof Error ? e.message : 'Failed to issue rewards' };
|
||||
|
||||
@@ -19,15 +19,6 @@
|
||||
isCompleteForPeriod
|
||||
} from '../../../../../timezone.ts';
|
||||
|
||||
interface Notification {
|
||||
id: string;
|
||||
famId: string;
|
||||
memberId: string;
|
||||
message: string;
|
||||
read: boolean;
|
||||
created: string;
|
||||
}
|
||||
|
||||
let { data } = $props();
|
||||
|
||||
let role = $state(data.role || 'child');
|
||||
@@ -44,15 +35,6 @@
|
||||
|
||||
let simulateEow = $state(!!(data.settings?.simulateEow ?? data.simulateEow));
|
||||
let eowPreview = $state<any>(null);
|
||||
const responseTags = [
|
||||
'👏 well done',
|
||||
'😊 really pleased',
|
||||
'🎯 you deserved that',
|
||||
'💪 great effort',
|
||||
'🙏 thanks'
|
||||
];
|
||||
let selectedMessage = $state<Record<string, string>>({});
|
||||
let customMessage = $state<Record<string, string>>({});
|
||||
let toast = $state('');
|
||||
|
||||
let parentMembers = $derived(famStore.initialized ? famStore.members : data.members || []);
|
||||
@@ -515,33 +497,8 @@
|
||||
loading = false;
|
||||
return;
|
||||
}
|
||||
|
||||
await loadAndDismiss();
|
||||
});
|
||||
|
||||
async function loadAndDismiss() {
|
||||
if (!deviceToken || !famId) return;
|
||||
try {
|
||||
const res = await fetch('/api/members/notifications', {
|
||||
headers: {
|
||||
'x-device-token': deviceToken,
|
||||
'x-device-famid': famId
|
||||
}
|
||||
});
|
||||
if (!res.ok) return;
|
||||
const all: Notification[] = await res.json();
|
||||
for (const n of all.filter((n) => !n.read)) {
|
||||
await fetch(`/api/members/notifications/${n.id}/dismiss`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'x-device-token': deviceToken,
|
||||
'x-device-famid': famId
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch {}
|
||||
}
|
||||
|
||||
function isCompleted(assignedChoreId: string, date: string): boolean {
|
||||
const a = assigned.find((x) => x.id === assignedChoreId);
|
||||
// Weekly chores are "done for the week" — complete if completed any day
|
||||
@@ -822,7 +779,6 @@
|
||||
}}
|
||||
>
|
||||
<input type="hidden" name="memberId" value={m.id} />
|
||||
<input type="hidden" name="message" value={selectedMessage[m.id] || ''} />
|
||||
<Button type="submit" size="sm" variant="secondary"
|
||||
>Issue All ({cashRequested.length}) · £{requestedTotal.toFixed(2)}</Button
|
||||
>
|
||||
@@ -840,7 +796,6 @@
|
||||
}}
|
||||
>
|
||||
<input type="hidden" name="id" value={r.id} />
|
||||
<input type="hidden" name="message" value={selectedMessage[m.id] || ''} />
|
||||
<div class="payment-row">
|
||||
<span>{r.label}</span>
|
||||
<div class="payment-right">
|
||||
@@ -866,31 +821,6 @@
|
||||
</div>
|
||||
{/each}
|
||||
{/if}
|
||||
|
||||
<div class="response-area">
|
||||
<p class="respond-label">Response:</p>
|
||||
<div class="tags">
|
||||
{#each responseTags as tag}
|
||||
<button
|
||||
type="button"
|
||||
class="tag"
|
||||
class:selected={selectedMessage[m.id] === tag}
|
||||
onclick={() =>
|
||||
(selectedMessage[m.id] = selectedMessage[m.id] === tag ? '' : tag)}
|
||||
>{tag}</button
|
||||
>
|
||||
{/each}
|
||||
</div>
|
||||
<input
|
||||
type="text"
|
||||
class="custom-msg"
|
||||
placeholder="Or type your own..."
|
||||
bind:value={customMessage[m.id]}
|
||||
oninput={() => {
|
||||
if (customMessage[m.id]) selectedMessage[m.id] = customMessage[m.id];
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{/each}
|
||||
@@ -1569,41 +1499,6 @@
|
||||
align-items: center;
|
||||
gap: 0.4rem;
|
||||
}
|
||||
.respond-label {
|
||||
font-size: 0.8rem;
|
||||
color: #6b7280;
|
||||
margin: 0.4rem 0 0.3rem;
|
||||
}
|
||||
.tags {
|
||||
display: flex;
|
||||
gap: 0.3rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.tag {
|
||||
font-size: 0.75rem;
|
||||
padding: 0.2rem 0.5rem;
|
||||
border: 1px solid #d1d5db;
|
||||
border-radius: 999px;
|
||||
background: white;
|
||||
cursor: pointer;
|
||||
}
|
||||
.tag:hover {
|
||||
background: #f3f4f6;
|
||||
}
|
||||
.tag.selected {
|
||||
background: #6366f1;
|
||||
color: white;
|
||||
border-color: #6366f1;
|
||||
}
|
||||
.custom-msg {
|
||||
margin-top: 0.3rem;
|
||||
padding: 0.3rem 0.5rem;
|
||||
border: 1px solid #d1d5db;
|
||||
border-radius: 4px;
|
||||
font-size: 0.8rem;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.error {
|
||||
color: #dc2626;
|
||||
|
||||
Reference in New Issue
Block a user