Commit 5d97f6a3 by tasawernawaz

add success component on successfull form submission LEARNER-2735

parent 6614ca82
/* global gettext */
/* eslint react/no-array-index-key: 0 */ /* eslint react/no-array-index-key: 0 */
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
class ShowErrors extends React.Component { class ShowErrors extends React.Component {
render() { render() {
window.scrollTo(0, 0); window.scrollTo(0, 0);
return this.props.errorList.length > 0 && return this.props.errorList.length > 0 &&
......
...@@ -3,12 +3,12 @@ ...@@ -3,12 +3,12 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
function LoggedOutUser({ loginUrl }) { function LoggedOutUser({ platformName, loginUrl }) {
return ( return (
<div> <div>
<div className="row"> <div className="row">
<div className="col-sm-12"> <div className="col-sm-12">
<p>{gettext('Sign in to edX so we can help you better.')}</p> <p>{gettext(`Sign in to ${platformName} so we can help you better.`)}</p>
</div> </div>
</div> </div>
...@@ -42,6 +42,7 @@ function LoggedOutUser({ loginUrl }) { ...@@ -42,6 +42,7 @@ function LoggedOutUser({ loginUrl }) {
} }
LoggedOutUser.propTypes = { LoggedOutUser.propTypes = {
platformName: PropTypes.string.isRequired,
loginUrl: PropTypes.string.isRequired, loginUrl: PropTypes.string.isRequired,
}; };
......
...@@ -10,13 +10,13 @@ import FileUpload from './file_upload'; ...@@ -10,13 +10,13 @@ import FileUpload from './file_upload';
import ShowErrors from './errors_list'; import ShowErrors from './errors_list';
import LoggedInUser from './logged_in_user'; import LoggedInUser from './logged_in_user';
import LoggedOutUser from './logged_out_user'; import LoggedOutUser from './logged_out_user';
import Success from './success';
// TODO // TODO
// edx zendesk APIs // edx zendesk APIs
// access token // access token
// custom fields ids // custom fields ids
// https://openedx.atlassian.net/browse/LEARNER-2736 // https://openedx.atlassian.net/browse/LEARNER-2736
// https://openedx.atlassian.net/browse/LEARNER-2735
class RenderForm extends React.Component { class RenderForm extends React.Component {
constructor(props) { constructor(props) {
...@@ -24,6 +24,7 @@ class RenderForm extends React.Component { ...@@ -24,6 +24,7 @@ class RenderForm extends React.Component {
this.state = { this.state = {
currentRequest: null, currentRequest: null,
errorList: [], errorList: [],
success: true,
}; };
this.submitForm = this.submitForm.bind(this); this.submitForm = this.submitForm.bind(this);
this.setErrorState = this.setErrorState.bind(this); this.setErrorState = this.setErrorState.bind(this);
...@@ -36,11 +37,11 @@ class RenderForm extends React.Component { ...@@ -36,11 +37,11 @@ class RenderForm extends React.Component {
} }
submitForm() { submitForm() {
const url = 'https://arbisoft.zendesk.com/api/v2/tickets.json', const url = 'https://example.zendesk.com/api/v2/tickets.json',
$userInfo = $('.user-info'), $userInfo = $('.user-info'),
request = new XMLHttpRequest(), request = new XMLHttpRequest(),
$course = $('#course'), $course = $('#course'),
accessToken = 'd6ed06821334b6584dd9607d04007c281007324ed07e087879c9c44835c684da', accessToken = 'abc000',
data = { data = {
subject: $('#subject').val(), subject: $('#subject').val(),
comment: { comment: {
...@@ -78,11 +79,11 @@ class RenderForm extends React.Component { ...@@ -78,11 +79,11 @@ class RenderForm extends React.Component {
request.onreadystatechange = function success() { request.onreadystatechange = function success() {
if (request.readyState === 4 && request.status === 201) { if (request.readyState === 4 && request.status === 201) {
// TODO needs to remove after implementing success page this.setState({
const alert = 'Request submitted successfully.'; success: true,
alert(); });
} }
}; }.bind(this);
request.onerror = function error() { request.onerror = function error() {
this.setErrorState([gettext('Something went wrong. Please try again later.')]); this.setErrorState([gettext('Something went wrong. Please try again later.')]);
...@@ -118,12 +119,26 @@ class RenderForm extends React.Component { ...@@ -118,12 +119,26 @@ class RenderForm extends React.Component {
return false; return false;
} }
render() { renderSuccess() {
return (
<Success
platformName={this.props.context.platformName}
homepageUrl={this.props.context.homepageUrl}
dashboardUrl={this.props.context.dashboardUrl}
isLoggedIn={this.props.context.user !== undefined}
/>
);
}
renderSupportForm() {
let userElement; let userElement;
if (this.props.context.user) { if (this.props.context.user) {
userElement = <LoggedInUser userInformation={this.props.context.user} />; userElement = <LoggedInUser userInformation={this.props.context.user} />;
} else { } else {
userElement = <LoggedOutUser loginUrl={this.props.context.loginQuery} />; userElement = (<LoggedOutUser
platformName={this.props.context.platformName}
loginUrl={this.props.context.loginQuery}
/>);
} }
return ( return (
...@@ -150,7 +165,7 @@ class RenderForm extends React.Component { ...@@ -150,7 +165,7 @@ class RenderForm extends React.Component {
<a <a
href={this.props.context.marketingUrl} href={this.props.context.marketingUrl}
className="btn btn-secondary help-button" className="btn btn-secondary help-button"
>{gettext('Search the edX Help Center')}</a> >{`Search the ${this.props.context.platformName} Help Center`}</a>
</div> </div>
</div> </div>
...@@ -195,6 +210,14 @@ class RenderForm extends React.Component { ...@@ -195,6 +210,14 @@ class RenderForm extends React.Component {
</div> </div>
); );
} }
render() {
if (this.state.success) {
return this.renderSuccess();
}
return this.renderSupportForm();
}
} }
RenderForm.propTypes = { RenderForm.propTypes = {
......
/* global gettext */
/* eslint one-var: ["error", "always"] */
import React from 'react';
import PropTypes from 'prop-types';
function Success({ platformName, homepageUrl, dashboardUrl, isLoggedIn }) {
let btnText,
btnUrl;
if (isLoggedIn) {
btnText = gettext('Go to my Dashboard');
btnUrl = dashboardUrl;
} else {
btnText = gettext(`Go to ${platformName} Home`);
btnUrl = homepageUrl;
}
return (<div className="contact-us-wrapper">
<div className="row">
<div className="col-sm-12">
<h2>{gettext('Contact Us')}</h2>
</div>
</div>
<div className="row">
<div className="col-sm-12">
<p>{gettext('Thank you for submitting a request! We will contact you within 24 hours.')}</p>
</div>
</div>
<div className="row">
<div className="col-sm-12">
<a
href={btnUrl}
className="btn btn-secondary help-button"
>{btnText}
</a>
</div>
</div>
</div>);
}
Success.propTypes = {
platformName: PropTypes.string.isRequired,
dashboardUrl: PropTypes.string.isRequired,
homepageUrl: PropTypes.string.isRequired,
isLoggedIn: PropTypes.bool.isRequired,
};
export default Success;
""" """
Signle support contact view Signle support contact view
""" """
from django.conf import settings
from django.views.generic import View from django.views.generic import View
from edxmako.shortcuts import render_to_response from edxmako.shortcuts import render_to_response
from student.models import CourseEnrollment from student.models import CourseEnrollment
from openedx.core.djangoapps.site_configuration import helpers
class ContactUsView(View): class ContactUsView(View):
""" """
...@@ -14,7 +15,9 @@ class ContactUsView(View): ...@@ -14,7 +15,9 @@ class ContactUsView(View):
""" """
def get(self, request): def get(self, request):
context = {} context = {
'platform_name': helpers.get_value('platform_name', settings.PLATFORM_NAME)
}
if request.user.is_authenticated(): if request.user.is_authenticated():
context['user_enrollments'] = CourseEnrollment.enrollments_for_user(request.user) context['user_enrollments'] = CourseEnrollment.enrollments_for_user(request.user)
......
<%page expression_filter="h"/> <%page expression_filter="h"/>
<%! <%!
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from openedx.core.djangolib.js_utils import js_escaped_string from openedx.core.djangolib.js_utils import js_escaped_string
%> %>
...@@ -11,7 +13,7 @@ from openedx.core.djangolib.js_utils import js_escaped_string ...@@ -11,7 +13,7 @@ from openedx.core.djangolib.js_utils import js_escaped_string
<%block name="title"> <%block name="title">
<title> <title>
${_("Contact US")} ${_("{platform_name} Support: Contact Us").format(platform_name=platform_name)}
</title> </title>
</%block> </%block>
...@@ -26,8 +28,11 @@ from openedx.core.djangolib.js_utils import js_escaped_string ...@@ -26,8 +28,11 @@ from openedx.core.djangolib.js_utils import js_escaped_string
<%static:webpack entry="SingleSupportForm"> <%static:webpack entry="SingleSupportForm">
var context = { var context = {
'platformName': "${platform_name | n, js_escaped_string}",
'marketingUrl': "${marketing_link('FAQ') | n, js_escaped_string}", 'marketingUrl': "${marketing_link('FAQ') | n, js_escaped_string}",
'loginQuery': "/login${login_query() | n, js_escaped_string}", 'loginQuery': "/login${login_query() | n, js_escaped_string}",
'dashboardUrl': "${reverse('dashboard') | n, js_escaped_string}",
'homepageUrl': "${marketing_link('ROOT') | n, js_escaped_string}",
} }
% if user.is_authenticated(): % if user.is_authenticated():
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment