From 89af4cb02b078184d69522a61cf8335ae2a66ccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Agneray?= <francois.agneray@lam.fr> Date: Tue, 27 Sep 2022 15:54:44 +0200 Subject: [PATCH] Add family background-color property (instance) --- .../components/instance-form.component.html | 10 +++++++ .../components/instance-form.component.ts | 1 + .../admin/instance/instance-title.resolver.ts | 11 +++++--- .../app/instance/instance.component.spec.ts | 1 + client/src/app/instance/instance.component.ts | 6 ++++- .../components/progress-bar.component.spec.ts | 2 ++ .../effects/search-multiple.effects.spec.ts | 2 ++ .../app/metamodel/models/instance.model.ts | 1 + client/src/test-data.ts | 3 +++ conf-dev/create-db.sh | 2 +- .../__CG__AppEntityInstance.php | 26 +++++++++++++++++-- server/src/Action/InstanceAction.php | 2 ++ server/src/Action/InstanceListAction.php | 2 ++ server/src/Entity/Instance.php | 18 +++++++++++++ server/tests/Action/InstanceActionTest.php | 1 + .../tests/Action/InstanceListActionTest.php | 1 + 16 files changed, 82 insertions(+), 7 deletions(-) diff --git a/client/src/app/admin/instance/components/instance-form.component.html b/client/src/app/admin/instance/components/instance-form.component.html index 185e0603..d75077d6 100644 --- a/client/src/app/admin/instance/components/instance-form.component.html +++ b/client/src/app/admin/instance/components/instance-form.component.html @@ -213,6 +213,16 @@ <input class="custom-control-input" type="checkbox" id="family_title_bold" name="family_title_bold" formControlName="family_title_bold"> <label class="custom-control-label" for="family_title_bold">Family title bold</label> </div> + <div class="form-row"> + <div class="form-group col-md-6"> + <label for="family_background_color_picker">Family background color (picker)</label> + <input class="form-control" type="color" id="family_background_color_picker" [value]="form.value.family_background_color" formControlName="family_background_color"> + </div> + <div class="form-group col-md-6"> + <label for="family_background_color_input">Family background color (value)</label> + <input type="text" class="form-control" id="family_background_color_input" [value]="form.value.family_background_color" formControlName="family_background_color"> + </div> + </div> <div class="form-row"> <div class="form-group col-md-6"> <label for="family_color_picker">Family color (picker)</label> diff --git a/client/src/app/admin/instance/components/instance-form.component.ts b/client/src/app/admin/instance/components/instance-form.component.ts index 4aff6bb2..cc68f071 100644 --- a/client/src/app/admin/instance/components/instance-form.component.ts +++ b/client/src/app/admin/instance/components/instance-form.component.ts @@ -51,6 +51,7 @@ export class InstanceFormComponent implements OnInit { family_header_background_color: new UntypedFormControl('#F7F7F7'), family_title_color: new UntypedFormControl('#007BFF'), family_title_bold: new UntypedFormControl(false), + family_background_color: new UntypedFormControl('#FFFFFF'), family_color: new UntypedFormControl('#212529'), progress_bar_title: new UntypedFormControl('Dataset search'), progress_bar_title_color: new UntypedFormControl('#000000'), diff --git a/client/src/app/admin/instance/instance-title.resolver.ts b/client/src/app/admin/instance/instance-title.resolver.ts index 677c7931..632324af 100644 --- a/client/src/app/admin/instance/instance-title.resolver.ts +++ b/client/src/app/admin/instance/instance-title.resolver.ts @@ -10,7 +10,7 @@ import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; +import { map, switchMap, skipWhile } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector'; @@ -22,8 +22,13 @@ export class InstanceTitleResolver implements Resolve<string> { constructor(private store: Store<{ }>) { } resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): string | Observable<string> | Promise<string> { - return this.store.select(instanceSelector.selectInstanceByRouteName).pipe( - map(instance => `Edit instance ${instance.label}`) + return this.store.select(instanceSelector.selectInstanceListIsLoaded).pipe( + skipWhile(instanceListIsLoaded => !instanceListIsLoaded), + switchMap(() => { + return this.store.select(instanceSelector.selectInstanceByRouteName).pipe( + map(instance => `Edit instance ${instance.label}`) + ); + }) ); } } diff --git a/client/src/app/instance/instance.component.spec.ts b/client/src/app/instance/instance.component.spec.ts index 32ae9ff6..0077dad4 100644 --- a/client/src/app/instance/instance.component.spec.ts +++ b/client/src/app/instance/instance.component.spec.ts @@ -100,6 +100,7 @@ describe('[Instance] InstanceComponent', () => { family_header_background_color: '#F7F7F7', family_title_color: '#007BFF', family_title_bold: false, + family_background_color: '#FFFFFF', family_color: '#212529', progress_bar_title: 'Dataset search', progress_bar_title_color: '#000000', diff --git a/client/src/app/instance/instance.component.ts b/client/src/app/instance/instance.component.ts index 49c7c518..4b89d378 100644 --- a/client/src/app/instance/instance.component.ts +++ b/client/src/app/instance/instance.component.ts @@ -116,7 +116,11 @@ export class InstanceComponent implements OnInit, OnDestroy { this.style.setStyle('.custom-accordion .panel-heading .btn-link', 'color', instance.family_title_color); const familyTitleBold = (instance.family_title_bold) ? 'bold' : 'normal'; this.style.setStyle('.custom-accordion .panel-heading .btn-link', 'font-weight', familyTitleBold); - this.style.setStyle('.custom-accordion .panel-body', 'color', instance.family_color); + this.style.setStyles('.custom-accordion .panel-body', { + 'color': instance.family_color, + 'background-color': `${instance.family_background_color}` + }); + this.style.setStyle('.custom-accordion .panel-body .card', 'background-color', instance.family_background_color); } } }); diff --git a/client/src/app/instance/search/components/progress-bar.component.spec.ts b/client/src/app/instance/search/components/progress-bar.component.spec.ts index 4a0d1bd9..75d22c51 100644 --- a/client/src/app/instance/search/components/progress-bar.component.spec.ts +++ b/client/src/app/instance/search/components/progress-bar.component.spec.ts @@ -73,6 +73,7 @@ describe('[Instance][Search][Component] ProgressBarComponent', () => { family_header_background_color: '#F7F7F7', family_title_color: '#007BFF', family_title_bold: false, + family_background_color: '#FFFFFF', family_color: '#212529', progress_bar_title: 'Dataset search', progress_bar_title_color: '#000000', @@ -129,6 +130,7 @@ describe('[Instance][Search][Component] ProgressBarComponent', () => { family_header_background_color: '#F7F7F7', family_title_color: '#007BFF', family_title_bold: false, + family_background_color: '#FFFFFF', family_color: '#212529', progress_bar_title: 'Dataset search', progress_bar_title_color: '#000000', diff --git a/client/src/app/instance/store/effects/search-multiple.effects.spec.ts b/client/src/app/instance/store/effects/search-multiple.effects.spec.ts index fa3f22d2..15f2c50f 100644 --- a/client/src/app/instance/store/effects/search-multiple.effects.spec.ts +++ b/client/src/app/instance/store/effects/search-multiple.effects.spec.ts @@ -155,6 +155,7 @@ describe('[Instance][Store] SearchMultipleEffects', () => { family_header_background_color: '#F7F7F7', family_title_color: '#007BFF', family_title_bold: false, + family_background_color: '#FFFFFF', family_color: '#212529', progress_bar_title: 'Dataset search', progress_bar_title_color: '#000000', @@ -254,6 +255,7 @@ describe('[Instance][Store] SearchMultipleEffects', () => { family_header_background_color: '#F7F7F7', family_title_color: '#007BFF', family_title_bold: false, + family_background_color: '#FFFFFF', family_color: '#212529', progress_bar_title: 'Dataset search', progress_bar_title_color: '#000000', diff --git a/client/src/app/metamodel/models/instance.model.ts b/client/src/app/metamodel/models/instance.model.ts index 73a90c24..edfb3f20 100644 --- a/client/src/app/metamodel/models/instance.model.ts +++ b/client/src/app/metamodel/models/instance.model.ts @@ -38,6 +38,7 @@ export interface Instance { family_header_background_color: string; family_title_color: string; family_title_bold: boolean; + family_background_color: string; family_color: string; progress_bar_title: string; progress_bar_title_color: string; diff --git a/client/src/test-data.ts b/client/src/test-data.ts index 62671a64..344eef71 100644 --- a/client/src/test-data.ts +++ b/client/src/test-data.ts @@ -70,6 +70,7 @@ export const INSTANCE_LIST: Instance[] = [ family_header_background_color: '#F7F7F7', family_title_color: '#007BFF', family_title_bold: false, + family_background_color: '#FFFFFF', family_color: '#212529', progress_bar_title: 'Dataset search', progress_bar_title_color: '#000000', @@ -120,6 +121,7 @@ export const INSTANCE_LIST: Instance[] = [ family_header_background_color: '#F7F7F7', family_title_color: '#007BFF', family_title_bold: false, + family_background_color: '#FFFFFF', family_color: '#212529', progress_bar_title: 'Dataset search', progress_bar_title_color: '#000000', @@ -172,6 +174,7 @@ export const INSTANCE: Instance = { family_header_background_color: '#F7F7F7', family_title_color: '#007BFF', family_title_bold: false, + family_background_color: '#FFFFFF', family_color: '#212529', progress_bar_title: 'Dataset search', progress_bar_title_color: '#000000', diff --git a/conf-dev/create-db.sh b/conf-dev/create-db.sh index 622ea255..4a326c6c 100644 --- a/conf-dev/create-db.sh +++ b/conf-dev/create-db.sh @@ -8,7 +8,7 @@ set -e curl -d '{"label":"Test","dbname":"anis_test","dbtype":"pdo_pgsql","dbhost":"db","dbport":5432,"dblogin":"anis","dbpassword":"anis"}' --header 'Content-Type: application/json' -X POST http://localhost/database # Add default instance -curl -d '{"name":"default","label":"Default instance","description":"Instance for the test","scientific_manager":"M. Durand","instrument":"Multiple","wavelength_domain":"Visible imaging / Spectroscopy","display":10,"data_path":"\/DEFAULT","files_path":"\/INSTANCE_FILES","public":true,"portal_logo":"","design_color":"#7AC29A","design_background_color":"#ffffff","design_logo":"/logo.png","design_favicon":"/favicon.ico","navbar_background_color":"#F8F9FA","navbar_border_bottom_color":"#DEE2E6","navbar_color_href":"#000000","footer_background_color":"#F8F9FA","footer_border_top_color":"#DEE2E6","footer_text_color":"#000000","family_border_color":"#DFDFDF","family_header_background_color":"#F7F7F7","family_title_color":"#007BFF","family_title_bold":false,"family_color":"#212529","progress_bar_title":"Dataset search","progress_bar_title_color":"#000000","progress_bar_subtitle":"Select a dataset, add criteria, select output columns and display the result.","progress_bar_subtitle_color":"#6C757D","progress_bar_color":"#E9ECEF","progress_bar_active_color":"#7AC29A","progress_bar_circle_color":"#FFFFFF","progress_bar_circle_icon_color":"#CCCCCC","progress_bar_circle_icon_active_color":"#FFFFFF","progress_bar_text_color":"#91B2BF","samp_enabled":true,"back_to_portal":true,"user_menu_enabled":true,"search_by_criteria_allowed":true,"search_by_criteria_label":"Search","search_multiple_allowed":false,"search_multiple_label":"Search multiple","search_multiple_all_datasets_selected":false,"documentation_allowed":false,"documentation_label":"Documentation"}' --header 'Content-Type: application/json' -X POST http://localhost/instance +curl -d '{"name":"default","label":"Default instance","description":"Instance for the test","scientific_manager":"M. Durand","instrument":"Multiple","wavelength_domain":"Visible imaging / Spectroscopy","display":10,"data_path":"\/DEFAULT","files_path":"\/INSTANCE_FILES","public":true,"portal_logo":"","design_color":"#7AC29A","design_background_color":"#ffffff","design_logo":"/logo.png","design_favicon":"/favicon.ico","navbar_background_color":"#F8F9FA","navbar_border_bottom_color":"#DEE2E6","navbar_color_href":"#000000","footer_background_color":"#F8F9FA","footer_border_top_color":"#DEE2E6","footer_text_color":"#000000","family_border_color":"#DFDFDF","family_header_background_color":"#F7F7F7","family_title_color":"#007BFF","family_title_bold":false,"family_background_color":"#FFFFFF","family_color":"#212529","progress_bar_title":"Dataset search","progress_bar_title_color":"#000000","progress_bar_subtitle":"Select a dataset, add criteria, select output columns and display the result.","progress_bar_subtitle_color":"#6C757D","progress_bar_color":"#E9ECEF","progress_bar_active_color":"#7AC29A","progress_bar_circle_color":"#FFFFFF","progress_bar_circle_icon_color":"#CCCCCC","progress_bar_circle_icon_active_color":"#FFFFFF","progress_bar_text_color":"#91B2BF","samp_enabled":true,"back_to_portal":true,"user_menu_enabled":true,"search_by_criteria_allowed":true,"search_by_criteria_label":"Search","search_multiple_allowed":false,"search_multiple_label":"Search multiple","search_multiple_all_datasets_selected":false,"documentation_allowed":false,"documentation_label":"Documentation"}' --header 'Content-Type: application/json' -X POST http://localhost/instance # Add dataset families curl -d '{"label":"Default dataset family","display":10,"opened":true}' --header 'Content-Type: application/json' -X POST http://localhost/instance/default/dataset-family diff --git a/server/doctrine-proxy/__CG__AppEntityInstance.php b/server/doctrine-proxy/__CG__AppEntityInstance.php index 58ffa63a..3ea80270 100644 --- a/server/doctrine-proxy/__CG__AppEntityInstance.php +++ b/server/doctrine-proxy/__CG__AppEntityInstance.php @@ -67,10 +67,10 @@ class Instance extends \App\Entity\Instance implements \Doctrine\ORM\Proxy\Proxy public function __sleep() { if ($this->__isInitialized__) { - return ['__isInitialized__', 'name', 'label', 'description', 'scientificManager', 'instrument', 'wavelengthDomain', 'display', 'dataPath', 'filesPath', 'public', 'portalLogo', 'designColor', 'designBackgroundColor', 'designLogo', 'designFavicon', 'navbarBackgroundColor', 'navbarBorderBottomColor', 'navbarColorHref', 'footerBackgroundColor', 'footerBorderTopColor', 'footerTextColor', 'familyBorderColor', 'familyHeaderBackgroundColor', 'familyTitleColor', 'familyTitleBold', 'familyColor', 'progressBarTitle', 'progressBarTitleColor', 'progressBarSubtitle', 'progressBarSubtitleColor', 'progressBarColor', 'progressBarActiveColor', 'progressBarCircleColor', 'progressBarCircleIconColor', 'progressBarCircleIconActiveColor', 'progressBarTextColor', 'sampEnabled', 'backToPortal', 'userMenuEnabled', 'searchByCriteriaAllowed', 'searchByCriteriaLabel', 'searchMultipleAllowed', 'searchMultipleLabel', 'searchMultipleAllDatasetsSelected', 'documentationAllowed', 'documentationLabel', 'datasetFamilies']; + return ['__isInitialized__', 'name', 'label', 'description', 'scientificManager', 'instrument', 'wavelengthDomain', 'display', 'dataPath', 'filesPath', 'public', 'portalLogo', 'designColor', 'designBackgroundColor', 'designLogo', 'designFavicon', 'navbarBackgroundColor', 'navbarBorderBottomColor', 'navbarColorHref', 'footerBackgroundColor', 'footerBorderTopColor', 'footerTextColor', 'familyBorderColor', 'familyHeaderBackgroundColor', 'familyTitleColor', 'familyTitleBold', 'familyBackgroundColor', 'familyColor', 'progressBarTitle', 'progressBarTitleColor', 'progressBarSubtitle', 'progressBarSubtitleColor', 'progressBarColor', 'progressBarActiveColor', 'progressBarCircleColor', 'progressBarCircleIconColor', 'progressBarCircleIconActiveColor', 'progressBarTextColor', 'sampEnabled', 'backToPortal', 'userMenuEnabled', 'searchByCriteriaAllowed', 'searchByCriteriaLabel', 'searchMultipleAllowed', 'searchMultipleLabel', 'searchMultipleAllDatasetsSelected', 'documentationAllowed', 'documentationLabel', 'datasetFamilies']; } - return ['__isInitialized__', 'name', 'label', 'description', 'scientificManager', 'instrument', 'wavelengthDomain', 'display', 'dataPath', 'filesPath', 'public', 'portalLogo', 'designColor', 'designBackgroundColor', 'designLogo', 'designFavicon', 'navbarBackgroundColor', 'navbarBorderBottomColor', 'navbarColorHref', 'footerBackgroundColor', 'footerBorderTopColor', 'footerTextColor', 'familyBorderColor', 'familyHeaderBackgroundColor', 'familyTitleColor', 'familyTitleBold', 'familyColor', 'progressBarTitle', 'progressBarTitleColor', 'progressBarSubtitle', 'progressBarSubtitleColor', 'progressBarColor', 'progressBarActiveColor', 'progressBarCircleColor', 'progressBarCircleIconColor', 'progressBarCircleIconActiveColor', 'progressBarTextColor', 'sampEnabled', 'backToPortal', 'userMenuEnabled', 'searchByCriteriaAllowed', 'searchByCriteriaLabel', 'searchMultipleAllowed', 'searchMultipleLabel', 'searchMultipleAllDatasetsSelected', 'documentationAllowed', 'documentationLabel', 'datasetFamilies']; + return ['__isInitialized__', 'name', 'label', 'description', 'scientificManager', 'instrument', 'wavelengthDomain', 'display', 'dataPath', 'filesPath', 'public', 'portalLogo', 'designColor', 'designBackgroundColor', 'designLogo', 'designFavicon', 'navbarBackgroundColor', 'navbarBorderBottomColor', 'navbarColorHref', 'footerBackgroundColor', 'footerBorderTopColor', 'footerTextColor', 'familyBorderColor', 'familyHeaderBackgroundColor', 'familyTitleColor', 'familyTitleBold', 'familyBackgroundColor', 'familyColor', 'progressBarTitle', 'progressBarTitleColor', 'progressBarSubtitle', 'progressBarSubtitleColor', 'progressBarColor', 'progressBarActiveColor', 'progressBarCircleColor', 'progressBarCircleIconColor', 'progressBarCircleIconActiveColor', 'progressBarTextColor', 'sampEnabled', 'backToPortal', 'userMenuEnabled', 'searchByCriteriaAllowed', 'searchByCriteriaLabel', 'searchMultipleAllowed', 'searchMultipleLabel', 'searchMultipleAllDatasetsSelected', 'documentationAllowed', 'documentationLabel', 'datasetFamilies']; } /** @@ -720,6 +720,28 @@ class Instance extends \App\Entity\Instance implements \Doctrine\ORM\Proxy\Proxy return parent::setFamilyTitleBold($familyTitleBold); } + /** + * {@inheritDoc} + */ + public function getFamilyBackgroundColor() + { + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'getFamilyBackgroundColor', []); + + return parent::getFamilyBackgroundColor(); + } + + /** + * {@inheritDoc} + */ + public function setFamilyBackgroundColor($familyBackgroundColor) + { + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'setFamilyBackgroundColor', [$familyBackgroundColor]); + + return parent::setFamilyBackgroundColor($familyBackgroundColor); + } + /** * {@inheritDoc} */ diff --git a/server/src/Action/InstanceAction.php b/server/src/Action/InstanceAction.php index 0f621d60..845251ce 100644 --- a/server/src/Action/InstanceAction.php +++ b/server/src/Action/InstanceAction.php @@ -88,6 +88,7 @@ final class InstanceAction extends AbstractAction 'family_header_background_color', 'family_title_color', 'family_title_bold', + 'family_background_color', 'family_color', 'progress_bar_title', 'progress_bar_title_color', @@ -168,6 +169,7 @@ final class InstanceAction extends AbstractAction $instance->setFamilyHeaderBackgroundColor($parsedBody['family_header_background_color']); $instance->setFamilyTitleColor($parsedBody['family_title_color']); $instance->setFamilyTitleBold($parsedBody['family_title_bold']); + $instance->setFamilyBackgroundColor($parsedBody['family_background_color']); $instance->setFamilyColor($parsedBody['family_color']); $instance->setProgressBarTitle($parsedBody['progress_bar_title']); $instance->setProgressBarTitleColor($parsedBody['progress_bar_title_color']); diff --git a/server/src/Action/InstanceListAction.php b/server/src/Action/InstanceListAction.php index ce95c999..e8299dac 100644 --- a/server/src/Action/InstanceListAction.php +++ b/server/src/Action/InstanceListAction.php @@ -88,6 +88,7 @@ final class InstanceListAction extends AbstractAction 'family_header_background_color', 'family_title_color', 'family_title_bold', + 'family_background_color', 'family_color', 'progress_bar_title', 'progress_bar_title_color', @@ -162,6 +163,7 @@ final class InstanceListAction extends AbstractAction $instance->setFamilyHeaderBackgroundColor($parsedBody['family_header_background_color']); $instance->setFamilyTitleColor($parsedBody['family_title_color']); $instance->setFamilyTitleBold($parsedBody['family_title_bold']); + $instance->setFamilyBackgroundColor($parsedBody['family_background_color']); $instance->setFamilyColor($parsedBody['family_color']); $instance->setProgressBarTitle($parsedBody['progress_bar_title']); $instance->setProgressBarTitleColor($parsedBody['progress_bar_title_color']); diff --git a/server/src/Entity/Instance.php b/server/src/Entity/Instance.php index 95c42830..3f3b2fe3 100644 --- a/server/src/Entity/Instance.php +++ b/server/src/Entity/Instance.php @@ -199,6 +199,13 @@ class Instance implements \JsonSerializable */ protected $familyTitleBold; + /** + * @var string + * + * @Column(type="string", name="family_background_color", nullable=false, options={"default" : "#FFFFFF"}) + */ + protected $familyBackgroundColor; + /** * @var string * @@ -609,6 +616,16 @@ class Instance implements \JsonSerializable $this->familyTitleBold = $familyTitleBold; } + public function getFamilyBackgroundColor() + { + return $this->familyBackgroundColor; + } + + public function setFamilyBackgroundColor($familyBackgroundColor) + { + $this->familyBackgroundColor = $familyBackgroundColor; + } + public function getFamilyColor() { return $this->familyColor; @@ -861,6 +878,7 @@ class Instance implements \JsonSerializable 'family_header_background_color' => $this->getFamilyHeaderBackgroundColor(), 'family_title_color' => $this->getFamilyTitleColor(), 'family_title_bold' => $this->getFamilyTitleBold(), + 'family_background_color' => $this->getFamilyBackgroundColor(), 'family_color' => $this->getFamilyColor(), 'progress_bar_title' => $this->getProgressBarTitle(), 'progress_bar_title_color' => $this->getProgressBarTitleColor(), diff --git a/server/tests/Action/InstanceActionTest.php b/server/tests/Action/InstanceActionTest.php index 6dabfac7..604ca345 100644 --- a/server/tests/Action/InstanceActionTest.php +++ b/server/tests/Action/InstanceActionTest.php @@ -102,6 +102,7 @@ final class InstanceActionTest extends TestCase 'family_header_background_color' => '#F7F7F7', 'family_title_color' => '#007BFF', 'family_title_bold' => false, + 'family_background_color' => '#FFFFFF', 'family_color' => '#212529', 'progress_bar_title' => 'Dataset search', 'progress_bar_title_color' => '#000000', diff --git a/server/tests/Action/InstanceListActionTest.php b/server/tests/Action/InstanceListActionTest.php index d5f58185..afa42d02 100644 --- a/server/tests/Action/InstanceListActionTest.php +++ b/server/tests/Action/InstanceListActionTest.php @@ -86,6 +86,7 @@ final class InstanceListActionTest extends TestCase 'family_header_background_color' => '#F7F7F7', 'family_title_color' => '#007BFF', 'family_title_bold' => false, + 'family_background_color' => '#FFFFFF', 'family_color' => '#212529', 'progress_bar_title' => 'Dataset search', 'progress_bar_title_color' => '#000000', -- GitLab