npm package: @guajiritos/services
Description: `Guajiritos Services` es una librería para Angular que proporciona los servicios, interfaces, pipes y utilidades necesarios para el correcto funcionamiento de las plataformas de Guajiritos S.R.L.
Latest version: 19.0.31

# Guajiritos Services

`Guajiritos Services` es una librería para Angular que proporciona los servicios, interfaces, pipes y utilidades necesarios para el correcto funcionamiento de las plataformas de Guajiritos S.R.L.

## Instalación

Con `npm`

```sh
npm i @guajiritos/services --save
```

Con `yarn`

```sh
yarn add @guajiritos/services
```

Con `pnpm`

```sh
pnpm add @guajiritos/services
```

### Dependencias

`Guajiritos Services` tiene dependencias de `@angular/material` y `lodash.merge`. Es recomendable instalar @angular/material usando el cli de angular.

```shell
ng add @angular/material
```

Con `npm`

```shell
npm i lodash.merge --save
```

Con `yarn`

```shell
yarn add lodash.merge
```

Con `pnpm`

```shell
pnpm add lodash.merge
```

## Utilidades

`Guajiritos Services` contiene las siguientes utilidades.

### Rest Full Service

`Rest Full Service` es un servicio que contiene los elementos necesarios para hacer peticiones a un API-REST así como las peticiones básicas.

Para el correcto funcionamiento es necesario extender de la clase RestFullService, notar que contiene dos interfaces, una sería para la respuesta a la petición GET y la otra sería el cuerpo de la petición POST.

```ts
import {Injectable} from '@angular/core';

import {RestFullService} from "@guajiritos/services";

@Injectable({
  providedIn: 'root'
})
export class AudienceService extends RestFullService<AudienceOut, AudienceIn> {
  override url: string = URL_AUDIENCE;
  override urlId: string = URL_AUDIENCE_ID;
  
  private urlShare: string = URL_SHARE_AUDIENCE

  public shareAudience(body: ShareAudienceDto) {
    return this.http.post(this.urlShare, body);
  }
}
```

### Pipes

`@guajiritos/services` contiene las siguientes `pipes`:

```text
- CapitalizePipe
- I18nPipe 
```

`CapitalizePipe` permite convertir una cadena de texto con solo su primera letra en mayúsculas.

```html

<button *ngIf="action?.isCreate || action?.isClone" [matTooltip]="'cancelar' | translate | capitalize"
        color="accent" mat-stroked-button>
  {{ "atrás" | translate | titlecase }}
</button>
```
`I18nPipe` permite hacer la traducción de un texto que contenga la llave para diferentes idiomas.

```html
<mat-option *ngFor="let language of languages()" [value]="language.alpha2">
  {{ language.name | i18n: translateService.currentLang }}
</mat-option>
```

### Classes

`@guajiritos/services` contiene las clases:

```text
- ObservableDestroy
- MatPaginatorI18nService 
```

`ObservableDestroy` es una clase que permite destruir los observables de forma eficiente y con el mínimo de desarrollo.

```ts
private isLoadingSubscribe(): void {
  this._loadingService.isLoading$
    .pipe(ObservableDestroy.unregisterFn())
    .subscribe({
      next: (isLoading: boolean): void => {
        this.loading.set(isLoading);
      }
    });
}
```

`MatPaginatorI18nService` es una clase que permite hacer la traducción del módulo `Paginator` de `@angular/material`.

### Interfaces

```text
- GuajiritosAutocompleteMultipleConfig
- RestrictionFilter
- ApiFormData
- Filter
- ServiceOptions
- DisplayOptionItem
- DisplayOption
- SelectionOptions
- CssClass
- CssStyle
- IterableOptions
- TemplateDataSelector
- TemplateData
- FooterOption
- ColumnOptions
- SpecificCondition
- CustomAction
- BasicBtn
- BasicActions
- SelectOption
- CustomOptions
- ToggleOptions
- ColumnFilterOptions
- CrudOptions
- StaticFilter
- StaticFiltersOut
- DataTableOptions
- Pagination
```

### Enums

```text
- DisplayOptionItemType
- TemplateDataSelectorType
- ColumnOptionsType
- SpecificConditionOperator
- CustomActionType
- ButtonMode
- ColumnFilterOptionsType
```