This commit applies changes from 78e86f514f
.
It introduces Help dialog which guides the user to review Read-Search-Ask
methodology, ask the question on the forums or in gitter chatroom.
This dialog replaces existing Help button which was leading to Gitter Chatroom.
147 lines
3.8 KiB
JavaScript
147 lines
3.8 KiB
JavaScript
import { combineEpics, ofType } from 'redux-epic';
|
|
import {
|
|
types,
|
|
chatRoomSelector,
|
|
closeBugModal,
|
|
closeHelpModal
|
|
} from '../redux';
|
|
|
|
import { filesSelector } from '../../../files';
|
|
import { currentChallengeSelector } from '../../../redux';
|
|
|
|
function filesToMarkdown(files = {}) {
|
|
const moreThenOneFile = Object.keys(files).length > 1;
|
|
return Object.keys(files).reduce((fileString, key) => {
|
|
const file = files[key];
|
|
if (!file) {
|
|
return fileString;
|
|
}
|
|
const fileName = moreThenOneFile ? `\\ file: ${file.contents}` : '';
|
|
const fileType = file.ext;
|
|
return fileString +
|
|
'\`\`\`' +
|
|
fileType +
|
|
'\n' +
|
|
fileName +
|
|
'\n' +
|
|
file.contents +
|
|
'\n' +
|
|
'\`\`\`\n\n';
|
|
}, '\n');
|
|
}
|
|
|
|
export function openIssueSearchEpic(actions, { getState }, { window }) {
|
|
return actions::ofType(types.openIssueSearch).map(() => {
|
|
const state = getState();
|
|
const challengeName = currentChallengeSelector(state);
|
|
|
|
window.open(
|
|
'https://forum.freecodecamp.org/search?q=' +
|
|
window.encodeURIComponent(challengeName)
|
|
);
|
|
|
|
return closeBugModal();
|
|
});
|
|
}
|
|
|
|
export function createIssueEpic(actions, { getState }, { window }) {
|
|
return actions::ofType(types.createIssue).map(() => {
|
|
const state = getState();
|
|
const files = filesSelector(state);
|
|
const challengeName = currentChallengeSelector(state);
|
|
const {
|
|
navigator: { userAgent },
|
|
location: { href }
|
|
} = window;
|
|
const titleText = 'Need assistance in ' + challengeName;
|
|
let textMessage = [
|
|
'#### Challenge Name\n',
|
|
'[',
|
|
challengeName,
|
|
'](',
|
|
href,
|
|
') has an issue.\n',
|
|
'#### Issue Description\n',
|
|
'<!-- Describe below when the issue happens and how to ',
|
|
'reproduce it -->\n\n\n',
|
|
'#### Browser Information\n',
|
|
'<!-- Describe your workspace in which you are having issues-->\n',
|
|
'User Agent is: <code>',
|
|
userAgent,
|
|
'</code>.\n\n',
|
|
'#### Screenshot\n',
|
|
'<!-- Add a screenshot of your issue -->\n\n\n',
|
|
'#### Your Code'
|
|
].join('');
|
|
|
|
const body = filesToMarkdown(files);
|
|
if (body.length > 10) {
|
|
textMessage += body;
|
|
}
|
|
|
|
window.open(
|
|
'https://forum.freecodecamp.org/new-topic'
|
|
+ '?category=General'
|
|
+ '&title=' + window.encodeURIComponent(titleText)
|
|
+ '&body=' + window.encodeURIComponent(textMessage),
|
|
'_blank'
|
|
);
|
|
|
|
return closeBugModal();
|
|
});
|
|
}
|
|
|
|
export function openHelpChatRoomEpic(actions, { getState }, { window }) {
|
|
return actions::ofType(types.openHelpChatRoom).map(() => {
|
|
const state = getState();
|
|
const helpChatRoom = chatRoomSelector(state);
|
|
|
|
window.open(
|
|
'https://gitter.im/freecodecamp/' +
|
|
window.encodeURIComponent(helpChatRoom)
|
|
);
|
|
|
|
return closeHelpModal();
|
|
});
|
|
}
|
|
|
|
export function createQuestionEpic(actions, { getState }, { window }) {
|
|
return actions::ofType(types.createQuestion).map(() => {
|
|
const state = getState();
|
|
const files = filesSelector(state);
|
|
const challengeName = currentChallengeSelector(state);
|
|
const {
|
|
navigator: { userAgent },
|
|
location: { href }
|
|
} = window;
|
|
const textMessage = [
|
|
'**Tell us what\'s happening:**\n\n\n\n',
|
|
'**Your code so far**\n',
|
|
filesToMarkdown(files),
|
|
'**Your browser information:**\n\n',
|
|
'User Agent is: <code>',
|
|
userAgent,
|
|
'</code>.\n\n',
|
|
'**Link to the challenge:**\n',
|
|
href
|
|
].join('');
|
|
|
|
window.open(
|
|
'https://forum.freecodecamp.org/new-topic'
|
|
+ '?category=help'
|
|
+ '&title=' + window.encodeURIComponent(challengeName)
|
|
+ '&body=' + window.encodeURIComponent(textMessage),
|
|
'_blank'
|
|
);
|
|
|
|
return closeHelpModal();
|
|
});
|
|
}
|
|
|
|
export default combineEpics(
|
|
openIssueSearchEpic,
|
|
createIssueEpic,
|
|
openHelpChatRoomEpic,
|
|
createQuestionEpic
|
|
);
|