Skip to content

Commit

Permalink
fix: dont allow adding of an empty local term (#512)
Browse files Browse the repository at this point in the history
* fix: dont allow adding of an empty local term

* fix: dont move input field when local term is empty
  • Loading branch information
BelgianNoise authored Nov 16, 2021
1 parent 7203f51 commit a981c20
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { html, unsafeCSS, css, TemplateResult, CSSResult, property, query, inter
import { RxLitElement } from 'rx-lit';
import { interpret, Interpreter } from 'xstate';
import { unsafeSVG } from 'lit-html/directives/unsafe-svg';
import { Alert, FormActors, FormContext, FormEvents, formMachine, FormSubmittedEvent } from '@netwerk-digitaal-erfgoed/solid-crs-components';
import { Alert, FormActors, FormCleanlinessStates, FormContext, FormEvents, formMachine, FormRootStates, FormSubmissionStates, FormSubmittedEvent, FormValidationStates, FormValidatorResult } from '@netwerk-digitaal-erfgoed/solid-crs-components';
import { ArgumentError, CollectionObject, Logger, Term, TermSource, Translator } from '@netwerk-digitaal-erfgoed/solid-crs-core';
import { map } from 'rxjs/operators';
import { from } from 'rxjs';
Expand Down Expand Up @@ -64,7 +64,13 @@ export class TermSearchComponent extends RxLitElement {
* The actor responsible for form validation in this component.
*/
@internalProperty()
formActorLocalTerm = interpret(this.formMachineLocalTerm, { devTools: true });
formActorLocalTerm: Interpreter<FormContext<{ uri: string; name: string }>>;

/**
* Show the plus icon when adding a local term
*/
@internalProperty()
showAddLocalTermPlus = false;

/**
* The field that for which Terms are being edited
Expand Down Expand Up @@ -151,6 +157,45 @@ export class TermSearchComponent extends RxLitElement {

}

firstUpdated(changed: PropertyValues): void {

this.actor?.onEvent((event) => {

if (event instanceof ClickedAddEvent){

const uri = `#${v4()}`;

this.formMachineLocalTerm = formMachine<Term>(async (context): Promise<FormValidatorResult[]> => {

if (!context.data.name || context.data.name === '') return [ { field: 'name', message: 'test' } ];

return [];

}).withContext({
data: { name: '', uri },
original: { name: '', uri },
});

this.formActorLocalTerm = interpret(this.formMachineLocalTerm, { devTools: true });

this.formActorLocalTerm.onTransition((state) => {

this.showAddLocalTermPlus = state.matches({ [FormSubmissionStates.NOT_SUBMITTED]: {
[FormRootStates.CLEANLINESS]: FormCleanlinessStates.DIRTY,
[FormRootStates.VALIDATION]: FormValidationStates.VALID,
} });

});

this.formActorLocalTerm.onDone((context) => this.actor.send(new ClickedTermEvent(context.data.data)));
this.formActorLocalTerm.start();

}

});

}

groupSearchResults(searchResults: Term[]): { [key: string]: Term[] } {

return searchResults?.length > 0 ? searchResults?.reduce<{ [key: string]: Term[] }>((searchResultsMap, term) => {
Expand Down Expand Up @@ -211,31 +256,6 @@ export class TermSearchComponent extends RxLitElement {

});

this.actor?.onEvent((event) => {

if (event instanceof ClickedAddEvent){

const uri = `#${v4()}`;

this.formMachineLocalTerm = formMachine<Term>().withContext({
data: {
name: '',
uri,
},
original: {
name: '',
uri,
},
});

this.formActorLocalTerm = interpret(this.formMachineLocalTerm, { devTools: true });
this.formActorLocalTerm.onDone((context) => this.actor.send(new ClickedTermEvent(context.data.data)));
this.formActorLocalTerm.start();

}

});

const loading = !this.actor?.state.matches(TermStates.IDLE);

return html`
Expand Down Expand Up @@ -286,7 +306,7 @@ export class TermSearchComponent extends RxLitElement {
<a id="create-term" @click="${() => this.actor.send(new ClickedAddEvent())}">${this.translator.translate('term.add-local-term')}</a>
<!-- show local term input -->
${ this.actor?.state?.matches(TermStates.CREATING) ? html `
${ this.actor?.state?.matches(TermStates.CREATING) && this.formActorLocalTerm ? html `
<nde-large-card
id="create-term-card"
class="term-card"
Expand All @@ -299,9 +319,13 @@ export class TermSearchComponent extends RxLitElement {
<div slot="subtitle">${this.translator.translate('term.description-placeholder')}</div>
${ this.showAddLocalTermPlus ? html`
<div slot="icon" @click=${() => this.formActorLocalTerm.send(new FormSubmittedEvent())}>
${unsafeSVG(Plus)}
</div>
` : html`
<div slot="icon"></div>
` }
</nde-large-card>
`: ''}
Expand Down Expand Up @@ -403,6 +427,9 @@ export class TermSearchComponent extends RxLitElement {
text-decoration: underline;
color: var(--colors-primary-light);
}
#create-term {
width: fit-content
}
nde-progress-bar {
position: absolute;
width: 100%;
Expand Down
10 changes: 5 additions & 5 deletions packages/solid-crs-manage/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,10 @@
],
"coverageThreshold": {
"global": {
"statements": 89.4,
"branches": 86.09,
"lines": 90.09,
"functions": 80.49
"statements": 89.15,
"branches": 85.26,
"lines": 89.92,
"functions": 80.36
}
},
"automock": false,
Expand All @@ -112,4 +112,4 @@
}
}
}
}
}

0 comments on commit a981c20

Please sign in to comment.