{"version":3,"file":"onepoint-yap-dashboard-import.mjs","sources":["../../../../projects/onepoint-yap/dashboard/import/i18n/en.translations.ts","../../../../projects/onepoint-yap/dashboard/import/i18n/fr.translations.ts","../../../../projects/onepoint-yap/dashboard/import/store/import.actions.ts","../../../../projects/onepoint-yap/dashboard/import/store/import.reducer.ts","../../../../projects/onepoint-yap/dashboard/import/store/import.selectors.ts","../../../../projects/onepoint-yap/dashboard/import/style/css.component.ts","../../../../projects/onepoint-yap/dashboard/import/components/import.component.ts","../../../../projects/onepoint-yap/dashboard/import/components/import.component.html","../../../../projects/onepoint-yap/dashboard/import/store/import.service.ts","../../../../projects/onepoint-yap/dashboard/import/store/import.effects.ts","../../../../projects/onepoint-yap/dashboard/import/import-routing.module.ts","../../../../projects/onepoint-yap/dashboard/import/import.module.ts","../../../../projects/onepoint-yap/dashboard/import/onepoint-yap-dashboard-import.ts"],"sourcesContent":["export const enTranslations = {\n  '@yap': {\n    import: {\n      title: 'Import data',\n      datasetImport: 'Import in :',\n      import: 'Import',\n      errorTitle: 'Import failed',\n      successTitle: 'Import successful',\n      uploadTitle: 'Choose a .csv file',\n      selectFile: 'Select file',\n      importedLines: 'imported lines',\n      errors: 'errors',\n      error: 'Error on import: {{msg}}',\n      line: 'Line {{line}}: ',\n      withoutLine: 'Global errors: ',\n      dataset: 'Dataset',\n      fileType: 'Select file type',\n      code: {\n        UNRECOGNIZED: 'Provided file contains a column \"{{name}}\", which is not present in the chosen dataset',\n        FILE_MANDATORY: 'No file was provided',\n        NB_ATTRIBUTES:\n          'The number of columns in the file does not match the number of attributes in the chosen dataset',\n        CAST: 'Value {{name}} could not be casted to type \"{{type}}\"',\n        ELASTIC_SEARCH: 'Elastic Search error: {{elasticError}}'\n      }\n    }\n  }\n};\n","export const frTranslations = {\n  '@yap': {\n    import: {\n      title: 'Import de données',\n      datasetImport: 'Importer dans un jeu de données:',\n      import: 'Importer',\n      errorTitle: \"L'import a échoué\",\n      successTitle: 'Import de données réussi',\n      uploadTitle: 'Choisir un fichier .csv',\n      selectFile: 'Sélectionner un fichier',\n      importedLines: 'lignes importée(s)',\n      error: \"Erreur lors de l'import: {{msg}}\",\n      errors: 'erreur(s)',\n      line: 'Ligne {{line}}: ',\n      withoutLine: 'Erreurs globales: ',\n      dataset: 'Jeu de données',\n      fileType: 'Sélectionner un type de fichier',\n      code: {\n        UNRECOGNIZED:\n          \"Le fichier fourni contient une colonne «\\u00A0{{name}}\\u00A0», qui n'est pas présente dans le jeu de données choisi\",\n        FILE_MANDATORY: 'Aucun fichier fourni',\n        NB_ATTRIBUTES:\n          \"Le nombre des colonnes dans le fichier fourni ne correspond pas au nombre d'attributs dans le jeu de données choisi\",\n        CAST: \"La valeur «\\u00A0{{name}}\\u00A0», n'a pas pu être convertie en type «\\u00A0{{type}}\\u00A0»,\",\n        ELASTIC_SEARCH: 'Elastic Search stack trace error: {{elasticError}}'\n      }\n    }\n  }\n};\n","import { createAction, props } from '@ngrx/store';\n\nexport interface ImportError {\n  code: string;\n  params?: {\n    name?: string;\n    type?: string;\n    elasticError?: string;\n  };\n}\n\nexport interface ImportResponse {\n  numberOfLines: number;\n  itemErrors: { [p: string]: ImportError[] } | null;\n}\n\nexport const ImportActions = {\n  upload: createAction('[Import] import data', props<{ file: File; dataset: string }>()),\n  uploadSuccess: createAction('[Import] import data successful', props<{ numberOfLines: number }>()),\n  uploadFailure: createAction('[Import] import data failure', props<{ errors: any }>())\n};\n","import { createReducer, on } from '@ngrx/store';\nimport { ImportActions, ImportError } from './import.actions';\n\nexport const importFeatureKey = '@yap/import';\n\nexport interface ImportState {\n  loading: boolean;\n  errors: { [p: string]: ImportError[] } | null;\n  numberOfLines: number;\n}\n\nexport const initialImportState: ImportState = {\n  loading: false,\n  errors: null,\n  numberOfLines: 0\n};\n\nexport const importReducer = createReducer(\n  initialImportState,\n  on(ImportActions.upload, (state, action) => ({\n    ...state,\n    loading: true,\n    numberOfLines: 0,\n    errors: null\n  })),\n  on(ImportActions.uploadSuccess, (state, action) => ({\n    ...state,\n    loading: false,\n    numberOfLines: action.numberOfLines\n  })),\n  on(ImportActions.uploadFailure, (state, action) => ({\n    ...state,\n    loading: false,\n    errors: action.errors\n  }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\nimport * as fromPipeline from './import.reducer';\n\nconst feature = createFeatureSelector<fromPipeline.ImportState>(fromPipeline.importFeatureKey);\n\nconst numberOfLines = createSelector(feature, (state) => state?.numberOfLines);\nconst errors = createSelector(feature, (state) => state?.errors);\n\nexport const ImportSelectors = {\n  numberOfLines,\n  errors\n};\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'yap-import-css',\n  template: '',\n  styleUrls: ['./_o-import.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class YapImportCssComponent {}\n","import { Component } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport {\n  Dataset,\n  DataSourceActions,\n  DataSourceSelectors,\n  YapDatasetType,\n  YapI18nService\n} from '@onepoint-yap/dashboard';\nimport { map, Observable } from 'rxjs';\nimport { ImportActions, ImportError } from '../store/import.actions';\nimport { ImportSelectors } from '../store/import.selectors';\n\n@Component({\n  selector: 'yap-import',\n  templateUrl: './import.component.html'\n})\nexport class YapImportComponent {\n  datasets$: Observable<Dataset[]>;\n  file?: File;\n  datasetSelected?: string;\n  numberOfLine$: Observable<number>;\n  errors$: Observable<{ [p: string | number]: ImportError[] } | null>;\n  errorCount$: Observable<number | null>;\n  fileTypes: { label: string; value: string }[] = [\n    {\n      label: 'Csv',\n      value: 'csv'\n    }\n  ];\n\n  constructor(private store: Store, private translateService: YapI18nService) {\n    store.dispatch(DataSourceActions.dataset.loadDataset());\n\n    this.datasets$ = store\n      .select(DataSourceSelectors.datasets)\n      .pipe(\n        map((datasets) =>\n          datasets\n            .filter((dataset) => dataset.type === YapDatasetType.CLOSED)\n            .sort((a, b) => (a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1))\n        )\n      );\n    this.numberOfLine$ = store.select(ImportSelectors.numberOfLines);\n    this.errors$ = store.select(ImportSelectors.errors);\n    this.errorCount$ = this.errors$.pipe(\n      map((errors) => {\n        if (errors) {\n          return Object.values(errors).flat().length;\n        }\n        return null;\n      })\n    );\n  }\n\n  sortObjectEntries(obj: any) {\n    let arraySorted: any = [];\n    Object.keys(obj)\n      .sort((a: any, b: any) => a - b)\n      .forEach((el) => (arraySorted[el] = obj[el]));\n    return arraySorted;\n  }\n\n  uploadedChange($event: File) {\n    this.file = $event;\n  }\n\n  submit() {\n    if (this.file && this.datasetSelected) {\n      this.store.dispatch(ImportActions.upload({ file: this.file, dataset: this.datasetSelected }));\n      this.file = undefined;\n    }\n  }\n\n  isSubmitDisabled() {\n    return this.file === undefined || this.datasetSelected === undefined;\n  }\n\n  getFileSize(size: number) {\n    if (size >= 1000 && size < 1000000) {\n      return `${(size / 1000).toFixed(1)} KB`;\n    } else if (size >= 1000000) {\n      return `${(size / 1000000).toFixed(1)} MB`;\n    }\n    return `${size} bytes`;\n  }\n}\n","<yap-import-css></yap-import-css>\n<div class=\"o-import\">\n  <h1 class=\"a-h1\">{{ '@yap.import.title' | i18n }}</h1>\n  <div class=\"o-import__container\">\n    <div class=\"o-import__container__input\">\n      <div class=\"m-form-label-field\">\n        <div class=\"m-form-label-field\">\n          <label class=\"a-h3\" for=\"datasets\">{{ '@yap.import.fileType' | i18n }}</label>\n          <yap-select\n            class=\"a-yap-select\"\n            id=\"fileType\"\n            [items]=\"fileTypes\"\n            [itemsAsOption]=\"true\"\n            [ngModel]=\"fileTypes[0].value\"\n            [disabled]=\"true\"\n            bindValue=\"value\"\n            bindLabel=\"label\"\n          ></yap-select>\n        </div>\n        <label class=\"a-h3\" for=\"upload_input\">{{ '@yap.import.uploadTitle' | i18n }}</label>\n        <div class=\"o-file-input\">\n          <div *ngIf=\"file\" class=\"o-import__container__input__file\">\n            <yap-icon iconSvg=\"download\"></yap-icon>\n            <h3>{{ file.name }}</h3>\n            <span>{{ getFileSize(file.size) }}</span>\n          </div>\n          <yap-upload\n            id=\"upload_input\"\n            accept=\".csv\"\n            mode=\"csv\"\n            (uploadedFile)=\"uploadedChange($event)\"\n                      labelTranslate=\"@yap.import.selectFile\"\n          ></yap-upload>\n        </div>\n      </div>\n      <div class=\"m-form-label-field\">\n        <label class=\"a-h3\" for=\"datasets\">{{ '@yap.import.datasetImport' | i18n }}</label>\n        <yap-select\n          class=\"a-yap-select\"\n          id=\"datasets\"\n          [items]=\"datasets$ | async\"\n          [itemsAsOption]=\"true\"\n          [(ngModel)]=\"datasetSelected\"\n          [placeholder]=\"'@yap.import.dataset' | i18n\"\n          bindValue=\"id\"\n          bindLabel=\"name\"\n        ></yap-select>\n      </div>\n      <div class=\"o-import__container__input__actions\">\n        <button class=\"a-btn a-btn--primary\" (click)=\"submit()\"\n                [disabled]=\"isSubmitDisabled()\">\n          {{ '@yap.import.import' | i18n }}\n        </button>\n      </div>\n    </div>\n    <ng-container *ngIf=\"numberOfLine$ | async as lineImported; else errors\">\n      <div *ngIf=\"lineImported > 0; else errors\" class=\"o-import__result\">\n        <h2>{{ '@yap.import.successTitle' | i18n }}</h2>\n        <div>\n          <h3>{{ lineImported }} {{ '@yap.import.importedLines' | i18n }}</h3>\n        </div>\n      </div>\n    </ng-container>\n  </div>\n</div>\n<ng-template #errors>\n  <div class=\"o-import__result\" *ngIf=\"errors$ | async as errors\">\n    <h2 class=\"a-h2\">{{ '@yap.import.errorTitle' | i18n }}</h2>\n    <div>\n      <h3>{{ errorCount$ | async }} {{ '@yap.import.errors' | i18n }}</h3>\n      <div *ngFor=\"let error of errors | keyvalue : sortObjectEntries\" class=\"o-import__result__error\">\n        <p *ngIf=\"error.key === '0'; else withLine\">\n          {{ '@yap.import.withoutLine' | i18n }}\n        </p>\n        <ng-template #withLine>\n          {{'@yap.import.line' | i18n : { line: error.key } }}\n        </ng-template>\n        <ul *ngIf='error.value'>\n          <li *ngFor='let lineError of error.value'>{{ '@yap.import.code.' + lineError.code | i18n : lineError.params }}</li>\n        </ul>\n      </div>\n    </div>\n  </div>\n</ng-template>\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { ConfigSelectors } from '@onepoint-yap/dashboard';\nimport { mergeMap } from 'rxjs';\nimport { ImportResponse } from './import.actions';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ImportService {\n  constructor(private httpClient: HttpClient, private store: Store<any>) {}\n\n  upload(file: File, datasetId: string) {\n    const formData = new FormData();\n    formData.append('file', new Blob([file], { type: 'text/csv' }), file.name);\n\n    return this.store.select(ConfigSelectors.dataUrl).pipe(\n      mergeMap((url) =>\n        this.httpClient.post<ImportResponse>(`${url}/imports/csv/dataset/id/${datasetId}`, formData, {\n          headers: new HttpHeaders({ 'File-Content-Type': 'text/csv' })\n        })\n      )\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { catchError, map, mergeMap } from 'rxjs/operators';\nimport { ImportActions } from './import.actions';\nimport { ImportService } from './import.service';\nimport { YapI18nService, YapSnackbarService } from '@onepoint-yap/dashboard';\nimport { HttpErrorResponse } from '@angular/common/http';\n\n@Injectable()\nexport class ImportEffects {\n  upload$ = createEffect(() =>\n    this.actions$.pipe(\n      ofType(ImportActions.upload),\n      mergeMap((action) =>\n        this.service.upload(action.file, action.dataset).pipe(\n          map((data) => ImportActions.uploadSuccess({ numberOfLines: data.numberOfLines })),\n          catchError((error: HttpErrorResponse) => {\n            if (error.status === 400) {\n              return [ImportActions.uploadFailure({ errors: error.error.itemErrors })];\n            }\n            this.snackbar.open({\n              type: 'error',\n              message: this.translateService.instant('@yap.import.error', { msg: error.error.message })\n            });\n            throw error;\n          })\n        )\n      )\n    )\n  );\n\n  constructor(\n    private actions$: Actions,\n    private service: ImportService,\n    private snackbar: YapSnackbarService,\n    private translateService: YapI18nService\n  ) {}\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { YAP_ACCESS_GUARD } from '@onepoint-yap/dashboard';\nimport { YapImportComponent } from './components/import.component';\n\nconst routes: Routes = [\n  {\n    path: '',\n    component: YapImportComponent,\n    data: {\n      access: {\n        module: 'dashboard',\n        page: 'import'\n      }\n    },\n    canActivate: [YAP_ACCESS_GUARD]\n  }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(routes)],\n  exports: [RouterModule]\n})\nexport class YapImportRoutingModule {}\n","import { CommonModule, DatePipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { YapCoreModule, YapI18nModule, YapI18nService, YapIconModule, YapSelectModule } from '@onepoint-yap/dashboard';\nimport { enTranslations } from './i18n/en.translations';\nimport { frTranslations } from './i18n/fr.translations';\nimport { YapImportComponent } from './components/import.component';\nimport { FormsModule } from '@angular/forms';\nimport { StoreModule } from '@ngrx/store';\nimport { importFeatureKey, importReducer } from './store/import.reducer';\nimport { EffectsModule } from '@ngrx/effects';\nimport { ImportEffects } from './store/import.effects';\nimport { YapImportRoutingModule } from './import-routing.module';\nimport { YapImportCssComponent } from './style/css.component';\n\n@NgModule({\n  providers: [DatePipe],\n  declarations: [YapImportComponent, YapImportCssComponent],\n  imports: [\n    YapCoreModule,\n    YapSelectModule,\n    YapI18nModule,\n    CommonModule,\n    YapIconModule,\n    FormsModule,\n    YapImportRoutingModule,\n    StoreModule.forFeature(importFeatureKey, importReducer),\n    EffectsModule.forFeature([ImportEffects])\n  ],\n  exports: [YapImportComponent]\n})\nexport class YapImportModule {\n  constructor(private yapTranslateService: YapI18nService) {\n    this.yapTranslateService.addLangObject('fr', 'import', frTranslations);\n    this.yapTranslateService.addLangObject('en', 'import', enTranslations);\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["fromPipeline.importFeatureKey","i1","i2","i5.YapImportCssComponent","mergeMap","map","i2.ImportService","i3"],"mappings":"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"}