UNPKG

labo-components

Version:
86 lines (79 loc) 2.34 kB
import PropTypes from 'prop-types'; import Query from './Query'; export default class Project { constructor(id, name, description, user, created, queries, sessions) { this.id = id; this.name = name; this.description = description; this.user = user; this.created = created; this.queries = queries; // array containing named queries this.sessions = sessions; } //this is the object being sent via the ProjectAPI (it filters out the collectionConfig and the queries) toServerObject = () => { const project = { name : this.name, description : this.description, user : this.user, created : this.created, queries : this.queries.map(nq => { return {name : nq.name, query : nq.query} }), sessions : this.sessions } if(this.id) { //only add the ID when it's there, so the API will use the correct request method project.id = this.id; } return project; } //local storage only filters out the collection config, as we want to store the queries toLocalStorageObject = () => { const project = { name : this.name, description : this.description, user : this.user, created : this.created, queries : this.queries.map(nq => { return {name : nq.name, id: nq.id, query : nq.query} }), sessions : this.sessions } if(this.id) { //only add the ID when it's there, so the API will use the correct request method project.id = this.id; } return project; } static construct(data) { data = data || {}; const queries = data.queries || []; return new Project( data.id || null, data.name || null, data.description || null, data.user || null, data.created || null, queries.map(q => { return { query: Query.construct(q.query), //make sure the queries are of type Query name : q.name, id: q.id, collectionConfig : null // populated in the ProjectQueriesTable (FIXME should be nicer, but ok for now) } }), data.sessions || [] ) } static getPropTypes(isRequired=true) { const projectShape = PropTypes.shape({ id: PropTypes.string, name: PropTypes.string, description: PropTypes.string, user: PropTypes.string, created: PropTypes.string, queries: PropTypes.array, sessions: PropTypes.array }) return isRequired ? projectShape.isRequired : projectShape; } }