-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: delete old breadcrumbs and replace with bucket
- Loading branch information
1 parent
8d5aabd
commit 5f9fc61
Showing
4 changed files
with
20 additions
and
65 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,45 +1,21 @@ | ||
import { getOwner } from '@ember/application'; | ||
import Service, { inject as service } from '@ember/service'; | ||
import { computed } from '@ember/object'; | ||
import classic from 'ember-classic-decorator'; | ||
import Service from '@ember/service'; | ||
import { action } from '@ember/object'; | ||
import { tracked } from '@glimmer/tracking'; | ||
import { schedule } from '@ember/runloop'; | ||
|
||
@classic | ||
export default class BreadcrumbsService extends Service { | ||
@service router; | ||
export default class BucketService extends Service { | ||
@tracked crumbs = []; | ||
|
||
// currentURL is only used to listen to all transitions. | ||
// currentRouteName has all information necessary to compute breadcrumbs, | ||
// but it doesn't change when a transition to the same route with a different | ||
// model occurs. | ||
@computed('router.{currentURL,currentRouteName}') | ||
get breadcrumbs() { | ||
const owner = getOwner(this); | ||
const allRoutes = (this.get('router.currentRouteName') || '') | ||
.split('.') | ||
.without('') | ||
.map((segment, index, allSegments) => allSegments.slice(0, index + 1).join('.')); | ||
|
||
let crumbs = []; | ||
allRoutes.forEach(routeName => { | ||
const route = owner.lookup(`route:${routeName}`); | ||
|
||
// Routes can reset the breadcrumb trail to start anew even | ||
// if the route is deeply nested. | ||
if (route.resetBreadcrumbs) { | ||
crumbs = []; | ||
} | ||
|
||
// Breadcrumbs are either an array of static crumbs | ||
// or a function that returns breadcrumbs given the current | ||
// model for the route's controller. | ||
let breadcrumbs = route.breadcrumbs || []; | ||
if (typeof breadcrumbs === 'function') { | ||
breadcrumbs = breadcrumbs(route.get('controller.model')) || []; | ||
} | ||
|
||
crumbs.push(...breadcrumbs); | ||
@action registerBreadcrumb(crumb) { | ||
schedule('actions', this, () => { | ||
console.log('register crumb: ', crumb); | ||
this.crumbs = [...this.crumbs, crumb]; | ||
}); | ||
} | ||
|
||
@action deregisterBreadcrumb(crumb) { | ||
const newCrumbs = this.crumbs.filter(c => c !== crumb); | ||
|
||
return crumbs; | ||
this.crumbs = newCrumbs; | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.