Commit 8397affa authored by Hando Lukats's avatar Hando Lukats
Browse files

Merge branch 'develop' into 'master'

Release: merge 'develop' into 'master' created by Hando Lukats

See merge request teis/public-web-client!634
parents 5e890b40 70cce0f9
{
"name": "te-is",
"version": "1.23.0",
"version": "1.24.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
......
{
"name": "te-is",
"version": "1.23.0",
"version": "1.24.0",
"license": "MIT",
"scripts": {
"ng": "ng",
......
import { Component, OnInit, HostListener, Inject, OnDestroy } from '@angular/core';
import { Component, HostListener, Inject, OnDestroy, OnInit } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { LangContext, MessageContext } from '@ska-angular/core';
import { Router } from '@angular/router';
......@@ -84,6 +84,7 @@ export class AppComponent implements OnInit, OnDestroy {
private getFeatureFlags() {
const featureFlags = [
FeatureFlag.NEW_VIOLATION_ELIMINATION,
FeatureFlag.INSPECTIONTOPICS_VISIBLE,
];
this.featureFlagsService.fetchAllFeatureFlags(featureFlags);
}
......
import { Injectable } from '@angular/core';
import { ModalService } from '@teis/modules/modal/modal.service';
import { FormGroup } from '@angular/forms';
import { BehaviorSubject, forkJoin, Observable, interval, Subscription, combineLatest, of } from 'rxjs';
import { BehaviorSubject, combineLatest, forkJoin, interval, Observable, of, Subscription } from 'rxjs';
import { MessageContext } from '@ska-angular/core';
import { TranslateService } from '@ngx-translate/core';
import { map, take, concatMap, filter, mergeMap, switchMap } from 'rxjs/operators';
import { concatMap, filter, map, mergeMap, switchMap, take } from 'rxjs/operators';
import { Router } from '@angular/router';
import { ProceedingInspectionDocumentDto } from '@teis/services/proceedings-common/proceedings-documents-common/proceedings-documents-common.model';
import { ConfirmationOptions } from '@teis/modules/modal/confirmation/confirmation.component';
......@@ -17,10 +17,22 @@ import { FileReferenceDto } from '@teis/services/file/file.model';
import { FileApi } from '@teis/services/file/file.api';
import { FileService } from '@teis/services/file/file.service';
import { ClaimsDto } from '@teis/services/claims/claims.model';
import { ProceedingDetails, ProceedingDto, ProceedingsList, ProceedingsOverviewQuery, ProceedingStatusId } from '@teis/services/proceedings/proceedings.model';
import {
ProceedingDetails,
ProceedingDto,
ProceedingsList,
ProceedingsOverviewQuery,
ProceedingStatusId
} from '@teis/services/proceedings/proceedings.model';
import { ProceduralAct, ProceduralActDto } from '@teis/services/procedural-act/procedural-act.model';
import { ProceedingViolations, ViolationDto, ViolationStatusId } from '@teis/services/violations/violations.model';
import { ViolationActAccessRestrictionLogDto, ViolationActDto, ViolationActPostponeType, ViolationActTeis, ViolationsActsQuery } from '@teis/services/violation-acts/violation-acts.model';
import {
ViolationActAccessRestrictionLogDto,
ViolationActDto,
ViolationActPostponeType,
ViolationActTeis,
ViolationsActsQuery
} from '@teis/services/violation-acts/violation-acts.model';
import { User } from '@teis/services/authentication/authentication.models';
import { ProceedingsService } from '@teis/services/proceedings/proceedings.service';
import { ProceduralActService } from '@teis/services/procedural-act/procedural-act.service';
......@@ -782,11 +794,9 @@ export class ProceedingsFacade {
}
private async violationActPreceptUpdated() {
this.message.addToastMessage('violation_act_saved', 'success', 3000);
this.message.addToastMessage('violation_act_updated', 'success', 3000);
this.modal.close();
const redirectUrl = this.router.url.replace('general', 'violationActs');
this.handleLoading('saving', false);
await this.router.navigate([redirectUrl]);
}
private updatePreceptState(currentViolation: ViolationDto) {
......@@ -821,7 +831,10 @@ export class ProceedingsFacade {
updatePrecept(violation: ViolationDto, violationAct: ViolationActDto, form: FormGroup, postponeType: ViolationActPostponeType) {
this.violationActsService.updateViolationAct(violation, violationAct, form, postponeType)
.subscribe(this.updatePreceptState(violation));
.subscribe((res) => {
this.updatePreceptState(violation);
});
}
userCanExecutePrecept() {
......
import { ObjectStatus } from '@teis/common/common.models';
import { ClassifierAttributeLightDto, ClassifierItemDto, ClassifierItemLinkDto } from '@teis/services/classifiers/classifiers.models';
import {
ClassifierAttributeLightDto,
ClassifierItemDto,
ClassifierItemLinkDto
} from '@teis/services/classifiers/classifiers.models';
export enum Direction {
UP = 'UP',
......@@ -38,12 +42,12 @@ export type ClassifierAttributeDefinitionDto = {
export type ClassifierOfficeItemDto = {
attributes?: ClassifierAttributeLightDto[];
classifierDefinitionId: string;
code: string;
classifierDefinitionId?: string;
code?: string;
id?: string;
editable?: boolean;
linkedItems?: ClassifierItemLinkDto[];
name: string;
name?: string;
objectStatus?: string;
validFrom?: string;
validUntil?: string;
......
......@@ -50,7 +50,7 @@ export class RiskIndicatorAddOrEditComponent implements OnInit {
submit(form: FormGroup) {
triggerValidation(form);
this.showUpperLimitError = parseFloat(form.value.upperLimit) < parseFloat(form.value.lowerLimit);
this.showUpperLimitError = parseFloat(form.value.upperLimit) <= parseFloat(form.value.lowerLimit);
if (form.valid && !this.showUpperLimitError) {
const formValues = form.value;
const body: RiskIndicatorBody = {
......
......@@ -19,15 +19,15 @@
<teis-checkbox
[name]="second?.code"
[formControlName]="second?.code">
<strong>{{ second?.name }}</strong>
</teis-checkbox>
<strong>{{ second?.name }}</strong>
</div>
<div class="inspection-topic-hierarchy__level__third" *ngFor="let third of second.children">
<teis-checkbox
[name]="third?.code"
[formControlName]="third?.code">
<span>{{ third?.name }}</span>
</teis-checkbox>
<span>{{ third?.name }}</span>
<p class="explanation">{{ third?.attributes[0]?.value }}</p>
</div>
</div>
......
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { SupervisionPlanFacadeService } from '../../supervision-plan-facade.service';
import { ActivatedRoute, Router } from '@angular/router';
import { Subscription } from 'rxjs';
import { TranslateService } from '@ngx-translate/core';
import { AvailableTabs } from '@teis/modules/tabs/components/tehik-tabs/tehik-tabs.component';
import { TabContainer } from '@teis/modules/tabs/tab-container';
import { SupervisionPlan, SuperVisionPlanStatusCode, SuperVisionPlanStatusName } from '@teis/services/supervision-plan/supervision-plan.models';
import {
SupervisionPlan,
SuperVisionPlanStatusCode,
SuperVisionPlanStatusName
} from '@teis/services/supervision-plan/supervision-plan.models';
import { TeisFeatureFlagsService } from '@teis/services/feature-flags/feature-flags.service';
import { FeatureFlag } from '@teis/services/feature-flags/feature-flags.model';
@Component({
selector: 'teis-supervision-plan-detailed',
......@@ -14,6 +20,7 @@ import { SupervisionPlan, SuperVisionPlanStatusCode, SuperVisionPlanStatusName }
})
export class SupervisionPlanDetailedComponent extends TabContainer implements OnInit, OnDestroy {
private id: string;
featureFlags = FeatureFlag;
availableTabs: AvailableTabs[] = [
{
name: 'general',
......@@ -29,11 +36,6 @@ export class SupervisionPlanDetailedComponent extends TabContainer implements On
title: this.translate.instant('companies'),
privileges: ['TI_VIEW_PROCEEDINGS'],
},
{
name: 'topics',
title: 'Kontrolli teemad',
privileges: ['TI_VIEW_SUPERVISIONPLANS'],
},
{
name: 'inspection-documents',
title: this.translate.instant('inspection_documents_title'),
......@@ -43,6 +45,7 @@ export class SupervisionPlanDetailedComponent extends TabContainer implements On
detail = this.facade.detail;
loading = this.facade.loading;
inspectionTopicsVisible: boolean;
plan: SupervisionPlan;
......@@ -51,11 +54,20 @@ export class SupervisionPlanDetailedComponent extends TabContainer implements On
private translate: TranslateService,
public route: ActivatedRoute,
public router: Router,
private facade: SupervisionPlanFacadeService) {
private facade: SupervisionPlanFacadeService,
private featureFlagsService: TeisFeatureFlagsService) {
super(route, router);
}
ngOnInit() {
this.inspectionTopicsVisible = this.featureFlagsService.isFeatureOn(this.featureFlags.INSPECTIONTOPICS_VISIBLE);
if (this.inspectionTopicsVisible) {
this.availableTabs.splice(3, 0, {
name: 'topics',
title: 'Kontrolli teemad',
privileges: ['TI_VIEW_SUPERVISIONPLANS'],
});
}
const id = this.route.snapshot.paramMap.get('id');
if (id) this.id = id;
this.facade.fetchOneSupervisionPlan(this.id);
......
......@@ -3,7 +3,7 @@
variant="block"
[title]="'Kontrolli teemad'">
<button teis-button
*canView="['TI_MANAGE_SUPERVISIONPLANS']"
*ngIf="canEdit()"
id="editSupervisionPlanTopics"
variant="secondary"
(click)="edit()">
......
......@@ -4,6 +4,10 @@ import { Subscription } from 'rxjs';
import { filter } from 'rxjs/operators';
import { SupervisionPlanTopicsEditComponent } from '../supervision-plan-topics-edit/supervision-plan-topics-edit.component';
import { SupervisionPlan } from '@teis/services/supervision-plan/supervision-plan.models';
import { SupervisionPlanTopicsService } from '@teis/services/supervision-plan/supervision-plan-topics.service';
import { AuthorizationService } from '@teis/services/authorization/authorization.service';
import { FeatureFlag } from '@teis/services/feature-flags/feature-flags.model';
import { TeisFeatureFlagsService } from '@teis/services/feature-flags/feature-flags.service';
@Component({
selector: 'teis-supervision-plan-topics',
......@@ -14,16 +18,27 @@ export class SupervisionPlanTopicsComponent implements OnInit {
detail: SupervisionPlan;
loading = this.facade.loading;
topics = this.facade.topics;
featureFlags = FeatureFlag;
inspectionTopicsVisible: boolean;
subscription$: Subscription;
constructor(private facade: SupervisionPlanFacadeService) {}
constructor(private facade: SupervisionPlanFacadeService,
private superVisionPlanService: SupervisionPlanTopicsService,
private authorization: AuthorizationService,
private featureFlagsService: TeisFeatureFlagsService) {}
ngOnInit() {
this.inspectionTopicsVisible = this.featureFlagsService.isFeatureOn(this.featureFlags.INSPECTIONTOPICS_VISIBLE);
this.subscription$ = this.facade.detail
.pipe(filter(detail => detail !== null))
.subscribe((detail) => {
this.detail = detail;
this.facade.fetchInspectionTopicsWithClassifiers(this.detail);
/*if (detail.status.code !== 'CLOSED') {
} else {
this.superVisionPlanService.getInspectionTopics(detail.id).subscribe(res => console.log(res));
}*/
});
}
......@@ -31,6 +46,10 @@ export class SupervisionPlanTopicsComponent implements OnInit {
this.subscription$.unsubscribe();
}
canEdit() {
return this.inspectionTopicsVisible && this.detail?.status.code !== 'CLOSED'
&& this.authorization.hasSomePermission(['TI_MANAGE_SUPERVISIONPLANS']);
}
edit() {
this.facade.openWithComponent(SupervisionPlanTopicsEditComponent);
}
......
......@@ -515,6 +515,7 @@
"execute_precept_warning_of_penalty_payment": "+ Vormista sunnirahahoiatus",
"precept_warning_of_penalty_payment": "Sunnirahahoiatus",
"violation_act_saved": "Puuduse toiming on salvestatud",
"violation_act_updated": "Puuduse toimingu muudetus salvestatud",
"postpone_deadline": "Pikenda tähtaega",
"no_penalty": "Ei tee sunnirahahoiatust",
"warning_of_penalty_amount": "Sunniraha hoiatuse summa",
......
......@@ -6,6 +6,7 @@ import { FormControl, FormGroup } from '@angular/forms';
import { addTimeToDate } from '@teis/utils';
import { AlertVariants } from '@teis/modules/alert/alert/alert.component';
import { SortInstance, SortType } from '@ska-angular/common';
import * as moment from 'moment';
@Component({
selector: 'app-audit-logs',
......@@ -54,8 +55,10 @@ export class AuditLogsComponent implements OnInit {
filterAuditLogs() {
const timeFrom = this.filterForm.controls.activityFrom.value;
const timeTo = this.filterForm.controls.activityTo.value;
const modifiedTimeTo = timeTo ? moment(timeTo).add(1, 'day').format('YYYY-MM-DD') : timeTo;
const activityTimeFrom = timeFrom?.length ? addTimeToDate(timeFrom) : '';
const activityTimeUntil = timeTo?.length ? addTimeToDate(timeTo) : '';
const activityTimeUntil = timeTo?.length ? addTimeToDate(modifiedTimeTo) : '';
this.auditLogsListManager.filter = { activityTimeFrom, activityTimeUntil };
this.facade.fetchAuditLogs();
......
......@@ -211,7 +211,7 @@
"high_priority": "Lahendada esimesel võimalusel!",
"completed_at": "Täitmise kuupäev",
"completed": " Tehtud",
"responsible_person_tooltip": "Vastutaja lorem ipsum",
"responsible_person_tooltip": "Lisa isiku nimi, kes selle abinõu kastutuselevõtu eest vastutab.",
"risk_assessment": "Riskihinnang",
"roles": "Rollid",
"safety_and_health": "Ohutus ja tervis",
......@@ -338,7 +338,7 @@
"confirm_risk_assessment_question": "Kas oled kindel, et soovid riskianalüüsi salvestada?",
"confirm_risk_assessment_description": "Pärast salvestamist seda riskianalüüsi enam muuta ei saa",
"resolve_as_soon_as_possible": "Lahendada esimesel võimalusel",
"resolve_as_soon_as_possible_tooltip": "Lahendada lorem ipsum",
"resolve_as_soon_as_possible_tooltip": "Lisa see märge olulisele tegevusele, et tegevus oleks tegevuskava vaates alati nähtaval kohal.",
"risks": "ohtu",
"risk_factor_not_assessed_count": "Hinnang ohu olemasolu kohta puudub <b>{{ riskFactors }}</b> ohu juures.",
"risk_statement_not_assessed_count": "Vastamata on <b>{{ riskStatements }}</b> ohu maandamise abinõu kohta.",
......@@ -350,7 +350,7 @@
"delete_risk_factor_question": "Oled kindel, et soovid ohuteguri kustutada?",
"delete_risk_factor_description": "Tegevusega kustutatakse kõik selle ohuga seotud andmed.",
"action_description": "Tegevuse kirjeldus",
"action_description_tooltip": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Lorem ipsum dolor.",
"action_description_tooltip": "Kirjelda, kuidas plaanid puuduse kõrvaldada.",
"risk_deleted": "Oht kustutatud",
"support_phone_number": "Kasutajatugi",
"upload_existing_risk_assessment": "Lae üles olemasolev riskianalüüs",
......@@ -410,7 +410,7 @@
"new_risk_factor_assessment_added": "Riskianalüüsi lisati uus oht:",
"add_to_action_plan": "Lisa tegevuskavasse",
"added_to_action_plan": "Lisatud tegevuskavasse",
"action_plan_risk_statement_assessment_introduction": "Tutvustav jutt sellest, mida ma siin tegema pean. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.",
"action_plan_risk_statement_assessment_introduction": "Riskianalüüsi käigus vastasid küsimustele, kas abinõu on juba kasutusel või mitte. Nüüd palume Sul teha järgmine samm ja mõelda läbi, millised abinõud kasutusele võtad. Kõik abinõud ohu maandamiseks on kasulikud, seetõttu soovitame need kõik ka kasutusele võtta. Abinõude täpsemaks kavandamiseks vajuta nupule 'Edasi'.",
"risk_statement_assessment_needs_no_implementation": "Abinõu ei ole vaja rakendada",
"reason": "Põhjendus",
"no_action_reason": "Põhjenda, miks ei ole vaja rakendada",
......@@ -449,7 +449,7 @@
"risk_assessment_my_company_content": "Riskianalüüsi alustamiseks vali esmalt oma ettevõtte tegevuse tüüp - selleks kasuta otsingut või klõpsa lingil “Vaata kõiki” ning tee oma valik nimekirjast. Kui Sinu ettevõtte tüübiga kaasnevad ka mõned täiendavad tegevused, siis kuvatakse need Sulle ekraanile. Soovi korral märgi need ning lisa oma ettevõtte riskianalüüsi.",
"risk_assessment_saved": "Riskianalüüs on salvestatud",
"risk_assessment_riskfactor_content": "Nüüd, kui oled valinud oma ettevõtte tüübi, lisasime enamlevinud ohud Sinu ettevõtte riskianalüüsi. Näed neid siin samas lehe vasakus servas. Sinu ettevõttes võib esineda ohtusi, mis ei ole selles riskianalüüsi töövahendis kirjeldatud. Sellised ohud tuleb Sul endal riskianalüüsi juurde lisada. Täiendavate ohtude lisamiseks klõpsa vasakul “Täiendavad ohud” ning “Lisa oht”. Täiendavate ohtude tuvastamiseks kaasa oma ettevõtte töötajaid. Küsi neilt, milliste ohtudega nad oma tööd tehes kokku puutuvad. Selleks, et Sul oleks lihtsam töökeskkonna ohtusi tuvastada, lae alla nimekiri töövahendis saadaolevate ohtude nimekiri.",
"risk_assessment_riskfactor_download_list": "Lae alla ohtude nimekiri",
"risk_assessment_riskfactor_download_list": "Laadi alla ohtude nimekiri",
"risk_assessment_company_type": "Minu ettevõtluse tüüp",
"no_business_in_here": "Ettevõtlus on Eestis ära lõppenud",
"risk_statement_assessment_title": "Abinõud",
......@@ -469,7 +469,7 @@
"terabyte": "TB",
"petabyte": "PB",
"risk_assessment_published": "Riskianalüüs on esitatud",
"no_risk_assessments_message": "Töökeskkonna riskianalüüsi saab läbi viia <a href=\"/auth/risk-assessments/create/introduction/\" target=\"blank\">riskianalüüsi töövahendi abil</a>. Juhul, kui riskianalüüs on juba olemas, saad selle üles laadida <a href=\"/auth/risk-assessments/external/create/\" target=\"blank\">riskianalüüsi lehel</a>.",
"no_risk_assessments_message": "Töökeskkonna riskianalüüsi saab läbi viia <a href=\"/auth/risk-assessments/create/introduction\">riskianalüüsi töövahendi abil</a>. Juhul, kui riskianalüüs on juba olemas, saad selle üles laadida <a href=\"/auth/risk-assessments/external/create\" >riskianalüüsi lehel</a>.",
"action_plan_risk_statements_not_applied": "Riskianalüüsis on {{ riskStatement }} rakendamata abinõud",
"action_plan_risk_statement_action_planned": "<strong>{{ riskStatement }}</strong> abinõu rakendamiseks oled lisanud ülesande tegevuskavasse.",
"action_plan_risk_statement_actions_rejected": "<strong>{{ riskStatement }}</strong> abinõu kohta oled teinud otsuse abinõud mitte rakendada.",
......@@ -477,7 +477,7 @@
"submit_final_action_plan": "Salvesta lõplik tegevuskava",
"submit_final_risk_assessment_and_action_plan": "Salvesta riskianalüüs ja tegevuskava",
"confirm_submit_final_risk_assessment_and_action_plan": "Kas oled kindel, et soovid riskianalüüsi ja tegevuskava salvestada?<br> Riskianalüüs koos tegevuskavaga määratakse ettevõtte kehtivaks riskianalüüsiks ja esitatakse Tööinspektsioonile.",
"action_plan_conclusion_introduction": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"action_plan_conclusion_introduction": "Väga tubli! Oled nüüd lõpetanud abinõude kavandamise ja jõudnud riskianalüüsiga lõpule. Nüüd veel vaja riskianalüüs ja tegevuskava salvestada. Allpool näed oma riskianalüüsi ja kavandatud abinõudest ka kokkuvõtet. Tegevuskavasse lisatud abinõusid saad edaspidi hallata vasakmenüüst 'Tegevuskava' nupu alt. ",
"remove_action_from_action_plan_question": "Kas oled kindel, et soovid abinõu rakendamise tegevuskavast eemaldada?",
"remove_no_action_from_action_plan_question": "Kas oled kindel, et soovid abinõu mitte rakendamise otsuse tühistada?",
"task_marked_todo_success": "Ülesanne märgitud mitte tehtuks",
......@@ -507,10 +507,10 @@
"internal_audit": "Sisekontroll",
"describe": "Kirjelda",
"action_plan_no_risk_statements_not_applied": "Riskianalüüsis pole ühtegi rakendamata abinõud.",
"action_plan_evaluation_intro": "Consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"action_plan_intro": "Sissejuhatus. Consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"action_plan_evaluation_intro": "Väga hea! Oled juba ära teinud suure töö - tuvastanud oma ettevõtte töökeskkonna ohud ning hinnanud, kas nende ohtude maandamiseks on abinõud juba kasutusel või mitte. Nüüd on võimalus lisada seni kasutuselevõtmata abinõud oma tegevuskavasse, et need edaspidi kasutusele võtta. Kui mingil põhjusel ei ole võimalik mõnd abinõu kasutusele võtta, siis on võimalik see ära märkida. Sel juhul tuleks lisada ka põhjendus, miks seda abinõu kasutada ei saa. Kõik muud abinõud on võimalik tegevuskavasse lisada ja seeläbi olemasolevaid ohte veelgi maandada.",
"action_plan_intro": "Nüüd kuvatakse Sulle kõik need abinõud, millele Sa varem vastasid eitavalt. Palun tee valik, kas soovid lisada abinõud oma tegevuskavasse või ei ole Sinu ettevõttes seda abinõud võimalik rakendada - sellisel juhul lisa ka põhjendus, miks abinõud Sinu ettevõttes rakendada ei saa. Abinõu lisamiseks tegevuskavasse klõpsa nupul 'Lisa tegevuskavasse'. Head kavandamist!",
"action_plan_intro_title": "Sissejuhatus",
"action_plan_no_risk_statements_evaluation_intro": "Siin sammus võiks kasutajale kirjeldada, et II etapis pole temal ohtusi.",
"action_plan_no_risk_statements_evaluation_intro": "Väga hea! Oled ära teinud suure töö - tuvastanud oma ettevõtte töökeskkonna ohud ning hinnanud, kas nende ohutude maandamiseks on abinõud juba kasutusel või mitte. Tundub, et valitud ohtude puhul olid kõik abinõud juba kasutusel, seega saad sellest sammust edasi liikuda.",
"action_plan_delete_task_title": "Tegevuse kustutamine",
"action_plan_delete_task_question": "Kas oled kindel, et soovid tegevuse kustutada?",
"use_of_data": "Andmete kasutus",
......
......@@ -11,7 +11,7 @@
</ng-container>
<ng-container content >
<div class="risk-assessment-statement-background">
<span *ngFor="let item of data | keyvalue: asIsOrder let last = last;">
<span *ngFor="let item of data | keyvalue let last = last;">
<h5 class="risk-assessment-statement-subtitle">{{item.key | translate }}</h5>
<p class="preline" [class.font-weight-bold]="last && !attentionText && boldLastLine">
{{item.value | translate }}
......
......@@ -18,8 +18,4 @@ export class CollapseDetailList {
collapsedThemeOptions: CollapseThemeOptions = {
backgroundColor: 'white',
};
asIsOrder(a, b) {
return 1;
}
}
......@@ -2,15 +2,15 @@
<div class="type-selection__header">
<strong>{{ title | translate }}</strong>
</div>
<div class="type-buttons">
<label class="type-buttons__button" *ngFor="let item of items; let idx = index;">
<input type="radio" [value]="item" [formControl]="control">
<div class="selectable-item-container" *ngFor="let items of sortedItems;">
<label class="selectable-item-label type-buttons__button" *ngFor="let item of items; let idx = index;">
<input type="radio" [value]="item" [formControl]="control">
<div class="type-buttons__text">
<span>{{ item.name }}</span>
</div>
<div class="type-buttons__description">
<span>{{ item.description || item.name }}</span>
</div>
</label>
</div>
</div>
</div>
......@@ -23,36 +23,46 @@
}
}
.selectable-item-label {
margin-bottom: 10px;
width: 32%;
margin-right: 10px;
}
.type-selection {
&__header {
background-color: $blue;
color: $white;
padding: 1rem;
border-radius: $input-border-radius;
margin-bottom: 10px;
}
}
.selectable-item-container {
display: flex;
justify-content: flex-start;
}
.type-buttons {
display: flex;
flex-wrap: wrap;
padding: 1rem 0 1.5rem;
//padding: 1rem 0 1.5rem;
& > label {
flex: 1 0 30%;
margin-right: .5rem;
}
&__button {
position: relative;
display: flex;
display: inline-block;
justify-content: center;
align-items: center;
padding: 2rem;
max-width: 32%;
margin-right: 10px;
//padding: 2rem;
width: 32%;
&:hover {
box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.3);
}
.type-buttons__text, .type-buttons__description {
width: 100%;
position: absolute;
border: $input-border;
border-radius: $input-border-radius;
justify-content: center;
......@@ -63,7 +73,7 @@
top: 0;
left: 0;
span {
padding: 0 .3rem;
padding: 15px;
text-align: center;
}
}
......
import { Component, OnInit, Input, forwardRef, Output, OnDestroy } from '@angular/core';
import { NG_VALUE_ACCESSOR, ControlValueAccessor, FormControl } from '@angular/forms';
import { Component, forwardRef, Input, OnDestroy, OnInit, Output } from '@angular/core';
import { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
import { noop, Subscription } from 'rxjs';
export interface SelectableItemSectionItem {
......@@ -24,6 +24,7 @@ export class SelectableItemSectionComponent implements OnInit, OnDestroy, Contro
@Input() id: string;
@Input() title: string;
@Input() items: SelectableItemSectionItem[];
sortedItems: any[];
@Output() onChange: Function = (_: any) => void noop;
@Output() onTouch: Function = (_: any) => void noop;
......@@ -37,6 +38,24 @@ export class SelectableItemSectionComponent implements OnInit, OnDestroy, Contro
this.subscription$ = this.control.valueChanges.subscribe((value) => {
this.onChange(value);
});
this.sortItems();
}
private sortItems() {
this.sortedItems = [];
let array = [];
this.items.forEach((item, index) => {
if (index % 3 === 0) {
this.sortedItems.push(array);
array = [];
}
array.push(item);
});
if (array.length > 0) {
this.sortedItems.push(array);
}
}
ngOnDestroy() {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment