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

PL: Regional partner search gets info about priority deadline dates #27924

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
135 changes: 86 additions & 49 deletions apps/src/templates/RegionalPartnerSearch.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
WorkshopSearchErrors
} from '@cdo/apps/generated/pd/sharedWorkshopConstants';
import {RegionalPartnerMiniContactPopupLink} from '@cdo/apps/code-studio/pd/regional_partner_mini_contact/RegionalPartnerMiniContact';
import Notification from '@cdo/apps/templates/Notification';
import * as color from '../util/color';
import UnsafeRenderedMarkdown from '@cdo/apps/templates/UnsafeRenderedMarkdown';
import {studio} from '@cdo/apps/lib/util/urlHelpers';
Expand Down Expand Up @@ -215,11 +216,9 @@ class RegionalPartnerSearch extends Component {
const appState = partnerInfo && partnerInfo.application_state.state;
const appsOpenDate =
partnerInfo && partnerInfo.application_state.earliest_open_date;

let applicationLink = studio('/pd/application/teacher');
if (this.state.nominated) {
applicationLink += '?nominated=true';
}
const appsPriorityDeadlineDate =
partnerInfo &&
partnerInfo.application_state.upcoming_priority_deadline_date;

return (
<div>
Expand All @@ -245,11 +244,10 @@ class RegionalPartnerSearch extends Component {
<div>
We are unable to find this ZIP code. You can still apply directly:
</div>
<a href={applicationLink}>
<button type="button" style={styles.bigButton}>
Start application
</button>
</a>
<StartApplicationButton
nominated={this.state.nominated}
priorityDeadlineDate={appsPriorityDeadlineDate}
/>
</div>
)}

Expand Down Expand Up @@ -299,11 +297,10 @@ class RegionalPartnerSearch extends Component {
</a>{' '}
for other Professional Development options in your area.
</p>
<a href={applicationLink}>
<button type="button" style={styles.bigButton}>
Start application
</button>
</a>
<StartApplicationButton
nominated={this.state.nominated}
priorityDeadlineDate={appsPriorityDeadlineDate}
/>
</div>
</div>
)}
Expand All @@ -315,29 +312,24 @@ class RegionalPartnerSearch extends Component {
<div style={styles.action}>
{appState === WorkshopApplicationStates.currently_open &&
!partnerInfo.link_to_partner_application && (
<a
className="professional_learning_link"
<StartApplicationButton
class="professional_learning_link"
id={`id-${partnerInfo.id}`}
href={applicationLink}
>
<button type="button" style={styles.bigButton}>
Start application
</button>
</a>
nominated={this.state.nominated}
priorityDeadlineDate={appsPriorityDeadlineDate}
/>
)}

{appState === WorkshopApplicationStates.currently_open &&
partnerInfo.link_to_partner_application && (
<a
className="professional_learning_link"
<StartApplicationButton
class="professional_learning_link"
id={`id-${partnerInfo.id}`}
href={partnerInfo.link_to_partner_application}
target="_blank"
>
<button type="button" style={styles.bigButton}>
Apply on partner's site
</button>
</a>
link={partnerInfo.link_to_partner_application}
partnerSite={true}
nominated={this.state.nominated}
priorityDeadlineDate={appsPriorityDeadlineDate}
/>
)}
</div>

Expand Down Expand Up @@ -463,29 +455,24 @@ class RegionalPartnerSearch extends Component {
{/* These two links duplicate the buttons that appear above. */}
{appState === WorkshopApplicationStates.currently_open &&
!partnerInfo.link_to_partner_application && (
<a
className="professional_learning_link"
<StartApplicationButton
class="professional_learning_link"
id={`id-${partnerInfo.id}`}
href={applicationLink}
>
<button type="button" style={styles.bigButton}>
Start application
</button>
</a>
nominated={this.state.nominated}
priorityDeadlineDate={appsPriorityDeadlineDate}
/>
)}

{appState === WorkshopApplicationStates.currently_open &&
partnerInfo.link_to_partner_application && (
<a
className="professional_learning_link"
<StartApplicationButton
class="professional_learning_link"
id={`id-${partnerInfo.id}`}
href={partnerInfo.link_to_partner_application}
target="_blank"
>
<button type="button" style={styles.bigButton}>
Apply on partner's site
</button>
</a>
link={partnerInfo.link_to_partner_application}
partnerSite={true}
nominated={this.state.nominated}
priorityDeadlineDate={appsPriorityDeadlineDate}
/>
)}
</div>
)}
Expand All @@ -494,6 +481,56 @@ class RegionalPartnerSearch extends Component {
}
}

const StartApplicationButton = ({
className,
id,
link,
partnerSite,
nominated,
priorityDeadlineDate
}) => {
if (!link) {
link = studio('/pd/application/teacher');
if (nominated) {
link += '?nominated=true';
}
}
const target = partnerSite ? '_blank' : null;
const buttonText = partnerSite
? "Apply on partner's site"
: 'Start application';

const notificationText = priorityDeadlineDate
? `Priority deadline for your region is ${priorityDeadlineDate}. Sign up now to reserve your space!`
: 'We still have spaces at your local workshop! It’s not too late to sign up.';

return (
<div>
<Notification
type="information"
notice=""
details={notificationText}
dismissible={false}
/>

<a className={className} id={id} target={target} href={link}>
<button type="button" style={styles.bigButton}>
{buttonText}
</button>
</a>
</div>
);
};

StartApplicationButton.propTypes = {
className: PropTypes.string,
breville marked this conversation as resolved.
Show resolved Hide resolved
id: PropTypes.string,
link: PropTypes.string,
partnerSite: PropTypes.bool,
nominated: PropTypes.bool,
priorityDeadlineDate: PropTypes.string
};

export default connect(state => ({
responsiveSize: state.responsive.responsiveSize
}))(RegionalPartnerSearch);
5 changes: 5 additions & 0 deletions dashboard/app/models/regional_partner.rb
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,11 @@ def summer_workshops_application_state
end
end

# If there is a priority deadline date and it is still upcoming, then return it. Otherwise return nil.
breville marked this conversation as resolved.
Show resolved Hide resolved
def upcoming_priority_deadline_date
apps_priority_deadline_date ? Date.parse(apps_priority_deadline_date).strftime('%B %e, %Y') : nil
end

def summer_workshops_earliest_apps_open_date
if apps_open_date_csd_teacher || apps_open_date_csp_teacher
Date.parse([apps_open_date_csd_teacher, apps_open_date_csp_teacher].compact.min).strftime('%B %e, %Y')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ def summer_workshops
def application_state
{
state: object.summer_workshops_application_state,
earliest_open_date: object.summer_workshops_earliest_apps_open_date
earliest_open_date: object.summer_workshops_earliest_apps_open_date,
upcoming_priority_deadline_date: object.upcoming_priority_deadline_date
}
end
end