Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Global settings [materializeParams] ? #417

Closed
kjakub opened this issue Mar 23, 2018 · 3 comments
Closed

Global settings [materializeParams] ? #417

kjakub opened this issue Mar 23, 2018 · 3 comments

Comments

@kjakub
Copy link

kjakub commented Mar 23, 2018

How can i provide global [materializeParams] setting for example for all date pickers in app ?

<input type="date" [(ngModel)]="user.birth_date" name="birth_date" materialize="pickadate" placeholder="{{ 'BUTTON.DATE' | translate }}" [materializeParams]="[{format:'dd/mm/yyyy', selectYears: 130, selectMonths: true, max: true, monthsFull: [ 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' ] }]" required />

@kjakub kjakub changed the title Global setting ? Global settings [materializeParams] ? Mar 23, 2018
@pain0486
Copy link

pain0486 commented Apr 27, 2018

I have tackled this by creating a config.ts file like the following

export const CONFIG = {
  ...
  datePickerOptions: {
    format: 'dd/mm/yyyy',
    selectYears: 130,
    selectMonths: true,
    max: true,
    monthsFull: [
      'Januar',
      'Februar',
      'März',
      'April',
      'Mai',
      'Juni',
      'Juli',
      'August',
      'September',
      'Oktober',
      'November',
      'Dezember'
    ]
  }
...
}
Then on all the components you want to use it on import it and have a property return it
```typescript
import { CONFIG } from '..config';
...
public config = CONFIG.datePickerOptions;
...

Then in your template simply do this

<input type="date" [(ngModel)]="user.birth_date" name="birth_date" materialize="pickadate" placeholder="{{ 'BUTTON.DATE' | translate }}" [materializeParams]="[config]" required />

@kjakub
Copy link
Author

kjakub commented Apr 27, 2018

Thanks for update @pain0486 i ended up ripping off this lib and making up my own directive because i needed also translations..i am far from being TS expert but this works...

import { Directive, ElementRef, Input, AfterViewInit } from '@angular/core';
import { Translator } from "angular-translator";

// has been polyfilled from lib
// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent
declare var CustomEvent;
declare var $: any;
declare var Materialize: any;

@Directive({
  selector: '[appCustomDate]'
})
export class CustomDateDirective {

	@Input() ngModel;

  private enCal = {
    labelMonthNext: 'Next month',
    labelMonthPrev: 'Previous month',
    labelMonthSelect: 'Select a month',
    labelYearSelect: 'Select a year',
    monthsFull: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],
    monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ],
    weekdaysFull: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
    weekdaysShort: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],
    weekdaysLetter: [ 'S', 'M', 'T', 'W', 'T', 'F', 'S' ],
    today: 'Today',
    clear: 'Clear',
    close: 'Close'
  }

  private frCal = {
    labelMonthNext: 'Mois suivant',
    labelMonthPrev: 'Mois précédent.',
    labelMonthSelect: 'Selectionner mois',
    labelYearSelect: 'Selectionner année',
    monthsFull: [ 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre' ],
    monthsShort: [ 'Jan', 'Fev', 'Mar', 'Avr', 'Mai', 'Juin', 'Juil', 'Aou', 'Sep', 'Oct', 'Nov', 'Dec' ],
    weekdaysFull: [ 'Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi' ],
    weekdaysShort: [ 'Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam' ],
    weekdaysLetter: [ 'D', 'L', 'M', 'M', 'J', 'V', 'S' ],
    today: "Aujourd'hui",
    clear: 'Effacer',
    close: 'Fermer',
  }

  constructor(private _el: ElementRef, private translator: Translator) {
    // this.translator.languageChanged.subscribe(() => {
    //   // this.perform();
    //   alert(this.translator.language);
    // });
  }

  public ngAfterViewInit() {
      this.perform();
  }

  perform(){
  	// this can also subscribe to change and redraw ?
  	// https://github.com/InfomediaLtd/angular2-materialize/issues/280

    const defSettings = {      
      format:'dd/mm/yyyy',
      container: 'body',
      selectMonths: true,
      selectYears: 130,
      max: true,
      closeOnSelect: true
    }

    const lanSettings = this.translator.language === "en" ? this.enCal : this.frCal

    const nativeElement = this._el.nativeElement;
    const jqueryPickerElement = $(nativeElement);

    const datePicker = jqueryPickerElement['pickadate']({...defSettings, ...lanSettings});
    const picker = datePicker.pickadate('picker');
    setTimeout(() => {
        if (this.ngModel) { // PR 292 - 1
            picker.set('select', this.ngModel);
        } else {
            const value = jqueryPickerElement.val();
            if (value && value.length>0) {
                picker.set('select', value);
            }
        }
        jqueryPickerElement.on('change', e => nativeElement.dispatchEvent((new CustomEvent("input"))));
    });
  }

}

@kjakub kjakub closed this as completed Apr 27, 2018
@kjakub
Copy link
Author

kjakub commented Apr 27, 2018

#412

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants