Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ import { MultipleChoiceDialogComponent } from './components/multiple-choice-dial
import { NavigationComponent } from './components/navigation/navigation.component';
import { ReferenceEditDialogComponent } from './components/reference-edit-dialog/reference-edit-dialog.component';
import { HistoryTimelineComponent } from './components/stix/stix-page-tabs/history-timeline/history-timeline.component';
import { MembershipSectionComponent } from './components/stix/stix-page-tabs/membership-section/membership-section.component';
import { ReferenceSidebarComponent } from './components/resources-drawer/reference-sidebar/reference-sidebar.component';
import { ResourcesDrawerComponent } from './components/resources-drawer/resources-drawer.component';
import { SearchComponent } from './components/resources-drawer/search/search.component';
Expand Down Expand Up @@ -260,6 +261,7 @@ export function initConfig(appConfigService: AppConfigService) {
AddDialogComponent,
DeleteDialogComponent,
HistoryTimelineComponent,
MembershipSectionComponent,
ReferenceSidebarComponent,
ReferenceEditDialogComponent,
MultipleChoiceDialogComponent,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
<section class="membership-section">
<header class="membership-header">
<h2>Release Track Distribution</h2>

<div class="membership-header-actions">
<button
type="button"
class="membership-action-button"
[disabled]="!hasSelection"
(click)="clearSelection()">
Clear
</button>

<button
type="button"
class="membership-action-button membership-action-button--primary"
[disabled]="selectedReleaseCount !== 2"
(click)="compareSelectedReleases()">
Compare ({{ selectedReleaseCount }}/2)
</button>
</div>
</header>

<div *ngIf="loading" class="loading-state">
Loading release track membership...
</div>

<div *ngIf="!loading" class="release-track-list">
<article
*ngFor="let membership of memberships; trackBy: trackByMembership"
class="release-track-card">
Comment on lines +28 to +31

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may be worth adding a way to add an object to a track from this interface, so users can manage that without leaving the page. If the object isn’t currently in any tracks, we could show an empty state here with something like “This object is not in any tracks yet” and an action to add it to a release track

<header class="release-track-header">
<div class="release-track-heading">
<h3>{{ getTrackName(membership) }}</h3>
<p>{{ getTrackDescription(membership) }}</p>
</div>

<div class="release-track-actions">
<button
*ngIf="canViewReleaseTrackDashboard"
type="button"
class="view-track-button"
[disabled]="!hasSelectedReleaseForTrack(membership)"
(click)="viewTrack(membership, $event)">
View Track

<span class="external-link-icon" aria-hidden="true"> ↗ </span>
</button>

<span
class="track-type-badge"
[class.track-type-badge--virtual]="isVirtualTrack(membership)">
{{ getTrackType(membership) }}
</span>
</div>
</header>

<div class="release-track-content">
<section class="draft-column">
<h4>Current Draft Status</h4>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The small headers look great in dark mode, but don't quite pass the accessibility contrast in light mode, can we update these to be a darker blue in light mode?

Image Image


<p *ngIf="!hasCurrentDraft(membership)" class="no-current-draft">
Not in current draft.
</p>

<div
*ngIf="hasCurrentDraft(membership)"
class="draft-card"
(click)="$event.stopPropagation()">
<label class="release-selection">
<input
type="checkbox"
[checked]="
isReleaseSelected(getCurrentDraft(membership), membership)
"
[disabled]="
!isReleaseSelected(getCurrentDraft(membership), membership) &&
selectedReleaseCount >= 2
"
(click)="$event.stopPropagation()"
(change)="
toggleReleaseSelection(
getCurrentDraft(membership),
membership,
$any($event.target).checked
)
" />

<span class="release-information">
<strong
class="draft-status"
[class.draft-status--in-review]="isDraftInReview(membership)"
[class.draft-status--staged]="isDraftStaged(membership)">
{{ getDraftStatusLabel(membership) }}
</strong>

<small>
{{ getDraftDateLabel(membership) }}
</small>
</span>
</label>

<div class="status-progress">
<span
class="status-step"
[class.status-step--active]="
isDraftStepActive(membership, 'work-in-progress')
">
WIP
</span>

<span
class="status-step"
[class.status-step--review-active]="isDraftInReview(membership)"
[class.status-step--active]="
isDraftStepActive(membership, 'review')
">
Review
</span>

<span
class="status-step"
[class.status-step--staged-active]="isDraftStaged(membership)"
[class.status-step--active]="
isDraftStepActive(membership, 'staged')
">
Staged
</span>
</div>
</div>
</section>

<section class="releases-column">
<h4>Production Releases</h4>

<p
*ngIf="getProductionReleases(membership).length === 0"
class="no-production-releases">
No production releases found.
</p>

<div
*ngIf="getProductionReleases(membership).length > 0"
class="production-release-list"
(click)="$event.stopPropagation()">
<label
*ngFor="
let release of getProductionReleases(membership);
trackBy: trackByRelease
"
class="production-release">
<input
type="checkbox"
[checked]="isReleaseSelected(release, membership)"
[disabled]="
!isReleaseSelected(release, membership) &&
selectedReleaseCount >= 2
"
(click)="$event.stopPropagation()"
(change)="
toggleReleaseSelection(
release,
membership,
$any($event.target).checked
)
" />

<span class="release-tag-icon" aria-hidden="true"></span>

<span class="release-information">
<strong>{{ getReleaseVersion(release) }}</strong>
<small>{{ getReleaseDateLabel(release) }}</small>
</span>
</label>
</div>
</section>
</div>
</article>
</div>
</section>
Loading
Loading