|
@@ -22,6 +22,7 @@ class HtmlDocument extends React.Component {
|
22
|
22
|
content: props.data ? props.data.content : debug.content,
|
23
|
23
|
timeline: props.data ? [] : [], // debug.timeline,
|
24
|
24
|
newComment: '',
|
|
25
|
+ timelineWysiwyg: false,
|
25
|
26
|
mode: MODE.VIEW
|
26
|
27
|
}
|
27
|
28
|
|
|
@@ -43,21 +44,22 @@ class HtmlDocument extends React.Component {
|
43
|
44
|
|
44
|
45
|
componentDidMount () {
|
45
|
46
|
console.log('HtmlDocument did mount')
|
46
|
|
- if (this.state.content.content_id === -1) return // debug case
|
47
|
47
|
|
48
|
48
|
this.loadContent()
|
49
|
|
- wysiwyg()
|
50
|
49
|
}
|
51
|
50
|
|
52
|
51
|
componentDidUpdate (prevProps, prevState) {
|
53
|
|
- console.log('HtmlDocument did update', prevState, this.state)
|
54
|
|
- if (!prevState.content || !this.state.content) return
|
|
52
|
+ const { state } = this
|
55
|
53
|
|
56
|
|
- if (prevState.content.content_id !== this.state.content.content_id) {
|
57
|
|
- this.loadContent()
|
58
|
|
- }
|
|
54
|
+ console.log('HtmlDocument did update', prevState, state)
|
|
55
|
+ if (!prevState.content || !state.content) return
|
|
56
|
+
|
|
57
|
+ if (prevState.content.content_id !== state.content.content_id) this.loadContent()
|
59
|
58
|
|
60
|
|
- if (prevState.mode === MODE.VIEW && this.state.mode === MODE.EDIT) wysiwyg()
|
|
59
|
+ if (state.mode === MODE.EDIT) wysiwyg('#wysiwygNewVersion', this.handleChangeText)
|
|
60
|
+
|
|
61
|
+ if (!prevState.timelineWysiwyg && state.timelineWysiwyg) wysiwyg('#wysiwygTimelineComment', this.handleChangeNewComment)
|
|
62
|
+ else if (prevState.timelineWysiwyg && !state.timelineWysiwyg) tinymce.remove('#wysiwygTimelineComment')
|
61
|
63
|
}
|
62
|
64
|
|
63
|
65
|
loadContent = async () => {
|
|
@@ -120,10 +122,7 @@ class HtmlDocument extends React.Component {
|
120
|
122
|
fetch(`${this.state.config.apiUrl}/workspaces/${this.state.content.workspace_id}/html-documents/${this.state.content.content_id}`, {
|
121
|
123
|
...FETCH_CONFIG,
|
122
|
124
|
method: 'PUT',
|
123
|
|
- body: JSON.stringify({
|
124
|
|
- label: label,
|
125
|
|
- raw_content: rawContent
|
126
|
|
- })
|
|
125
|
+ body: JSON.stringify({label: label, raw_content: rawContent})
|
127
|
126
|
})
|
128
|
127
|
|
129
|
128
|
handleClickBtnCloseApp = () => {
|
|
@@ -141,11 +140,10 @@ class HtmlDocument extends React.Component {
|
141
|
140
|
})
|
142
|
141
|
}
|
143
|
142
|
|
144
|
|
- handleClickNewVersion = () => {
|
145
|
|
- this.setState({ mode: MODE.EDIT })
|
146
|
|
- }
|
|
143
|
+ handleClickNewVersion = () => this.setState({ mode: MODE.EDIT })
|
147
|
144
|
|
148
|
145
|
handleCloseNewVersion = () => {
|
|
146
|
+ tinymce.remove('#wysiwygNewVersion')
|
149
|
147
|
this.setState({ mode: MODE.VIEW })
|
150
|
148
|
}
|
151
|
149
|
|
|
@@ -166,7 +164,7 @@ class HtmlDocument extends React.Component {
|
166
|
164
|
}
|
167
|
165
|
|
168
|
166
|
handleChangeText = e => {
|
169
|
|
- const newText = e.target.value // because SyntheticEvent is pooled (react specificity
|
|
167
|
+ const newText = e.target.value // because SyntheticEvent is pooled (react specificity)
|
170
|
168
|
this.setState(prev => ({content: {...prev.content, raw_content: newText}}))
|
171
|
169
|
}
|
172
|
170
|
|
|
@@ -190,6 +188,7 @@ class HtmlDocument extends React.Component {
|
190
|
188
|
.then(resSave => {
|
191
|
189
|
if (resSave.apiResponse.status === 200) {
|
192
|
190
|
this.setState({newComment: ''})
|
|
191
|
+ if (this.state.timelineWysiwyg) tinymce.get('wysiwygTimelineComment').setContent('')
|
193
|
192
|
this.loadContent()
|
194
|
193
|
} else {
|
195
|
194
|
console.warn('Error saving html-document comment. Result:', resSave, 'content:', content, 'config:', config)
|
|
@@ -197,6 +196,8 @@ class HtmlDocument extends React.Component {
|
197
|
196
|
})
|
198
|
197
|
}
|
199
|
198
|
|
|
199
|
+ handleToggleWysiwyg = () => this.setState(prev => ({timelineWysiwyg: !prev.timelineWysiwyg}))
|
|
200
|
+
|
200
|
201
|
handleChangeStatus = async newStatus => {
|
201
|
202
|
const { config, content } = this.state
|
202
|
203
|
|
|
@@ -237,7 +238,7 @@ class HtmlDocument extends React.Component {
|
237
|
238
|
}
|
238
|
239
|
|
239
|
240
|
render () {
|
240
|
|
- const { isVisible, loggedUser, content, timeline, newComment, config } = this.state
|
|
241
|
+ const { isVisible, loggedUser, content, timeline, newComment, timelineWysiwyg, config } = this.state
|
241
|
242
|
|
242
|
243
|
if (!isVisible) return null
|
243
|
244
|
|
|
@@ -256,7 +257,7 @@ class HtmlDocument extends React.Component {
|
256
|
257
|
availableStatus={config.availableStatuses}
|
257
|
258
|
onClickNewVersionBtn={this.handleClickNewVersion}
|
258
|
259
|
onChangeStatus={this.handleChangeStatus}
|
259
|
|
- selectedStatus={config.availableStatuses.find(s => s.slug === content.status)} // peut être vide avant que api reponde
|
|
260
|
+ selectedStatus={config.availableStatuses.find(s => s.slug === content.status)} // might be empty while api hasn't responded yet
|
260
|
261
|
onClickArchive={this.handleClickArchive}
|
261
|
262
|
onClickDelete={this.handleClickDelete}
|
262
|
263
|
i18n={i18n}
|
|
@@ -265,6 +266,7 @@ class HtmlDocument extends React.Component {
|
265
|
266
|
<PopinFixedContent customClass={`${config.slug}__contentpage`}>
|
266
|
267
|
<HtmlDocumentComponent
|
267
|
268
|
mode={this.state.mode}
|
|
269
|
+ wysiwygNewVersion={'wysiwygNewVersion'}
|
268
|
270
|
onClickCloseEditMode={this.handleCloseNewVersion}
|
269
|
271
|
onClickValidateBtn={this.handleSaveHtmlDocument}
|
270
|
272
|
version={timeline.filter(t => t.timelineType === 'revision').length}
|
|
@@ -278,8 +280,10 @@ class HtmlDocument extends React.Component {
|
278
|
280
|
loggedUser={loggedUser}
|
279
|
281
|
timelineData={timeline}
|
280
|
282
|
newComment={newComment}
|
|
283
|
+ wysiwyg={timelineWysiwyg}
|
281
|
284
|
onChangeNewComment={this.handleChangeNewComment}
|
282
|
285
|
onClickValidateNewCommentBtn={this.handleClickValidateNewCommentBtn}
|
|
286
|
+ onClickWysiwygBtn={this.handleToggleWysiwyg}
|
283
|
287
|
/>
|
284
|
288
|
</PopinFixedContent>
|
285
|
289
|
</PopinFixed>
|