Skip to content

Commit 459efff

Browse files
committed
Extract TokenScopes::PatternDescription component
1 parent 8aafb81 commit 459efff

File tree

5 files changed

+30
-18
lines changed

5 files changed

+30
-18
lines changed

app/components/settings/api-tokens.gjs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,19 @@ import or from 'ember-truth-helpers/helpers/or';
1414

1515
import CopyButton from 'crates-io/components/copy-button';
1616
import LoadingSpinner from 'crates-io/components/loading-spinner';
17+
import PatternDescription from 'crates-io/components/token-scopes/pattern-description';
1718
import Tooltip from 'crates-io/components/tooltip';
1819
import dateFormatDistanceToNow from 'crates-io/helpers/date-format-distance-to-now';
1920
import isClipboardSupported from 'crates-io/helpers/is-clipboard-supported';
2021

21-
import { patternDescription, scopeDescription } from '../../utils/token-scopes';
22+
import { scopeDescription } from '../../utils/token-scopes';
2223

2324
export default class ApiTokens extends Component {
2425
@service store;
2526
@service notifications;
2627
@service router;
2728

2829
scopeDescription = scopeDescription;
29-
patternDescription = patternDescription;
3030

3131
get sortedTokens() {
3232
return this.args.tokens
@@ -136,7 +136,7 @@ export default class ApiTokens extends Component {
136136

137137
{{#each (this.listToParts token.crate_scopes) as |part|~}}
138138
{{#if (eq part.type 'element')}}
139-
<strong>{{part.value}}<Tooltip>{{this.patternDescription part.value}}</Tooltip></strong>
139+
<strong>{{part.value}}<Tooltip><PatternDescription @pattern={{part.value}} /></Tooltip></strong>
140140
{{~else~}}
141141
{{part.value}}
142142
{{/if}}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import Component from '@glimmer/component';
2+
3+
import { eq } from 'ember-truth-helpers';
4+
5+
export default class PatternDescription extends Component {
6+
get prefix() {
7+
if (this.args.pattern.endsWith('*')) {
8+
return this.args.pattern.slice(0, -1);
9+
}
10+
}
11+
12+
<template>
13+
{{#if (eq @pattern '*')}}
14+
Matches all crates on crates.io
15+
{{else if this.prefix}}
16+
Matches all crates starting with
17+
<strong>{{this.prefix}}</strong>
18+
{{else}}
19+
Matches only the
20+
<strong>{{@pattern}}</strong>
21+
crate
22+
{{/if}}
23+
</template>
24+
}

app/controllers/settings/tokens/new.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { tracked } from '@glimmer/tracking';
66
import { task } from 'ember-concurrency';
77
import { TrackedArray } from 'tracked-built-ins';
88

9-
import { patternDescription, scopeDescription } from '../../../utils/token-scopes';
9+
import { scopeDescription } from '../../../utils/token-scopes';
1010

1111
export default class NewTokenController extends Controller {
1212
@service notifications;
@@ -25,7 +25,6 @@ export default class NewTokenController extends Controller {
2525

2626
ENDPOINT_SCOPES = ['change-owners', 'publish-new', 'publish-update', 'yank'];
2727

28-
patternDescription = patternDescription;
2928
scopeDescription = scopeDescription;
3029

3130
constructor() {

app/templates/settings/tokens/new.gjs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import svgJar from 'ember-svg-jar/helpers/svg-jar';
1010
import { eq, not } from 'ember-truth-helpers';
1111

1212
import LoadingSpinner from 'crates-io/components/loading-spinner';
13+
import PatternDescription from 'crates-io/components/token-scopes/pattern-description';
1314

1415
<template>
1516
<h2>New API Token</h2>
@@ -155,7 +156,7 @@ import LoadingSpinner from 'crates-io/components/loading-spinner';
155156
{{#if (not pattern.pattern)}}
156157
Please enter a crate name pattern
157158
{{else if pattern.isValid}}
158-
{{@controller.patternDescription pattern.pattern}}
159+
<PatternDescription @pattern={{pattern.pattern}} />
159160
{{else}}
160161
Invalid crate name pattern
161162
{{/if}}

app/utils/token-scopes.js

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { htmlSafe } from '@ember/template';
2-
31
const DESCRIPTIONS = {
42
'change-owners': 'Invite new crate owners or remove existing ones',
53
'publish-new': 'Publish new crates',
@@ -10,13 +8,3 @@ const DESCRIPTIONS = {
108
export function scopeDescription(scope) {
119
return DESCRIPTIONS[scope];
1210
}
13-
14-
export function patternDescription(pattern) {
15-
if (pattern === '*') {
16-
return 'Matches all crates on crates.io';
17-
} else if (pattern.endsWith('*')) {
18-
return htmlSafe(`Matches all crates starting with <strong>${pattern.slice(0, -1)}</strong>`);
19-
} else {
20-
return htmlSafe(`Matches only the <strong>${pattern}</strong> crate`);
21-
}
22-
}

0 commit comments

Comments
 (0)