Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DTL (Test > Levelbuilder): 04d2a073 #26697

Merged
merged 17 commits into from
Jan 22, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
1cabf1c
Move session dismiss version redirect logic into its own module
maddiedierker Jan 19, 2019
37e8135
Refactor to use new dismissVersionRedirect module
maddiedierker Jan 19, 2019
21b1a6b
Use course name instead of script name where available
maddiedierker Jan 21, 2019
cc4b35c
Merge pull request #26668 from code-dot-org/staging
deploy-code-org Jan 21, 2019
fa8f00e
Import/export dismissVersionRedirect helper functions separately
maddiedierker Jan 22, 2019
5d910a8
Merge pull request #26676 from code-dot-org/staging
deploy-code-org Jan 22, 2019
5871ae4
Merge pull request #26680 from code-dot-org/staging
deploy-code-org Jan 22, 2019
2fc909d
Merge pull request #26682 from code-dot-org/staging
deploy-code-org Jan 22, 2019
12b8923
Merge pull request #26683 from code-dot-org/staging
deploy-code-org Jan 22, 2019
794a7e3
Merge pull request #26685 from code-dot-org/staging
deploy-code-org Jan 22, 2019
1be63e3
Merge pull request #26688 from code-dot-org/staging
deploy-code-org Jan 22, 2019
0b4cf5b
join #infra-production when running bin/dotd script
davidsbailey Jan 22, 2019
631c9d2
Merge pull request #26691 from code-dot-org/levelbuilder
Hamms Jan 22, 2019
224d874
sync pegasus strings 1/22 -Maddie
deploy-code-org Jan 22, 2019
3fad62c
Merge pull request #26657 from code-dot-org/versioning-feedback-2
Jan 22, 2019
a23e3ca
Merge pull request #26690 from code-dot-org/join-infra-prod
davidsbailey Jan 22, 2019
04d2a07
Merge pull request #26695 from code-dot-org/staging
deploy-code-org Jan 22, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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