feat: a dashboard for clients, behind a secret link
Owners and admins turn it on in Configuración → General, pick what it
shows (tickets per status, the sprint under way, release forecasts,
open epics and activity per day) and can renew or drop the link. Whoever
has it sees /share/{token} without an account: only those blocks, no
people nor single tickets but the epics, no links into the app, read
again every minute. A renewed or dropped link says it no longer works.
REST (GET/PUT/DELETE /api/projects/{project}/share and the public
GET /api/shared/dashboards/{token}) and GraphQL (dashboardShare,
shareDashboard, unshareDashboard, sharedDashboard). The token is kept
in dashboard_shares and goes with the project.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -22,6 +22,7 @@ import { GitIntegrationComponent } from '../ui/git-integration';
|
||||
import { WebhooksComponent } from '../ui/webhooks';
|
||||
import { TransferComponent } from '../ui/transfer';
|
||||
import { AutomationsComponent } from '../ui/automations';
|
||||
import { ClientShareComponent } from '../ui/client-share';
|
||||
import { ProjectFacade } from '@task-stream/web/tracker/application';
|
||||
import {
|
||||
CustomFieldType,
|
||||
@@ -58,7 +59,7 @@ const SECTIONS: SettingsSection[] = [
|
||||
{
|
||||
id: 'general',
|
||||
label: 'General',
|
||||
hint: 'Quién ve el proyecto y si el público puede proponer cosas.',
|
||||
hint: 'Quién ve el proyecto, si el público puede proponer cosas y el panel para clientes.',
|
||||
},
|
||||
{
|
||||
id: 'workflow',
|
||||
@@ -143,6 +144,7 @@ function idFrom(name: string): string {
|
||||
WebhooksComponent,
|
||||
TransferComponent,
|
||||
AutomationsComponent,
|
||||
ClientShareComponent,
|
||||
CdkDropList,
|
||||
CdkDrag,
|
||||
CdkDragHandle,
|
||||
@@ -257,6 +259,10 @@ function idFrom(name: string): string {
|
||||
}}</span>
|
||||
</label>
|
||||
</section>
|
||||
|
||||
@if (facade.canManage()) {
|
||||
<ts-client-share [projectId]="project.id" />
|
||||
}
|
||||
}
|
||||
|
||||
@if (draft(); as d) {
|
||||
|
||||
Reference in New Issue
Block a user