Skip to content

Package for controlling GDS style task list states in Govuk prototypes and NodeJs applications.

Notifications You must be signed in to change notification settings

nubz/gds-task-list-ops

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

example workflow Coverage Status

GDS task list ops

Making a GDS task list work in a GOVUK prototype. Report the latest status for each task and provide a link that represents the next thing required of a task.

Task lists need data modelling, we need to describe the task list in a schema.

A schema is essentially an object containing tasks, tasks contain page models and page models contain fields. This package provides tools to compare the session data with the schema and return a status object defining the status of each task and a link URL for the first page that is invalid within that task, this link URL should be used in the task list template as the link to enter that task. If the task is deemed complete then the link should go into the Check Your Answers page for that task where users can review their answers and change any if required.

Examples

Examples of simple and complex use cases can be seen on https://prototype-strategies.herokuapp.com/task-lists/

Schema description

The PageModel definition is as required in the @nubz/gds-validation package as this is what is used to tell us whether pages are valid. It is added to this package as a peer dependency.

// using TypeScript interfaces as documentation

interface Schema {
  [key: String]: TaskModel
}

interface TaskModel {
  title: String
  customTitle?: (data: Payload) => String // if the task title is dependendent on payload content
  path: String
  summaryPath: String
  pages: PageMap
}

interface PageMap {
  [key: String]: PageModel
}

Responses

returnTaskList accepts the schema and the data set to compare against - usually req.session.data The response is of the following type

interface TaskListStatusMap {
    [key: TaskName]: TaskListStatus
}

interface TaskListStatus {
    status: Status
    link: String // a uri to the first page that is invalid within the task
    title: String // the value of the `title` property for this task in your schema
}
type TaskName = String // name/key of task in your schema model
type Status = 'complete' | 'in-progress' | 'to-do' | 'cannot-start'

About

Package for controlling GDS style task list states in Govuk prototypes and NodeJs applications.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published