Skip to content

Commit f273453

Browse files
author
vikasrohit
authored
Merge pull request #2397 from appirio-tech/feature/refactoring-way-to-store-template-id
Github issue#2396, Refactor the way we are storing project template id while creating project
2 parents 8ad9d25 + cb78bf9 commit f273453

File tree

5 files changed

+38
-38
lines changed

5 files changed

+38
-38
lines changed

src/projects/components/projectsCard/ProjectCardHeader.jsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@ import './ProjectCardHeader.scss'
1010
function ProjectCardHeader({ project, onClick, projectTemplates }) {
1111
if (!project) return null
1212

13+
const projectTemplateId = project.templateId
1314
const projectTemplateKey = _.get(project, 'details.products[0]')
14-
const projectTemplate = getProjectTemplateByKey(projectTemplates, projectTemplateKey)
15+
const projectTemplate = projectTemplateId
16+
? _.find(projectTemplates, pt => pt.id === projectTemplateId)
17+
: getProjectTemplateByKey(projectTemplates, projectTemplateKey)
1518
// icon for the product, use default generic work project icon for categories which no longer exist now
1619
const productIcon = _.get(projectTemplate, 'icon', 'tech-32px-outline-work-project')
1720
return (

src/projects/create/components/FillProjectDetails.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ class FillProjectDetails extends Component {
3939

4040
render() {
4141
const { project, dirtyProject, processing, submitBtnText, onBackClick, projectTemplates } = this.props
42-
const projectKey = _.get(project, 'details.products[0]')
43-
const projectTemplate = _.find(projectTemplates, { key: projectKey })
42+
const projectTemplateId = _.get(project, 'templateId')
43+
const projectTemplate = _.find(projectTemplates, { id: projectTemplateId })
4444
const formDisclaimer = _.get(projectTemplate, 'scope.formDisclaimer')
4545

4646
const sections = projectTemplate.scope.sections

src/projects/create/components/ProjectWizard.jsx

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ import qs from 'query-string'
44
import React, { Component } from 'react'
55
import PropTypes from 'prop-types'
66
import { withRouter } from 'react-router-dom'
7-
import { getProjectCreationTemplateField, getProjectTemplateByAlias,
8-
getProjectTemplateByKey, getProjectTemplatesByCategory, getProjectTypeByAlias } from '../../../helpers/templates'
7+
import { getProjectCreationTemplateField, getProjectTemplateByAlias, getProjectTemplatesByCategory, getProjectTypeByAlias } from '../../../helpers/templates'
98
import Wizard from '../../../components/Wizard'
109
import SelectProjectTemplate from './SelectProjectTemplate'
1110
import SelectProjectType from './SelectProjectType'
@@ -53,14 +52,15 @@ class ProjectWizard extends Component {
5352
const incompleteProjectStr = window.localStorage.getItem(LS_INCOMPLETE_PROJECT)
5453
if (incompleteProjectStr) {
5554
const incompleteProject = JSON.parse(incompleteProjectStr)
56-
const incompleteProjectTemplateKey = _.get(incompleteProject, 'details.products[0]')
55+
const incompleteProjectTemplateId = _.get(incompleteProject, 'templateId')
56+
const incompleteProjectTemplate = _.find(projectTemplates, pt => pt.id === incompleteProjectTemplateId)
5757
let wizardStep = WZ_STEP_INCOMP_PROJ_CONF
5858
let updateQuery = {}
59-
if (incompleteProjectTemplateKey && params && params.project) {
60-
const project = getProjectTemplateByAlias(projectTemplates, params.project)
61-
if (project) {
59+
if (incompleteProjectTemplate && params && params.project) {
60+
const projectTemplate = getProjectTemplateByAlias(projectTemplates, params.project)
61+
if (projectTemplate) {
6262
// load project details page directly
63-
if (project.key === incompleteProjectTemplateKey) {
63+
if (projectTemplate.key === incompleteProjectTemplate.key) {
6464
wizardStep = WZ_STEP_FILL_PROJ_DETAILS
6565
updateQuery = {$merge : incompleteProject}
6666
} else {
@@ -111,15 +111,15 @@ class ProjectWizard extends Component {
111111
const { onStepChange } = nextProps
112112
const params = nextProps.match.params
113113
const type = _.get(nextProps.project, 'type', null)
114-
const projectTemplateKey = _.get(nextProps.project, 'details.products[0]', null)
114+
const projectTemplateId = _.get(nextProps.project, 'templateId', null)
115115
// redirect user to project details form, if we already have type and project available
116-
let wizardStep = type && projectTemplateKey ? WZ_STEP_FILL_PROJ_DETAILS : null
116+
let wizardStep = type && projectTemplateId ? WZ_STEP_FILL_PROJ_DETAILS : null
117117
const updateQuery = {}
118118
if (params && params.project) { // if there exists project path param
119119
wizardStep = this.loadProjectFromURL(params, updateQuery)
120120
} else { // if there is not project path param, it should be first step of the wizard
121121
updateQuery['type'] = { $set : null }
122-
updateQuery['details'] = { products : { $set: [] } }
122+
updateQuery['details'] = { $set : {} }
123123
wizardStep = WZ_STEP_SELECT_PROJ_TYPE
124124
}
125125
// if wizard step deduced above and stored in state are not the same, update the state
@@ -166,7 +166,8 @@ class ProjectWizard extends Component {
166166
// show details step
167167
if (projectTemplate) {
168168
updateQuery['type'] = { $set : projectTemplate.category }
169-
updateQuery['details'] = { products : { $set: [projectTemplate.key] } }
169+
updateQuery['templateId'] = { $set : projectTemplate.id }
170+
updateQuery['details'] = {}
170171

171172
const refCode = _.get(qs.parse(window.location.search), 'refCode', '').trim().substr(0, PROJECT_REF_CODE_MAX_LENGTH)
172173
if (refCode) {
@@ -211,11 +212,11 @@ class ProjectWizard extends Component {
211212
window.localStorage.removeItem(LS_INCOMPLETE_PROJECT)
212213
// following code assumes that componentDidMount has already updated state with correct project
213214
const projectType = _.get(this.state.project, 'type')
214-
const projectTemplateKey = _.get(this.state.project, 'details.products[0]')
215+
const projectTemplateId = _.get(this.state.project, 'templateId')
215216
let wizardStep = WZ_STEP_SELECT_PROJ_TYPE
216217
let project = null
217-
if (projectTemplateKey) {
218-
project = { type: projectType, details: { products: [projectTemplateKey] } }
218+
if (projectTemplateId) {
219+
project = { type: projectType, templateId: projectTemplateId }
219220
wizardStep = WZ_STEP_FILL_PROJ_DETAILS
220221
}
221222
const refCode = this.getRefCodeFromURL()
@@ -243,18 +244,13 @@ class ProjectWizard extends Component {
243244
})
244245
}
245246

246-
updateProjectTemplate(projectTemplateKey) {
247+
updateProjectTemplate(projectTemplate) {
247248
window.scrollTo(0, 0)
248-
const { onStepChange, onProjectUpdate, projectTemplates } = this.props
249+
const { onStepChange, onProjectUpdate } = this.props
249250
const updateQuery = {}
250-
if (projectTemplateKey) {
251-
const projectTemplate = getProjectTemplateByKey(projectTemplates, projectTemplateKey)
252-
253-
const detailsQuery = { products : [projectTemplateKey] }
254-
this.restoreCommonDetails(projectTemplate, updateQuery, detailsQuery)
255-
251+
if (projectTemplate) {
256252
updateQuery.type = { $set : projectTemplate.category }
257-
updateQuery.details = { $set : detailsQuery }
253+
updateQuery.templateId = { $set: projectTemplate.id }
258254
}
259255
this.setState({
260256
project: update(this.state.project, updateQuery),
@@ -275,8 +271,9 @@ class ProjectWizard extends Component {
275271
if (projectType) {
276272
updateQuery.type = { $set : projectType }
277273

274+
// sets the appropriate project template if project category has only one project template
278275
if (visibleProjectTemplates.length === 1) {
279-
updateQuery.details = { $set : { products : [visibleProjectTemplates[0].key]} }
276+
updateQuery.templateId = { $set : visibleProjectTemplates[0].id }
280277
}
281278
}
282279

@@ -392,8 +389,8 @@ class ProjectWizard extends Component {
392389
const type = wizardStep === WZ_STEP_SELECT_PROJ_TEMPLATE ? this.state.project.type : null
393390
this.setState({
394391
// resets project sub type or product
395-
project: update(this.state.project, { type: { $set : type }, details: { products: {$set : [] }}}),
396-
dirtyProject: update(this.state.project, { type: { $set : type }, details: { products: {$set : [] }}}),
392+
project: update(this.state.project, { type: { $set : type }, details: {}}),
393+
dirtyProject: update(this.state.project, { type: { $set : type }, details: {}}),
397394
wizardStep
398395
}, () => {
399396
typeof onStepChange === 'function' && onStepChange(wizardStep, this.state.dirtyProject)

src/projects/create/components/SelectProjectTemplate.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ const SelectProjectTemplate = ({
3131
icon={icon}
3232
info={projectTemplate.info}
3333
key={projectTemplate.id}
34-
onClick={() => onProjectTemplateChange(projectTemplate.key)}
34+
onClick={() => onProjectTemplateChange(projectTemplate)}
3535
type={projectTemplate.name}
3636
/>
3737
)

src/projects/create/containers/CreateContainer.jsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { loadProjectTemplates, loadProjectCategories } from '../../../actions/te
1111
import CoderBot from '../../../components/CoderBot/CoderBot'
1212
import spinnerWhileLoading from '../../../components/LoadingSpinner'
1313
import ProjectWizard from '../components/ProjectWizard'
14-
import { getProjectTemplateByKey, getProjectTemplateByAlias, getProjectTypeByKey } from '../../../helpers/templates'
14+
import { getProjectTemplateByAlias, getProjectTypeByKey } from '../../../helpers/templates'
1515
import {
1616
CREATE_PROJECT_FAILURE,
1717
LS_INCOMPLETE_PROJECT,
@@ -169,8 +169,8 @@ class CreateContainer extends React.Component {
169169

170170
if (wizardStep === ProjectWizard.Steps.WZ_STEP_FILL_PROJ_DETAILS && isProjectDirty) {// Project Details step
171171

172-
const projectTemplateKey = _.get(this.state.updatedProject, 'details.products[0]')
173-
const projectTemplate = getProjectTemplateByKey(projectTemplates, projectTemplateKey)
172+
const projectTemplateId = _.get(this.state.updatedProject, 'templateId')
173+
const projectTemplate = _.find(projectTemplates, pt => pt.id === projectTemplateId)
174174
this.prepareProjectForCreation(this.state.updatedProject, projectTemplate)
175175
console.log('saving incomplete project', this.state.updatedProject)
176176
window.localStorage.setItem(LS_INCOMPLETE_PROJECT, JSON.stringify(this.state.updatedProject))
@@ -214,7 +214,7 @@ class CreateContainer extends React.Component {
214214
*/
215215
createProject(project) {
216216
const { templates: { projectTemplates }} = this.props
217-
const projectTemplate = getProjectTemplateByKey(projectTemplates, _.get(project, 'details.products[0]'))
217+
const projectTemplate = _.find(projectTemplates, _.get(project, 'templateId'))
218218

219219
this.setState({ creatingProject: true }, () => {
220220
if (this.props.userRoles && this.props.userRoles.length > 0) {
@@ -262,8 +262,8 @@ class CreateContainer extends React.Component {
262262
const projectType = getProjectTypeByKey(projectTypes, projectTypeKey)
263263
const typeAlias = _.get(projectType, 'aliases[0]')
264264

265-
const projectTemplateKey = _.get(updatedProject, 'details.products[0]', null)
266-
const projectTemplate = getProjectTemplateByKey(projectTemplates, projectTemplateKey)
265+
const projectTemplateId = _.get(updatedProject, 'templateId', null)
266+
const projectTemplate = _.find(projectTemplates, pt => pt.id === projectTemplateId)
267267
const templateAlias = _.get(projectTemplate, 'aliases[0]')
268268

269269
if (wizardStep === ProjectWizard.Steps.WZ_STEP_INCOMP_PROJ_CONF) {
@@ -291,8 +291,8 @@ class CreateContainer extends React.Component {
291291
}
292292
onProjectUpdate={ (updatedProject, dirty=true) => {
293293
// const projectType = _.get(this.state.updatedProject, 'type', null)
294-
const prevProduct = _.get(this.state.updatedProject, 'details.products[0]', null)
295-
const product = _.get(updatedProject, 'details.products[0]', null)
294+
const prevProduct = _.get(this.state.updatedProject, 'templateId', null)
295+
const product = _.get(updatedProject, 'templateId', null)
296296
// compares updated product with previous product to know if user has updated the product
297297
if (prevProduct !== product) {
298298
if (product) {

0 commit comments

Comments
 (0)