thatcher 1.0.49 → 1.0.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thatcher",
3
- "version": "1.0.49",
3
+ "version": "1.0.50",
4
4
  "description": "A config-driven application framework for building data-intensive web apps without code.",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -6,6 +6,9 @@ import { renderLogin, renderDashboard, renderAccessDenied, renderPasswordReset,
6
6
  import { renderClientDashboard, renderClientList } from '@/ui/client-renderer.js';
7
7
  import { canList, canView, canCreate, canEdit, isPartner, isClerk, isClientUser, canClientAccessEntity } from '@/ui/permissions-ui.js';
8
8
  import { renderEngagementGrid } from '@/ui/engagement-grid-renderer.js';
9
+ import { renderBoardView } from '@/ui/board-view-renderer.js';
10
+ import { renderGridView } from '@/ui/grid-view-renderer.js';
11
+ import { renderCalendarView, renderTimelineView } from '@/ui/calendar-view-renderer.js';
9
12
  import { renderClientProgress } from '@/ui/client-progress-renderer.js';
10
13
  import { renderLetterWorkflow } from '@/ui/letter-workflow-renderer.js';
11
14
  import { renderAdvancedSearch } from '@/ui/advanced-search-renderer.js';
@@ -220,8 +223,19 @@ export async function handlePage(pathname, req, res) {
220
223
  if (!canList(user, entityName)) return renderAccessDenied(user, entityName, 'list');
221
224
  let items = await list(entityName, {});
222
225
  if (isClientUser(user) && user.client_id) items = items.filter(item => { if (item.client_id) return item.client_id === user.client_id; if (item.assigned_to) return item.assigned_to === user.id; return true; });
226
+ items = resolveRefFields(items, spec);
227
+ const view = reqUrl(req).searchParams.get('view');
228
+ if (view === 'board') return renderBoardView(user, entityName, spec, items);
229
+ if (view === 'grid') return renderGridView(user, entityName, spec, items);
230
+ if (view === 'calendar') {
231
+ const params = reqUrl(req).searchParams;
232
+ const month = params.has('month') ? Number(params.get('month')) : undefined;
233
+ const year = params.has('year') ? Number(params.get('year')) : undefined;
234
+ return renderCalendarView(user, entityName, spec, items, { month, year });
235
+ }
236
+ if (view === 'timeline') return renderTimelineView(user, entityName, spec, items);
223
237
  const { renderEntityList: lazyEntityList } = await lazyRenderer('entity-renderer.js');
224
- return lazyEntityList(entityName, resolveRefFields(items, spec), spec, user);
238
+ return lazyEntityList(entityName, items, spec, user);
225
239
  }
226
240
  if (segments.length === 2 && segments[0] === 'client' && segments[1] !== 'new') {
227
241
  if (!canView(user, 'client')) return renderAccessDenied(user, 'client', 'view');