diff --git a/app/controllers/dashboard.js b/app/controllers/dashboard.js index 4dfb257b562..1af99980699 100644 --- a/app/controllers/dashboard.js +++ b/app/controllers/dashboard.js @@ -10,6 +10,7 @@ import ajax from '../utils/ajax'; const TO_SHOW = 5; export default class DashboardController extends Controller { + @service session; @service store; hasMore = false; diff --git a/app/controllers/me/crates.js b/app/controllers/me/crates.js deleted file mode 100644 index 279a04acf10..00000000000 --- a/app/controllers/me/crates.js +++ /dev/null @@ -1,33 +0,0 @@ -import Controller from '@ember/controller'; -import { tracked } from '@glimmer/tracking'; - -import { pagination } from '../../utils/pagination'; - -// TODO: reduce duplicatoin with controllers/crates - -export default class MeCratesController extends Controller { - queryParams = ['page', 'per_page', 'sort']; - @tracked page = '1'; - @tracked per_page = 10; - @tracked sort = 'alpha'; - - @pagination() pagination; - - get currentSortBy() { - if (this.sort === 'downloads') { - return 'All-Time Downloads'; - } else if (this.sort === 'recent-downloads') { - return 'Recent Downloads'; - } else if (this.sort === 'recent-updates') { - return 'Recent Updates'; - } else if (this.sort === 'new') { - return 'Newly Added'; - } else { - return 'Alphabetical'; - } - } - - get totalItems() { - return this.model.meta.total ?? 0; - } -} diff --git a/app/routes/me/crates.js b/app/routes/me/crates.js index 476803bbb76..877e7147f63 100644 --- a/app/routes/me/crates.js +++ b/app/routes/me/crates.js @@ -3,15 +3,13 @@ import { service } from '@ember/service'; import AuthenticatedRoute from '../-authenticated-route'; export default class MeCratesRoute extends AuthenticatedRoute { - @service store; + @service router; - queryParams = { - page: { refreshModel: true }, - sort: { refreshModel: true }, - }; + redirect(model, transition) { + // Redirect to the user's profile page (/users/{username}) with the same query parameters + const username = this.session.currentUser.login; + const queryParams = transition.to.queryParams; - model(params) { - params.user_id = this.session.currentUser.id; - return this.store.query('crate', params); + this.router.transitionTo('user', username, { queryParams }); } } diff --git a/app/routes/user.js b/app/routes/user.js index e8b7175f512..719ae96933d 100644 --- a/app/routes/user.js +++ b/app/routes/user.js @@ -5,6 +5,7 @@ import { service } from '@ember/service'; export default class UserRoute extends Route { @service notifications; @service router; + @service session; @service store; queryParams = { @@ -18,7 +19,12 @@ export default class UserRoute extends Route { let user = await this.store.queryRecord('user', { user_id }); params.user_id = user.get('id'); - params.include_yanked = 'n'; + + let isCurrentUser = params.user_id === this.session.currentUser?.id; + if (!isCurrentUser) { + params.include_yanked = 'n'; + } + let crates = await this.store.query('crate', params); return { crates, user }; diff --git a/app/templates/dashboard.gjs b/app/templates/dashboard.gjs index b52c4b63ca7..937c603d711 100644 --- a/app/templates/dashboard.gjs +++ b/app/templates/dashboard.gjs @@ -36,7 +36,7 @@ import formatNum from 'crates-io/helpers/format-num'; {{#if @controller.hasMoreCrates}} - Show all + Show all {{/if}} diff --git a/app/templates/me/crates.css b/app/templates/me/crates.css deleted file mode 100644 index e431c4c8926..00000000000 --- a/app/templates/me/crates.css +++ /dev/null @@ -1,10 +0,0 @@ -.results-meta { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: var(--space-s); -} - -.list { - margin-bottom: var(--space-s); -} diff --git a/app/templates/me/crates.gjs b/app/templates/me/crates.gjs deleted file mode 100644 index e44b47903d2..00000000000 --- a/app/templates/me/crates.gjs +++ /dev/null @@ -1,40 +0,0 @@ -import { hash } from '@ember/helper'; - -import pageTitle from 'ember-page-title/helpers/page-title'; - -import CrateList from 'crates-io/components/crate-list'; -import PageHeader from 'crates-io/components/page-header'; -import Pagination from 'crates-io/components/pagination'; -import ResultsCount from 'crates-io/components/results-count'; -import SortDropdown from 'crates-io/components/sort-dropdown'; - - diff --git a/e2e/routes/me/crates.spec.ts b/e2e/routes/me/crates.spec.ts new file mode 100644 index 00000000000..f08109f55ec --- /dev/null +++ b/e2e/routes/me/crates.spec.ts @@ -0,0 +1,11 @@ +import { expect, test } from '@/e2e/helper'; + +test.describe('Route | me/crates', { tag: '@routes' }, () => { + test('redirects to user profile page', async ({ page, msw }) => { + let user = msw.db.user.create({ login: 'johnnydee' }); + await msw.authenticateAs(user); + + await page.goto('/me/crates?page=2&sort=downloads'); + await expect(page).toHaveURL('/users/johnnydee?page=2&sort=downloads'); + }); +}); diff --git a/tests/routes/me/crates-test.js b/tests/routes/me/crates-test.js new file mode 100644 index 00000000000..f3fa0dbceb2 --- /dev/null +++ b/tests/routes/me/crates-test.js @@ -0,0 +1,18 @@ +import { currentURL } from '@ember/test-helpers'; +import { module, test } from 'qunit'; + +import { setupApplicationTest } from 'crates-io/tests/helpers'; + +import { visit } from '../../helpers/visit-ignoring-abort'; + +module('Route | me/crates', function (hooks) { + setupApplicationTest(hooks); + + test('redirects to user profile page', async function (assert) { + let user = this.db.user.create({ login: 'johnnydee' }); + this.authenticateAs(user); + + await visit('/me/crates?page=2&sort=downloads'); + assert.strictEqual(currentURL(), '/users/johnnydee?page=2&sort=downloads'); + }); +});