Llb/worker filter improvements (#2614)
* test: 💍 clean up worker filter component tests (#2559) * Icu 15741 add show filter generator toggle to worker filter component (#2562) * feat: 🎸 add filter generator to worker filter component ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15741 * feat: 🎸 show add worker filter when none set for targets (#2564) ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15760 * Icu 15743 tag workflow (#2565) * feat: 🎸 add tag generator workflow ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15743 * test: 💍 add test cases ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15743 * refactor: 💡 update selected type name to selectedGeneratorType ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15743 * Apply suggestions from code review minor translation change Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com> * refactor: 💡 update id for generated-value ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15743 --------- Co-authored-by: Lisbet Alvarez <lisbet.alvarez@hashicorp.com> Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com> * Icu 15744 name workflow (#2566) * feat: 🎸 add name workflow ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744 * test: 💍 add "name" workflow tests for filter generator ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744 * refactor: 💡 use const test selectors for filter generator ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744 * refactor: 💡 add default option ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744 * docs: ✏️ fix comment ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744 --------- Co-authored-by: cameronperera <cameron.perera@hashicorp.com> * refactor: 💡 move worker filter generator outside of rose::form (#2574) * refactor: 💡 move worker filter generator outside of rose::form * [ICU-15718] Add worker filter route, template for empty state (#2576) * feat: 🎸 Vault Credential Store Worker Filter The Worker Filters tab will display the associated worker filter and have an empty state for when there is no worker filter assigned. * add template * Add missing copyright headers * update styling, remove Rose component * color primary is already default, remove * add rose component, remove custom css * fix test * singularize lang --------- Co-authored-by: laurenolivia <laurenolivia@users.noreply.github.com> * feat: 🎸 update worker filter field to use code editor (#2578) * feat: 🎸 update worker filter field to use code editor ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15737 * test: 💍 fix failing storage bucket tests ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15737 * test: 💍 update tests for new worker filter field (#2580) * test: 💍 update tests for new worker filter field ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15739 * Update ui/admin/tests/acceptance/storage-buckets/update-test.js Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com> --------- Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com> * [ICU-15719] Create edit worker filter route and template (#2582) * add codeblock to template * add cancel btn fn * add controller test * add save fn * display formatted worker filter text inside codeblock * move codeblock component outside rose::layout::centered * remove console.log * remove router.refresh() and refactor translations yaml * refactor translations, add breadcrumb::item * replace html elements with hds * move component, delete file * [ICU-15720] Add edit worker filter action to manage dropdown (#2593) * add acceptance test file * delete test file * add edit option to manage dropdown * update route in dropdown * add check for model isVault * add acceptance test file * delete test file * remove data test selectors, fix syntax * [ICU-15721] Remove worker filter input field (#2596) * remove worker filter input field from vault credential store form * revert yaml * [ICU-15838] Add vault credential store worker filter tests (#2595) * add data test elements * add subtests to update-test.js * add subtext to check for .hasText() * add subtest when worker filter exists * update subtest name * remove console.log * clean up * add new selectors * refactor: 💡 worker filter clean-up (#2592) * refactor: 💡 worker filter clean-up ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15816 * refactor: 💡 add aria labels & missing can save check ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15816 * refactor: 💡 pr feedback of using uuid ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15816 * Add missing copyright headers * refactor: 💡 use unique-id helper for aria labels (pr feedback) ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15816 --------- Co-authored-by: lisbet-alvarez <lisbet-alvarez@users.noreply.github.com> * refactor: 💡 update icon logic for egress worker filter (#2612) * refactor: 💡 update worker_filter help translation * refactor: 💡 add maxHeight to worker filter code blocks * refactor: 💡 use existing default option for dropdowns * refactor: 💡 hide copy button when no result to copy and remove unused styles --------- Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com> Co-authored-by: Lisbet Alvarez <lisbet.alvarez@hashicorp.com> Co-authored-by: Lauren <lauren.burwell@hashicorp.com> Co-authored-by: laurenolivia <laurenolivia@users.noreply.github.com> Co-authored-by: lisbet-alvarez <lisbet-alvarez@users.noreply.github.com>
This commit is contained in:
40 files changed
+1045
-212
No files matched your search
@@ -18,6 +18,12 @@
|
||||
{{t 'resources.credential.actions.create'}}
|
||||
</dd.Interactive>
|
||||
{{/if}}
|
||||
{{#if (and (feature-flag 'vault-worker-filter') @model.isVault)}}
|
||||
<dd.Interactive
|
||||
@route='scopes.scope.credential-stores.credential-store.edit-worker-filter'
|
||||
@text={{t 'resources.credential-store.actions.edit'}}
|
||||
/>
|
||||
{{/if}}
|
||||
{{#if (can 'delete model' @model)}}
|
||||
<dd.Separator />
|
||||
<dd.Interactive @color='critical' {{on 'click' @delete}}>
|
||||
|
||||
@@ -8,6 +8,13 @@
|
||||
{{t 'titles.details'}}
|
||||
</nav.link>
|
||||
{{#if @model.isVault}}
|
||||
{{#if (feature-flag 'vault-worker-filter')}}
|
||||
<nav.link
|
||||
@route='scopes.scope.credential-stores.credential-store.worker-filter'
|
||||
>
|
||||
{{t 'resources.credential-store.worker-filter.title'}}
|
||||
</nav.link>
|
||||
{{/if}}
|
||||
{{#if (can 'navigate model' @model collection='credential-libraries')}}
|
||||
<nav.link
|
||||
@route='scopes.scope.credential-stores.credential-store.credential-libraries'
|
||||
|
||||
@@ -115,35 +115,6 @@
|
||||
{{/if}}
|
||||
</Hds::Form::TextInput::Field>
|
||||
|
||||
{{#if (feature-flag 'vault-worker-filter')}}
|
||||
<Hds::Form::TextInput::Field
|
||||
name='worker_filter'
|
||||
@value={{@model.worker_filter}}
|
||||
@isOptional={{true}}
|
||||
@isInvalid={{@model.errors.worker_filter}}
|
||||
disabled={{form.disabled}}
|
||||
{{on 'input' (set-from-event @model 'worker_filter')}}
|
||||
as |F|
|
||||
>
|
||||
<F.Label>
|
||||
{{t 'resources.credential-store.form.worker_filter.label'}}
|
||||
</F.Label>
|
||||
<F.HelperText>
|
||||
{{t 'resources.credential-store.form.worker_filter.help'}}
|
||||
<Hds::Link::Inline @href={{doc-url 'worker-filters'}}>
|
||||
{{t 'actions.learn-more'}}
|
||||
</Hds::Link::Inline>
|
||||
</F.HelperText>
|
||||
{{#if @model.errors.worker_filter}}
|
||||
<F.Error as |E|>
|
||||
{{#each @model.errors.worker_filter as |error|}}
|
||||
<E.Message>{{error.message}}</E.Message>
|
||||
{{/each}}
|
||||
</F.Error>
|
||||
{{/if}}
|
||||
</Hds::Form::TextInput::Field>
|
||||
{{/if}}
|
||||
|
||||
{{#if (or @model.isNew form.isEditable)}}
|
||||
<Hds::Form::TextInput::Field
|
||||
name='token'
|
||||
|
||||
@@ -456,30 +456,41 @@
|
||||
{{/if}}
|
||||
|
||||
{{! worker_filter }}
|
||||
<Hds::Form::TextInput::Field
|
||||
name='worker_filter'
|
||||
@isRequired={{true}}
|
||||
@value={{@model.worker_filter}}
|
||||
@isInvalid={{@model.errors.worker_filter}}
|
||||
disabled={{form.disabled}}
|
||||
{{on 'input' (set-from-event @model 'worker_filter')}}
|
||||
as |F|
|
||||
>
|
||||
<F.Label>{{t 'resources.storage-bucket.form.worker_filter.label'}}</F.Label>
|
||||
<F.HelperText>
|
||||
{{t 'resources.storage-bucket.form.worker_filter.help'}}
|
||||
<Hds::Link::Inline @href={{doc-url 'storage-bucket.worker-filter'}}>
|
||||
{{t 'actions.learn-more'}}
|
||||
</Hds::Link::Inline>
|
||||
</F.HelperText>
|
||||
{{#if @model.errors.worker_filter}}
|
||||
<F.Error data-test-worker-filter-error as |E|>
|
||||
{{#each @model.errors.worker_filter as |error|}}
|
||||
<E.Message>{{error.message}}</E.Message>
|
||||
{{/each}}
|
||||
</F.Error>
|
||||
{{/if}}
|
||||
</Hds::Form::TextInput::Field>
|
||||
{{#let (unique-id) (unique-id) as |labelId helpId|}}
|
||||
<Hds::Form::Fieldset
|
||||
aria-labelledby={{labelId}}
|
||||
aria-describedby={{helpId}}
|
||||
class='storage-bucket-worker-filter'
|
||||
@isRequired={{true}}
|
||||
as |F|
|
||||
>
|
||||
<F.Legend id={{labelId}}>{{t
|
||||
'resources.storage-bucket.form.worker_filter.label'
|
||||
}}</F.Legend>
|
||||
<F.HelperText id={{helpId}}>
|
||||
{{t 'resources.storage-bucket.form.worker_filter.help'}}
|
||||
<Hds::Link::Inline @href={{doc-url 'storage-bucket.worker-filter'}}>
|
||||
{{t 'actions.learn-more'}}
|
||||
</Hds::Link::Inline>
|
||||
</F.HelperText>
|
||||
<F.Control>
|
||||
{{#if form.disabled}}
|
||||
<Hds::CodeBlock
|
||||
@language='bash'
|
||||
@value={{@model.worker_filter}}
|
||||
@hasCopyButton={{true}}
|
||||
data-test-worker-filter
|
||||
/>
|
||||
{{else}}
|
||||
<WorkerFilterGenerator
|
||||
@model={{@model}}
|
||||
@name='worker_filter'
|
||||
@hideToolbar={{true}}
|
||||
/>
|
||||
{{/if}}
|
||||
</F.Control>
|
||||
</Hds::Form::Fieldset>
|
||||
{{/let}}
|
||||
|
||||
{{! JUST for static credentials }}
|
||||
{{#unless this.showDynamicCredentials}}
|
||||
|
||||
@@ -13,10 +13,11 @@ import { tracked } from '@glimmer/tracking';
|
||||
|
||||
export default class FormStorageBucketAwsIndexComponent extends Component {
|
||||
// =attributes
|
||||
@tracked selectedCredentialType = this.args.model.credentialType;
|
||||
|
||||
@tracked selectedCredentialType = this.args.model.credentialType;
|
||||
@tracked showDynamicCredentials =
|
||||
this.args.model.credentialType === TYPE_CREDENTIAL_DYNAMIC;
|
||||
|
||||
/**
|
||||
* returns an array of available credential types
|
||||
* @type {array}
|
||||
@@ -28,7 +29,7 @@ export default class FormStorageBucketAwsIndexComponent extends Component {
|
||||
// =actions
|
||||
/**
|
||||
* Allows to update the credential type
|
||||
* @param type {string}
|
||||
* @param {string} type
|
||||
*/
|
||||
@action
|
||||
updateCredentialTypeSelection(type) {
|
||||
|
||||
@@ -315,30 +315,42 @@
|
||||
{{/if}}
|
||||
|
||||
{{! worker_filter }}
|
||||
<Hds::Form::TextInput::Field
|
||||
name='worker_filter'
|
||||
@isRequired={{true}}
|
||||
@value={{@model.worker_filter}}
|
||||
@isInvalid={{@model.errors.worker_filter}}
|
||||
disabled={{form.disabled}}
|
||||
{{on 'input' (set-from-event @model 'worker_filter')}}
|
||||
as |F|
|
||||
>
|
||||
<F.Label>{{t 'resources.storage-bucket.form.worker_filter.label'}}</F.Label>
|
||||
<F.HelperText>
|
||||
{{t 'resources.storage-bucket.form.worker_filter.help'}}
|
||||
<Hds::Link::Inline @href={{doc-url 'storage-bucket.worker-filter'}}>
|
||||
{{t 'actions.learn-more'}}
|
||||
</Hds::Link::Inline>
|
||||
</F.HelperText>
|
||||
{{#if @model.errors.worker_filter}}
|
||||
<F.Error data-test-worker-filter-error as |E|>
|
||||
{{#each @model.errors.worker_filter as |error|}}
|
||||
<E.Message>{{error.message}}</E.Message>
|
||||
{{/each}}
|
||||
</F.Error>
|
||||
{{/if}}
|
||||
</Hds::Form::TextInput::Field>
|
||||
{{#let (unique-id) (unique-id) as |labelId helpId|}}
|
||||
<Hds::Form::Fieldset
|
||||
aria-labelledby={{labelId}}
|
||||
aria-describedby={{helpId}}
|
||||
class='storage-bucket-worker-filter'
|
||||
@isRequired={{true}}
|
||||
as |F|
|
||||
>
|
||||
<F.Legend id={{labelId}}>{{t
|
||||
'resources.storage-bucket.form.worker_filter.label'
|
||||
}}</F.Legend>
|
||||
<F.HelperText {{helpId}}>
|
||||
{{t 'resources.storage-bucket.form.worker_filter.help'}}
|
||||
<Hds::Link::Inline @href={{doc-url 'storage-bucket.worker-filter'}}>
|
||||
{{t 'actions.learn-more'}}
|
||||
</Hds::Link::Inline>
|
||||
</F.HelperText>
|
||||
<F.Control>
|
||||
{{#if form.disabled}}
|
||||
<Hds::CodeBlock
|
||||
@maxHeight='300px'
|
||||
@language='bash'
|
||||
@value={{@model.worker_filter}}
|
||||
@hasCopyButton={{true}}
|
||||
data-test-worker-filter
|
||||
/>
|
||||
{{else}}
|
||||
<WorkerFilterGenerator
|
||||
@model={{@model}}
|
||||
@name='worker_filter'
|
||||
@hideToolbar={{true}}
|
||||
/>
|
||||
{{/if}}
|
||||
</F.Control>
|
||||
</Hds::Form::Fieldset>
|
||||
{{/let}}
|
||||
|
||||
{{! disable_credential_rotation }}
|
||||
<Hds::Form::Checkbox::Field
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
{{!
|
||||
Copyright (c) HashiCorp, Inc.
|
||||
SPDX-License-Identifier: BUSL-1.1
|
||||
}}
|
||||
|
||||
<Rose::Form
|
||||
class='full-width'
|
||||
@onSubmit={{@submit}}
|
||||
@cancel={{@cancel}}
|
||||
@disabled={{@model.isSaving}}
|
||||
as |form|
|
||||
>
|
||||
<WorkerFilterGenerator @model={{@model}} @name={{@name}} />
|
||||
|
||||
{{#if (can 'save model' @model)}}
|
||||
<form.actions
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
{{/if}}
|
||||
</Rose::Form>
|
||||
@@ -0,0 +1,198 @@
|
||||
{{!
|
||||
Copyright (c) HashiCorp, Inc.
|
||||
SPDX-License-Identifier: BUSL-1.1
|
||||
}}
|
||||
|
||||
<Hds::Form::Field as |F|>
|
||||
<F.Control>
|
||||
<Rose::CodeEditor as |c|>
|
||||
{{#unless @hideToolbar}}
|
||||
<c.toolbar @copyText={{get @model @name}} />
|
||||
{{/unless}}
|
||||
<c.fieldEditor
|
||||
@onInput={{fn this.setWorkerFilter @model @name}}
|
||||
@value={{or (get @model @name) ''}}
|
||||
@options={{hash
|
||||
mode='text/x-sh'
|
||||
gutters=(array 'CodeMirror-lint-markers')
|
||||
lint='true'
|
||||
}}
|
||||
/>
|
||||
</Rose::CodeEditor>
|
||||
</F.Control>
|
||||
{{#if (get @model.errors @name)}}
|
||||
<F.Error data-test-worker-filter-error as |E|>
|
||||
{{#each (get @model.errors @name) as |error|}}
|
||||
<E.Message>{{error.message}}</E.Message>
|
||||
{{/each}}
|
||||
</F.Error>
|
||||
{{/if}}
|
||||
</Hds::Form::Field>
|
||||
|
||||
<Hds::Separator />
|
||||
|
||||
<Hds::Form::Toggle::Field
|
||||
name='show_filter_generator'
|
||||
{{on 'change' this.toggleFilterGenerator}}
|
||||
as |F|
|
||||
>
|
||||
<F.Label>{{t 'worker-filter-generator.toggle.title'}}</F.Label>
|
||||
<F.HelperText>{{t
|
||||
'worker-filter-generator.toggle.description'
|
||||
}}</F.HelperText>
|
||||
</Hds::Form::Toggle::Field>
|
||||
|
||||
<Hds::Separator />
|
||||
|
||||
{{#if this.showFilterGenerator}}
|
||||
<Hds::Form::Radio::Group
|
||||
class='filter-generator-selection'
|
||||
@name='filter_generator'
|
||||
{{on 'change' this.setGeneratorType}}
|
||||
as |G|
|
||||
>
|
||||
<G.Legend>{{t 'worker-filter-generator.filter-generator.title'}}</G.Legend>
|
||||
<G.HelperText>
|
||||
{{t 'worker-filter-generator.filter-generator.description'}}
|
||||
<br />
|
||||
<Hds::Link::Inline
|
||||
@href={{doc-url 'worker-filters-format'}}
|
||||
@color='secondary'
|
||||
>
|
||||
{{t 'worker-filter-generator.filter-generator.link'}}
|
||||
</Hds::Link::Inline>
|
||||
</G.HelperText>
|
||||
<G.RadioField
|
||||
@value={{this.generatorTagType}}
|
||||
checked={{eq this.selectedGeneratorType this.generatorTagType}}
|
||||
as |F|
|
||||
>
|
||||
<F.Label>{{t
|
||||
'worker-filter-generator.filter-generator.tag.label'
|
||||
}}</F.Label>
|
||||
<F.HelperText>{{t
|
||||
'worker-filter-generator.filter-generator.tag.helper'
|
||||
}}</F.HelperText>
|
||||
</G.RadioField>
|
||||
<G.RadioField
|
||||
@value={{this.generatorNameType}}
|
||||
checked={{eq this.selectedGeneratorType this.generatorNameType}}
|
||||
as |F|
|
||||
>
|
||||
<F.Label>{{t
|
||||
'worker-filter-generator.filter-generator.name.label'
|
||||
}}</F.Label>
|
||||
<F.HelperText>{{t
|
||||
'worker-filter-generator.filter-generator.name.helper'
|
||||
}}</F.HelperText>
|
||||
</G.RadioField>
|
||||
</Hds::Form::Radio::Group>
|
||||
|
||||
{{#let (unique-id) (unique-id) as |labelId helpId|}}
|
||||
<Hds::Form::Fieldset
|
||||
aria-labelledby={{labelId}}
|
||||
aria-describedby={{helpId}}
|
||||
class='input-values'
|
||||
as |F|
|
||||
>
|
||||
<F.Legend id={{labelId}}>{{t
|
||||
'worker-filter-generator.filter-generator.input-values.title'
|
||||
}}</F.Legend>
|
||||
<F.HelperText id={{helpId}}>{{t
|
||||
'worker-filter-generator.filter-generator.input-values.description'
|
||||
}}</F.HelperText>
|
||||
<F.Control>
|
||||
{{#if (eq this.selectedGeneratorType this.generatorTagType)}}
|
||||
<Hds::Form::TextInput::Field
|
||||
@value={{this.key}}
|
||||
name='tag_key'
|
||||
@width='320px'
|
||||
{{on 'input' (set-from-event this 'key')}}
|
||||
as |F|
|
||||
>
|
||||
<F.Label>{{t 'form.key.label'}}</F.Label>
|
||||
</Hds::Form::TextInput::Field>
|
||||
{{else}}
|
||||
<Hds::Form::Select::Field
|
||||
name='name_operator'
|
||||
@value={{this.operator}}
|
||||
@width='320px'
|
||||
{{on 'change' (set-from-event this 'operator')}}
|
||||
as |F|
|
||||
>
|
||||
<F.Label>{{t 'form.operator.label'}}</F.Label>
|
||||
<F.Options>
|
||||
<option value=''>
|
||||
{{t 'titles.choose-an-option'}}
|
||||
</option>
|
||||
{{#each this.operatorOptions as |operator|}}
|
||||
<option
|
||||
value={{operator}}
|
||||
selected={{eq operator this.operator}}
|
||||
>
|
||||
{{#if (eq operator '==')}}
|
||||
{{operator}}
|
||||
{{else}}
|
||||
{{t
|
||||
(concat
|
||||
'worker-filter-generator.filter-generator.operator.'
|
||||
operator
|
||||
)
|
||||
}}
|
||||
{{/if}}
|
||||
</option>
|
||||
{{/each}}
|
||||
</F.Options>
|
||||
</Hds::Form::Select::Field>
|
||||
{{/if}}
|
||||
</F.Control>
|
||||
<F.Control>
|
||||
<Hds::Form::TextInput::Field
|
||||
@value={{this.value}}
|
||||
name='tag_value'
|
||||
@width='320px'
|
||||
{{on 'input' (set-from-event this 'value')}}
|
||||
as |F|
|
||||
>
|
||||
<F.Label>{{t 'form.value.label'}}</F.Label>
|
||||
</Hds::Form::TextInput::Field>
|
||||
</F.Control>
|
||||
</Hds::Form::Fieldset>
|
||||
{{/let}}
|
||||
|
||||
{{#let (unique-id) (unique-id) as |labelId helpId|}}
|
||||
<Hds::Form::Fieldset
|
||||
aria-labelledby={{labelId}}
|
||||
aria-describedby={{helpId}}
|
||||
class='formatted-results'
|
||||
@layout='vertical'
|
||||
as |F|
|
||||
>
|
||||
<F.Legend id={{labelId}}>{{t
|
||||
'worker-filter-generator.filter-generator.formatted-result.title'
|
||||
}}</F.Legend>
|
||||
<F.HelperText id={{helpId}}>{{t
|
||||
'worker-filter-generator.filter-generator.formatted-result.description'
|
||||
}}</F.HelperText>
|
||||
<F.Control>
|
||||
<Hds::Text::Body @tag='p' @weight='semibold'>{{t
|
||||
'worker-filter-generator.filter-generator.formatted-result.label'
|
||||
}}</Hds::Text::Body>
|
||||
<div class='generated-results-container'>
|
||||
<Hds::Form::TextInput::Base
|
||||
readonly
|
||||
name='generated_value'
|
||||
@value={{this.generatedResult}}
|
||||
@width='320px'
|
||||
/>
|
||||
{{#if this.generatedResult}}
|
||||
<Hds::Copy::Button
|
||||
@text='Copy'
|
||||
@textToCopy={{this.generatedResult}}
|
||||
/>
|
||||
{{/if}}
|
||||
</div>
|
||||
</F.Control>
|
||||
</Hds::Form::Fieldset>
|
||||
{{/let}}
|
||||
{{/if}}
|
||||
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* Copyright (c) HashiCorp, Inc.
|
||||
* SPDX-License-Identifier: BUSL-1.1
|
||||
*/
|
||||
|
||||
import Component from '@glimmer/component';
|
||||
import { action } from '@ember/object';
|
||||
import { tracked } from '@glimmer/tracking';
|
||||
|
||||
export default class WorkerFilterGeneratorIndexComponent extends Component {
|
||||
// =attributes
|
||||
|
||||
generatorTagType = 'tag';
|
||||
generatorNameType = 'name';
|
||||
operatorOptions = ['==', 'matches', 'contains'];
|
||||
@tracked showFilterGenerator;
|
||||
@tracked selectedGeneratorType = this.generatorTagType;
|
||||
@tracked key = '';
|
||||
@tracked value = '';
|
||||
@tracked operator = '';
|
||||
|
||||
/**
|
||||
* @return {string}
|
||||
*/
|
||||
get generatedResult() {
|
||||
let valueResult = this.value ? `"${this.value}"` : '';
|
||||
if (this.selectedGeneratorType === 'tag') {
|
||||
let keyResult = this.key ? `"/tags/${this.key}"` : '';
|
||||
return keyResult || valueResult ? `${valueResult} in ${keyResult}` : '';
|
||||
} else {
|
||||
return valueResult || this.operator
|
||||
? `"/name" ${this.operator} ${valueResult}`
|
||||
: '';
|
||||
}
|
||||
}
|
||||
|
||||
// =actions
|
||||
|
||||
/**
|
||||
* Sets the model filter to the passed in value.
|
||||
* @param {Model} model
|
||||
* @param {string} filter
|
||||
* @param {string} value
|
||||
*/
|
||||
@action
|
||||
setWorkerFilter(model, filter, value) {
|
||||
model[filter] = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggles showFilterGenerator attribute to true or false.
|
||||
*/
|
||||
@action
|
||||
toggleFilterGenerator() {
|
||||
this.showFilterGenerator = !this.showFilterGenerator;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears out key, value, and operator.
|
||||
* Sets selectedGeneratorType to a value.
|
||||
* @param {object} event
|
||||
*/
|
||||
@action
|
||||
setGeneratorType(event) {
|
||||
this.key = '';
|
||||
this.value = '';
|
||||
this.operator = '';
|
||||
this.selectedGeneratorType = event.target.value;
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
{{!
|
||||
Copyright (c) HashiCorp, Inc.
|
||||
SPDX-License-Identifier: BUSL-1.1
|
||||
}}
|
||||
|
||||
<Rose::Form
|
||||
class='full-width'
|
||||
@onSubmit={{@submit}}
|
||||
@cancel={{@cancel}}
|
||||
@disabled={{@model.isSaving}}
|
||||
as |form|
|
||||
>
|
||||
<Hds::Form::Field as |F|>
|
||||
<F.Control>
|
||||
<Rose::CodeEditor as |c|>
|
||||
<c.toolbar @copyText={{get @model @name}} />
|
||||
<c.fieldEditor
|
||||
@onInput={{fn this.setWorkerFilter @model @name}}
|
||||
@value={{or (get @model @name) ''}}
|
||||
@options={{hash
|
||||
mode='text/x-sh'
|
||||
gutters=(array 'CodeMirror-lint-markers')
|
||||
lint='true'
|
||||
}}
|
||||
/>
|
||||
</Rose::CodeEditor>
|
||||
</F.Control>
|
||||
{{#if (get @model.errors @name)}}
|
||||
<F.Error as |E|>
|
||||
{{#each (get @model.errors @name) as |error|}}
|
||||
<E.Message>{{error.message}}</E.Message>
|
||||
{{/each}}
|
||||
</F.Error>
|
||||
{{/if}}
|
||||
</Hds::Form::Field>
|
||||
|
||||
<form.actions
|
||||
@submitText={{t 'actions.save'}}
|
||||
@cancelText={{t 'actions.cancel'}}
|
||||
/>
|
||||
</Rose::Form>
|
||||
@@ -1,22 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) HashiCorp, Inc.
|
||||
* SPDX-License-Identifier: BUSL-1.1
|
||||
*/
|
||||
|
||||
import Component from '@glimmer/component';
|
||||
import { action } from '@ember/object';
|
||||
|
||||
export default class WorkerFilterComponent extends Component {
|
||||
// =actions
|
||||
|
||||
/**
|
||||
* Sets the model filter to the passed in value.
|
||||
* @param {Model} model
|
||||
* @param {string} filter
|
||||
* @param {string} value
|
||||
*/
|
||||
@action
|
||||
setWorkerFilter(model, filter, value) {
|
||||
model[filter] = value;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user