feat(calendar): enable calendar sync for Viktiga datum (#1853)
Turns on the calendar extension (built Feb 2026, stripped in the 2026-03-02 production readiness deploy, never re-enabled): ICS feed settings, calendar workspace, subscribe button on the Viktiga datum page. Hardening before first real use: feed serve route now requires the creator to still be a company member (offboarding stops the feed); stable pagination (due_date + id, dedupe) on feed queries; fetches inside the logged try block; invoice events limited to sent/paid/partially_paid/overdue; event UIDs rebranded to accounted.se while zero feeds exist; APP_URL fallback fails closed in production; mobile stacking for the deadlines header; settings note that Google Calendar needs default notifications on subscribed calendars; calendar workspace aligned with the design system. Skeptic reviewed (3 refutations, all fixed) plus one compliance swarm finding (fixed). No migrations. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
4fb449a474
commit
f75ea2384d
@@ -20,7 +20,7 @@ export interface CalendarData {
|
||||
* Generate a stable UID for calendar events
|
||||
* This ensures updates to events are recognized by calendar apps
|
||||
*/
|
||||
function getEventUID(type: string, id: string, domain: string = 'erp-base.se'): string {
|
||||
function getEventUID(type: string, id: string, domain: string = 'accounted.se'): string {
|
||||
return `${type}-${id}@${domain}`
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -1,6 +1,7 @@
|
||||
// AUTO-GENERATED: do not edit. Run `npm run setup:extensions` to regenerate.
|
||||
|
||||
export const ENABLED_EXTENSION_IDS: ReadonlySet<string> = new Set([
|
||||
'calendar',
|
||||
'enable-banking',
|
||||
'email',
|
||||
'arcim-migration',
|
||||
|
||||
+2
@@ -1,5 +1,6 @@
|
||||
// AUTO-GENERATED: do not edit. Run `npm run setup:extensions` to regenerate.
|
||||
import type { Extension } from '../types'
|
||||
import { calendarExtension } from '@/extensions/general/calendar'
|
||||
import { enableBankingExtension } from '@/extensions/general/enable-banking'
|
||||
import { emailExtension } from '@/extensions/general/email'
|
||||
import { arcimMigrationExtension } from '@/extensions/general/arcim-migration'
|
||||
@@ -16,6 +17,7 @@ import { shopifyExtension } from '@/extensions/general/shopify'
|
||||
import { mailExtension } from '@/extensions/general/mail'
|
||||
|
||||
export const FIRST_PARTY_EXTENSIONS: Extension[] = [
|
||||
calendarExtension,
|
||||
enableBankingExtension,
|
||||
emailExtension,
|
||||
arcimMigrationExtension,
|
||||
|
||||
+15
@@ -3,6 +3,21 @@ import type { ExtensionDefinition } from '../types'
|
||||
|
||||
export const EXTENSION_DEFINITIONS: Record<string, ExtensionDefinition[]> = {
|
||||
'general': [
|
||||
{
|
||||
"slug": "calendar",
|
||||
"name": "Kalender",
|
||||
"sector": "general",
|
||||
"category": "operations",
|
||||
"icon": "Calendar",
|
||||
"dataPattern": "core",
|
||||
"description": "Fullständig kalendervy med månads-, vecko- och dagsvisning",
|
||||
"longDescription": "Se alla fakturadatum och deadlines i en interaktiv kalender med månads-, vecko- och dagsvy.",
|
||||
"readsCoreTables": [
|
||||
"invoices",
|
||||
"deadlines",
|
||||
"customers"
|
||||
]
|
||||
},
|
||||
{
|
||||
"slug": "enable-banking",
|
||||
"name": "Bankintegration (PSD2)",
|
||||
|
||||
+1
@@ -4,6 +4,7 @@ import type { ComponentType } from 'react'
|
||||
import type { WorkspaceComponentProps } from '../workspace-registry'
|
||||
|
||||
export const WORKSPACES: Record<string, ComponentType<WorkspaceComponentProps>> = {
|
||||
'general/calendar': dynamic(() => import('@/components/extensions/general/CalendarWorkspace')),
|
||||
'general/enable-banking': dynamic(() => import('@/components/extensions/general/EnableBankingWorkspace')),
|
||||
'general/arcim-migration': dynamic(() => import('@/components/extensions/general/ArcimMigrationWorkspace')),
|
||||
'general/tic': dynamic(() => import('@/components/extensions/general/TicWorkspace')),
|
||||
|
||||
Reference in New Issue
Block a user