Skip to content

Commit

Permalink
Merge pull request #26697 from code-dot-org/dtl_candidate_04d2a073
Browse files Browse the repository at this point in the history
  • Loading branch information
deploy-code-org committed Jan 22, 2019
2 parents add5168 + 04d2a07 commit 84a94f9
Show file tree
Hide file tree
Showing 86 changed files with 68,954 additions and 235 deletions.
11 changes: 10 additions & 1 deletion apps/src/code-studio/components/progress/ScriptOverview.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { resourceShape } from '@cdo/apps/templates/courseOverview/resourceType';
import { hasLockableStages } from '@cdo/apps/code-studio/progressRedux';
import ScriptOverviewHeader from './ScriptOverviewHeader';
import { isScriptHiddenForSection } from '@cdo/apps/code-studio/hiddenStageRedux';
import { onDismissRedirectDialog, dismissedRedirectDialog } from '@cdo/apps/util/dismissVersionRedirect';

/**
* Stage progress component used in level header and script overview.
Expand All @@ -35,6 +36,7 @@ class ScriptOverview extends React.Component {
version_year: PropTypes.string.isRequired,
version_title: PropTypes.string.isRequired,
})).isRequired,
courseName: PropTypes.string,

// redux provided
perLevelProgress: PropTypes.object.isRequired,
Expand Down Expand Up @@ -63,6 +65,9 @@ class ScriptOverview extends React.Component {
}

onCloseRedirectDialog = () => {
const {courseName, scriptName} = this.props;
// Use course name if available, and script name if not.
onDismissRedirectDialog(courseName || scriptName);
this.setState({
showRedirectDialog: false,
});
Expand Down Expand Up @@ -92,8 +97,11 @@ class ScriptOverview extends React.Component {
versions,
hiddenStageState,
selectedSectionId,
courseName,
} = this.props;

const displayRedirectDialog = redirectScriptUrl && !dismissedRedirectDialog(courseName || scriptName);

let scriptProgress = NOT_STARTED;
if (scriptCompleted) {
scriptProgress = COMPLETED;
Expand All @@ -108,7 +116,7 @@ class ScriptOverview extends React.Component {
<div>
{onOverviewPage && (
<div>
{redirectScriptUrl &&
{displayRedirectDialog &&
<RedirectDialog
isOpen={this.state.showRedirectDialog}
details={i18n.assignedToNewerVersion()}
Expand All @@ -123,6 +131,7 @@ class ScriptOverview extends React.Component {
showRedirectWarning={showRedirectWarning}
showHiddenUnitWarning={isHiddenUnit}
versions={versions}
courseName={courseName}
/>
{!professionalLearningCourse && viewAs === ViewType.Teacher &&
(scriptHasLockableStages || scriptAllowsHiddenStages) &&
Expand Down
28 changes: 6 additions & 22 deletions apps/src/code-studio/components/progress/ScriptOverviewHeader.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@ import { announcementShape, VisibilityType } from '@cdo/apps/code-studio/scriptA
import Notification, { NotificationType } from '@cdo/apps/templates/Notification';
import i18n from '@cdo/locale';
import color from '@cdo/apps/util/color';

// A session variable storing a comma-delimited list of course/script names for which
// the user has already dismissed the version redirect warning.
const DISMISSED_REDIRECT_WARNINGS_SESSION_KEY = 'dismissedRedirectWarnings';
import { dismissedRedirectWarning, onDismissRedirectWarning } from '@cdo/apps/util/dismissVersionRedirect';

const SCRIPT_OVERVIEW_WIDTH = 1100;

Expand Down Expand Up @@ -79,6 +76,7 @@ class ScriptOverviewHeader extends Component {
version_title: PropTypes.string.isRequired,
})).isRequired,
showHiddenUnitWarning: PropTypes.bool,
courseName: PropTypes.string,
};

componentDidMount() {
Expand Down Expand Up @@ -138,21 +136,6 @@ class ScriptOverviewHeader extends Component {
return currentAnnouncements;
};

dismissedRedirectWarning = () => {
const dismissedRedirectWarnings = sessionStorage.getItem(DISMISSED_REDIRECT_WARNINGS_SESSION_KEY);
return (dismissedRedirectWarnings || '').includes(this.props.scriptName);
};

onDismissRedirectWarning = () => {
let dismissedRedirectWarnings = sessionStorage.getItem(DISMISSED_REDIRECT_WARNINGS_SESSION_KEY);
if (dismissedRedirectWarnings) {
dismissedRedirectWarnings += `,${this.props.scriptName}`;
} else {
dismissedRedirectWarnings = this.props.scriptName;
}
sessionStorage.setItem(DISMISSED_REDIRECT_WARNINGS_SESSION_KEY, dismissedRedirectWarnings);
};

render() {
const {
plcHeaderProps,
Expand All @@ -167,9 +150,10 @@ class ScriptOverviewHeader extends Component {
showRedirectWarning,
versions,
showHiddenUnitWarning,
courseName,
} = this.props;


const displayVersionWarning = showRedirectWarning && !dismissedRedirectWarning(courseName || scriptName);

let versionWarningDetails;
if (showCourseUnitVersionWarning) {
Expand All @@ -192,14 +176,14 @@ class ScriptOverviewHeader extends Component {
width={SCRIPT_OVERVIEW_WIDTH}
/>
}
{(showRedirectWarning && !this.dismissedRedirectWarning()) &&
{displayVersionWarning &&
<Notification
type={NotificationType.warning}
notice=""
details={i18n.redirectCourseVersionWarningDetails()}
dismissible={true}
width={SCRIPT_OVERVIEW_WIDTH}
onDismiss={this.onDismissRedirectWarning}
onDismiss={() => onDismissRedirectWarning(courseName || scriptName)}
/>
}
{versionWarningDetails &&
Expand Down
1 change: 1 addition & 0 deletions apps/src/code-studio/progress.js
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ progress.renderCourseProgress = function (scriptData) {
showRedirectWarning={scriptData.show_redirect_warning}
redirectScriptUrl={scriptData.redirect_script_url}
versions={scriptData.versions}
courseName={scriptData.course_name}
/>
</Provider>,
mountPoint
Expand Down
32 changes: 10 additions & 22 deletions apps/src/templates/courseOverview/CourseOverview.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@ import VerifiedResourcesNotification from './VerifiedResourcesNotification';
import * as utils from '../../utils';
import { queryParams } from '../../code-studio/utils';
import i18n from '@cdo/locale';
import {
onDismissRedirectDialog,
dismissedRedirectDialog,
onDismissRedirectWarning,
dismissedRedirectWarning
} from '@cdo/apps/util/dismissVersionRedirect';
import RedirectDialog from '@cdo/apps/code-studio/components/RedirectDialog';
import Notification, { NotificationType } from '@cdo/apps/templates/Notification';
import color from '@cdo/apps/util/color';

// A session variable storing a comma-delimited list of course/script names for which
// the user has already dismissed the version redirect warning.
const DISMISSED_REDIRECT_WARNINGS_SESSION_KEY = 'dismissedRedirectWarnings';

const styles = {
main: {
width: styleConstants['content-width'],
Expand Down Expand Up @@ -109,22 +111,8 @@ export default class CourseOverview extends Component {
});
};

dismissedRedirectWarning = () => {
const dismissedRedirectWarnings = sessionStorage.getItem(DISMISSED_REDIRECT_WARNINGS_SESSION_KEY);
return (dismissedRedirectWarnings || '').includes(this.props.name);
};

onDismissRedirectWarning = () => {
let dismissedRedirectWarnings = sessionStorage.getItem(DISMISSED_REDIRECT_WARNINGS_SESSION_KEY);
if (dismissedRedirectWarnings) {
dismissedRedirectWarnings += `,${this.props.name}`;
} else {
dismissedRedirectWarnings = this.props.name;
}
sessionStorage.setItem(DISMISSED_REDIRECT_WARNINGS_SESSION_KEY, dismissedRedirectWarnings);
};

onCloseRedirectDialog = () => {
onDismissRedirectDialog(this.props.name);
this.setState({
showRedirectDialog: false,
});
Expand Down Expand Up @@ -164,7 +152,7 @@ export default class CourseOverview extends Component {

return (
<div style={mainStyle}>
{redirectToCourseUrl &&
{redirectToCourseUrl && !dismissedRedirectDialog(name) &&
<RedirectDialog
isOpen={this.state.showRedirectDialog}
details={i18n.assignedToNewerVersion()}
Expand All @@ -173,13 +161,13 @@ export default class CourseOverview extends Component {
redirectButtonText={i18n.goToAssignedVersion()}
/>
}
{(showRedirectWarning && !this.dismissedRedirectWarning()) &&
{(showRedirectWarning && !dismissedRedirectWarning(name)) &&
<Notification
type={NotificationType.warning}
notice=""
details={i18n.redirectCourseVersionWarningDetails()}
dismissible={true}
onDismiss={this.onDismissRedirectWarning}
onDismiss={() => onDismissRedirectWarning(name)}
/>
}
{showVersionWarning &&
Expand Down
36 changes: 36 additions & 0 deletions apps/src/util/dismissVersionRedirect.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// A session variable storing a comma-delimited list of course/script names for which:
// ...the user has already dismissed the version redirect warning.
const DISMISSED_REDIRECT_WARNINGS_SESSION_KEY = 'dismissedRedirectWarnings';
// ...the user has already dismissed the version redirect dialog (<RedirectDialog/> component).
const DISMISSED_REDIRECT_DIALOGS_SESSION_KEY = 'dismissedRedirectDialogs';

export const dismissedRedirect = (sessionKey, name) => {
const dismissedRedirects = sessionStorage.getItem(sessionKey);
return (dismissedRedirects || '').split(',').includes(name);
};

export const dismissedRedirectWarning = (name) => {
return dismissedRedirect(DISMISSED_REDIRECT_WARNINGS_SESSION_KEY, name);
};

export const dismissedRedirectDialog = (name) => {
return dismissedRedirect(DISMISSED_REDIRECT_DIALOGS_SESSION_KEY, name);
};

export const onDismissRedirect = (sessionKey, name) => {
let dismissedRedirects = sessionStorage.getItem(sessionKey);
if (dismissedRedirects) {
dismissedRedirects += `,${name}`;
} else {
dismissedRedirects = name;
}
sessionStorage.setItem(sessionKey, dismissedRedirects);
};

export const onDismissRedirectWarning = (name) => {
return onDismissRedirect(DISMISSED_REDIRECT_WARNINGS_SESSION_KEY, name);
};

export const onDismissRedirectDialog = (name) => {
return onDismissRedirect(DISMISSED_REDIRECT_DIALOGS_SESSION_KEY, name);
};
1 change: 0 additions & 1 deletion apps/src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,6 @@ export function trySetLocalStorage(item, value) {
} catch (e) {
return false;
}

}

export function tryGetSessionStorage(key, defaultValue) {
Expand Down
1 change: 1 addition & 0 deletions bin/dotd
Original file line number Diff line number Diff line change
Expand Up @@ -515,6 +515,7 @@ def main
Slack.join_room('deploy-status')
Slack.join_room('infra-staging')
Slack.join_room('infra-test')
Slack.join_room('infra-production')
Slack.join_room('levelbuilder')

puts_script_intro
Expand Down
2 changes: 1 addition & 1 deletion dashboard/app/views/scripts/show.html.haml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
-# This variable will get any data we need to pass along to scriptOverview.js
- script_data = @script.summarize(true, current_user).merge({show_redirect_warning: show_redirect_warning, redirect_script_url: redirect_script_url})
- script_data = @script.summarize(true, current_user).merge({course_name: @script.course&.name, show_redirect_warning: show_redirect_warning, redirect_script_url: redirect_script_url})
- scriptOverviewData = { scriptData: script_data }
- if @script.professional_learning_course? && @current_user && Plc::UserCourseEnrollment.exists?(user: @current_user, plc_course: @script.plc_course_unit.plc_course)
- scriptOverviewData[:plcBreadcrumb] = {unit_name: @script.plc_course_unit.unit_name, course_view_path: course_path(@script.plc_course_unit.plc_course.get_url_name)}
Expand Down
1 change: 1 addition & 0 deletions i18n/locales/source/pegasus/mobile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,7 @@
homepage_slot_text_link_shop: "T-shirts, hats, & more"
homepage_slot_text_link_administrators: "Bring CS to your school"
homepage_header_codestudio: "Over 35 million Code.org projects created"
homepage_gallery_header: "Over %{project_count} million Code.org projects created"
homepage_header_donors: "Code.org thanks its supporters"
homepage_donors_seall: "See all"
homepage_donors_donate: "Donate"
Expand Down

0 comments on commit 84a94f9

Please sign in to comment.