{"version":3,"file":"main.fd611e8c04dcc16c.js","mappings":"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","names":["SortState","constructor","this","column","direction","GroupingState","selectedRowIds","Set","itemIds","checkAreAllRowsSelected","length","size","selectRow","id","has","delete","add","clearRows","_itemIds","isRowSelected","selectAllRows","forEach","getSelectedRows","Array","from","getSelectedRowsCount","DEFAULT_STATE","filter","datesFilter","paginator","PaginatorState","sorting","searchTerm","grouping","entityId","undefined","TableService","items$","_items$","asObservable","isLoading$","_isLoading$","isLoading","next","isFirstLoading$","_isFirstLoading$","errorMessage$","_errorMessage","subscriptions","_subscriptions","_tableState$","value","http","BehaviorSubject","API_URL","create","item","post","pipe","catchError","err","console","error","of","finalize","find","tableState","url","items","total","getItemById","get","update","put","updateStatusForItems","ids","status","deleteItems","fetch","request","tap","res","patchStateWithoutFetch","recalculatePaginator","map","el","subscribe","push","setDefaults","patchState","patch","newState","Object","assign","TableExtendedService","super","static","t","i0","HttpClient","core","jDH","factory","ɵfac","providedIn","CRUDTableModule","$C","G2t","CommonModule","FormsModule","InlineSVGModule","PageSizes","page","pageSize","pageSizes","resetPageSize","Time","dayUnits","hourUnits","minuteUnits","startTime","endTime","DateHelperService","getDaysForDateRange","startDate","endDate","days","current","Date","getFullYear","getMonth","getDate","getOrdinalIndicator","day","dayNumber","getDatePipeFromLocale","navigator","language","TimesheetFrequencyType","Weekly","Monthly","MultiWeek","TimesheetDay","mondayUnits","tuesdayUnits","wednesdayUnits","thursdayUnits","fridayUnits","saturdayUnits","sundayUnits","rate","TimesheetRate","name","rateType","TimesheetHelperService","daysOfWeek","getTimesheetFrequencyText","timesheetDetail","frequency","frequencyType","getDayUnits","getDay","calculateNonWorkingDay","nonWorkingDays","sunday","monday","tuesday","wednesday","thursday","friday","saturday","isFinishedStatus","timesheet","getDays","startDay","i","calculateTotalTimeUnits","timesheetView","totalMins","day1StartTime","day1EndTime","timeDiff","day2StartTime","day2EndTime","day3StartTime","day3EndTime","day4StartTime","day4EndTime","day5StartTime","day5EndTime","day6StartTime","day6EndTime","day7StartTime","day7EndTime","hours","Math","floor","mapTimesheetViewsToTimesheetDays","timesheetViews","timesheetDays","timesheetDetailDay","x","rateId","toDateString","start","end","timesheetDay","getMappedUnits","dayFormsToUpdate","dayForms","timesheetWeeks","dayForm","week","date","rates","getTime","dayUnit","formatTimesheetDates","timesheets","formatedTimesheets","setMinutesWithOffset","offsetDate","setMinutes","getMinutes","getTimezoneOffset","dayOfWeek","findIndex","d","getMappedTimeValue","timeField","timeParts","splitTime","setUTCHours","time","split","Number","parseInt","startParts","endParts","ScreenService","isMobile","mobileSizeThreshold","resize","width","window","innerWidth","height","innerHeight","windowHeight","document","documentElement","style","setProperty","_angular_core__WEBPACK_IMPORTED_MODULE_0__","StorageKeyConstants","SelectedLanguage","SelectedTheme","AuthRequestModel","AuthModel","AuthHTTPService","appConfig","login","email","password","body","AESService","encrypt","username","scope","options","headers","HttpHeaders","set","getConfig","apiUrl","resetPassword","access_token","httpPost","success","forgotPassword","getTheme","hash","params","httpGet","theme","getUserByToken","token","httpHeaders","Authorization","response","responseType","httpPut","returnHttpResponse","observe","httpDelete","i1","i2","_angular_core__WEBPACK_IMPORTED_MODULE_4__","AuthService","authHttpService","router","authSessionStorageToken","environment","appVersion","USERDATA_KEY","DataAccessStorageKey","selectedTheme","isLoadingSubject","currentUserSubject","setAuthFromSessionStorage","auth","sessionStorage","setItem","JSON","stringify","getAuthFromSessionStorage","authData","parse","getItem","setTimeout","navigate","then","location","reload","getDataAccess","dataAccess","dataAccessValue","currentUserValue","user","switchMap","logout","removeItem","queryParams","needsPasswordReset","isResetPassword","userName","setSelectedTheme","localStorage","_angular_core__WEBPACK_IMPORTED_MODULE_9__","SharedModule","PrimeNgModule","TranslationModule","AppConfigService","load","toPromise","Config","ConfigService","config","_config","Promise","resolve","msg","salt","CryptoJS","WordArray","random","key","keySize","iterations","iv","encrypted","padding","Pkcs7","mode","CBC","Base64","concat","ciphertext","_angular_core__WEBPACK_IMPORTED_MODULE_2__","Theme","header","headerLogoImage","subHeader","background","loginBackground","loginButton","loginLogoImage","loginSideImage","hasChanged","THEME_LOCAL_STORAGE_KEY","ThemeService","authService","httpClient","themeChanged","isLoadingChanged","getThemeFromLocalStorage","json","checkIfThemeExists","loadTheme","previousTheme","switchTheme","themeLink","getElementById","result","href","DOCUMENT","TranslateModule","PrimeNGConfig","MessageService","imports","ButtonModule","InputTextModule","ImageModule","MessagesModule","ProgressSpinnerModule","ToastModule","TabMenuModule","AvatarModule","AvatarGroupModule","TieredMenuModule","DialogModule","DynamicDialogModule","PaginatorModule","SidebarModule","PanelMenuModule","InputSwitchModule","CardModule","DividerModule","ConfirmDialogModule","FloatLabelModule","TabViewModule","CalendarModule","InputTextareaModule","CheckboxModule","TableModule","DropdownModule","InputIconModule","IconFieldModule","FileUploadModule","production","routes","path","loadChildren","all","__webpack_require__","e","bind","m","AuthModule","ErrorsModule","canActivate","AuthGuard","route","state","LayoutModule","redirectTo","AppRoutingModule","RouterModule","forRoot","locale","lang","data","COMMON","CANCEL","CLOSE","SUBMIT","NO","YES","YES_CLOSE_AND_LOSE_CHANGES","DISCARD_AND_CLOSE","SAVE_AND_CLOSE","SEARCH","SHOWING_PAGE","OF","RESULTS_PER_PAGE","VALIDATION","SOMETHING_WENT_WRONG","SUCCESSFULLY_UPDATED","ANY_CHANGES_MADE_WILL_BE_LOST","ARE_YOU_SURE_YOU_WANT_TO_PROCEED","FAILED_TO_RETRIEVE_DATA","FAILED_TO_RETRIEVE_DATA_FOR_SELECTION","NAVBAR","HELLO","MY_DETAILS","MY_CONTACT_METHODS","MY_DATA_CONSENTS","MY_DOCUMENTS","LOGOUT","SELECT_LANGUAGE","MENU","SETTINGS","TERMSANDCONDITIONS","LANGUAGE","ENLABEL","CHLABEL","ESLABEL","JALABEL","DELABEL","FRLABEL","MENU_ITEM","CURRENT_PLACEMENT","COMPLIANCE","TIMESHEETS","EXPENSES","DOCUMENTS","AUTH","LOGIN","BUTTON","SIGN_IN","LABEL","EMAIL","PASSWORD","FORGOT_PASSWORD","EMAIL_INVALID","EMAIL_MAX_LENGTH","EMAIL_REQUIRED","LOGIN_FAILED","PASSWORD_MAX_LENGTH","PASSWORD_MIN_LENGTH","PASSWORD_REQUIRED","ENTER_YOUR_EMAIL_TO_RESET_YOUR_PASSWORD","FORGOTTEN_PASSWORD","OK_GOT_IT","EMAIL_SENT_MESSAGE1","EMAIL_SENT_MESSAGE2","EMAIL_SENT_TITLE","SUCCESS","RESET_PASSWORD","ENTER_NEW_PASSWORD_DETAILS","CONFIRM_NEW_PASSWORD","CREATE_NEW_PASSWORD","OLD_PASSWORD","PASSWORDS_DONT_MATCH","PASSWORD_PATTERN","REGISTRATION_DETAILS_INCORRECT","CONTACT_PREFERENCES","PLEASE_SELECT_HOW_YOU_WISH_TO_BE_CONTACTED","RECEIVE","DO_NOT_RECEIVE","SALES_EMAIL","PHONE_CALL","TEXT_MESSAGE","ERROR_UPDATING","WARNING","WARNING_MESSAGE","PLEASE_SELECT_HOW_YOU_WISH_TO_MANAGE_YOUR_DATA_CONSENTS","CONSENT","WITHDRAW","DATA_CONSENT_PURPOSE","CONSENT_METHOD","CONSENT_GIVEN","CONSENT_EXPIRY","WITHDRAW_CONSENT","MY_CURRENT_PLACEMENT","MY_CURRENT_PLACEMENTS","NO_ACTIVE_PLACEMENTS","CLIENT","PLACEMENT_DETAILS","JOB_TITLE","TYPE","START_DATE","END_DATE","CANDIDATE_COMPANY","NOTICE_FROM_US","NOTICE_FROM_YOU","PAY","CLIENT_ADDRESS","STATUS","EVIDENCE","REASON_FOR_REJECTION","VALID_FROM","VALID_TO","DESCRIPTION","LAST_UPDATED","PLEASE_CLICK_TO_DOWNLOAD","DOWNLOAD","NO_DOCUMENTS_FOUND","CHECKED_ON","CHECKED_BY","OUTSTANDING","SUBMITTED","CHECKED","REJECTED","FROM_DATE_IS_REQUIRED","TO_DATE_IS_REQUIRED","TO_DATE_LESS_THAN_FROM_DATE","FROM_DATE_GREATER_THAN_TO_DATE","ERROR_SAVING","TO_DATE_MUST_BE_IN_FUTURE","FILEUPLOAD","CHOOSEFILE","UPLOADFILE","REMOVEFILE","PENDINGUPLOAD","COMPLETEDUPLOAD","COMPLETED","INVALID_FILE","FILE_IS_ZERO_SIZE","MULTIPLE_FILES_ARE_ZERO_SIZE","TAB_TITLES","CANDIDATE_INFORMATION","PREFERENCES","PROFILE","CANDIDATE_INFORMATION_TAB","FIRST_NAME","LAST_NAME","MOBILE_PHONE","HOME_PHONE","WORK_PHONE","PERSONAL_EMAIL","WORK_EMAIL","LINKEDIN","ADDRESSLINE1","CITY_TOWN","POSTCODE","COUNTRY","PREFERENCES_TAB","AVAILABILITY","NOTICE_PERIOD","CURRENCY","CONTRACTOR","TEMP","RATE_FROM","PAY_FREQUENCY","RATE_TO","PERMANENT","SALARY_FROM","SALARY_TO","CHOOSE_INTERVAL","SELECT_A_CURRENCY","PAY_FREQUENCY_PLACEHOLDER","PROFILE_TAB","CANDIDATE_SUMMARY","ROLES_SOUGHT","CANDIDATE_SUMMARY_PLACEHOLDER","ROLESSOUGHT_SUMMARY_PLACEHOLDER","FIRST_NAME_VALIDATION","LAST_NAME_VALIDATION","PHONE_NUMBER_VALIDATION","PHONE_NUMBER_REQUIRED","EMAIL_VALIDATION","FREQUENCY_REQUIRED","RATE_FROM_VALIDATION","CANDIDATE_SUMMARY_VALIDATION","ROLE_SOUGHT_VALIDATION","SALARY_TO_VALIDATION","SALARY_REQUIRED","PAY_FREQUENCY_REQUIRED","SELECT_A_UNIT","RATE_SET_REQUIRED","SALARY_SET_REQUIRED","NOTICE_PERIOD_VALIDATION","DOCUSIGN","DOCUSIGN_TITLE","ENVELOPECOMPLETED","DOCUMENTSSENT","ENVELOPEDELIVERED","DOCUMENTSPACKREQUESTED","ENVELOPEID","PLACEMENT","CREATED_DATE","NAME","DOCUMENTID","SIGN_DOCUMENTS","EMBEDDED_URL_CREATED","VIEW_PDF","SENT","DELIVERED","VOIDED","CREATED","LOCALIZATION_LOCAL_STORAGE_KEY","TranslationService","translate","langIds","addLangs","setDefaultLang","loadTranslations","args","setTranslation","setLanguage","use","getDefaultLang","getSelectedLanguage","SplashScreenService","animationBuilder","init","element","hide","stopped","player","build","opacity","animate","nativeElement","onDone","remove","display","play","AppComponent","translationService","splashScreenService","tableService","themeService","screenService","translateService","ngZone","destroy$","Subject","enLang","chLang","esLang","jpLang","deLang","frLang","ngOnInit","runOutsideAngular","addEventListener","onResize","URLSearchParams","search","events","takeUntil","event","NavigationEnd","scrollTo","classList","browserLang","getBrowserLang","localLanguagePreference","langs","localThemePreference","ngOnDestroy","complete","removeEventListener","i3","i4","i5","i6","i7","VBU","selectors","decls","vars","consts","template","rf","ctx","HttpHeaderConstants","Device","AuthInterceptor","configService","intercept","req","authToken","device","userAgent","cloneReq","startsWith","clone","append","handle","EMPTY","throwError","appInitializer","configInitializer","initializeApp","_asyncToGenerator","registerLocaleData","localeDe","localeFr","localeZh","localeJa","localeEs","AppModule","bootstrap","DialogService","ConfirmationService","provide","APP_INITIALIZER","useFactory","multi","deps","HIGHLIGHT_OPTIONS","useValue","coreLibraryLoader","languages","xml","typescript","scss","HTTP_INTERCEPTORS","useClass","DatePipe","ReactiveFormsModule","BrowserModule","BrowserAnimationsModule","HttpClientModule","HighlightModule","ClipboardModule","NgbModule","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","catch"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/_metronic/shared/crud-table/models/sort.model.ts","./src/app/_metronic/shared/crud-table/models/grouping.model.ts","./src/app/_metronic/shared/crud-table/services/table.service.ts","./src/app/_metronic/shared/crud-table/services/table.extended.service.ts","./src/app/_metronic/shared/crud-table/crud-table.module.ts","./src/app/_metronic/shared/crud-table/models/paginator.model.ts","./src/app/_mx/models/time.model.ts","./src/app/_mx/services/helpers/date-helper/date-helper.service.ts","./src/app/_mx/constants/LocaleConstants.ts","./src/app/_mx/constants/DateFormatConstants.ts","./src/app/_mx/enums/timesheet-frequency-type.enum.ts","./src/app/_mx/models/timesheet/timesheet-day.model.ts","./src/app/_mx/models/timesheet/timesheet-rates.model.ts","./src/app/_mx/services/helpers/timesheet-helper/timesheet-helper.service.ts","./src/app/_mx/services/screen/screen.service.ts","./src/app/_primeng/constants/storage-key.constants.ts","./src/app/_primeng/modules/auth/models/auth.model.ts","./src/app/_primeng/modules/auth/services/auth/auth-http.service.ts","./src/app/_primeng/modules/auth/services/auth/auth.service.ts","./src/app/_primeng/modules/shared/shared.module.ts","./src/app/_primeng/services/appconfig.service.ts","./src/app/_primeng/models/config/config.model.ts","./src/app/_primeng/services/config/config.service.ts","./src/app/_primeng/services/encryption/aes-service.ts","./src/app/_primeng/models/theme/theme.model.ts","./src/app/_primeng/services/theme/theme.service.ts","./src/app/modules/i18n/translation.module.ts","./src/app/modules/primeng/primeng.module.ts","./src/environments/environment.prod.ts","./src/app/app-routing.module.ts","./src/app/_primeng/modules/auth/services/auth/auth.guard.ts","./src/app/modules/i18n/vocabs/en.ts","./src/app/modules/i18n/vocabs/ch.ts","./src/app/modules/i18n/vocabs/es.ts","./src/app/modules/i18n/vocabs/jp.ts","./src/app/modules/i18n/vocabs/de.ts","./src/app/modules/i18n/vocabs/fr.ts","./src/app/modules/i18n/translation.service.ts","./src/app/_mx/partials/layout/splash-screen/splash-screen.service.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/_mx/services/appconfig.service.ts","./src/app/constants/http-header.constants.ts","./src/app/interceptors/auth.interceptor.ts","./src/app/app.module.ts","./src/main.ts"],"sourcesContent":["export type SortDirection = 'asc' | 'desc' | '';\r\n\r\nexport interface ISortState {\r\n column: string;\r\n direction: SortDirection;\r\n}\r\n\r\nexport class SortState implements ISortState {\r\n column = 'id'; // Id by default\r\n direction: SortDirection = 'asc'; // asc by default;\r\n}\r\n\r\nexport interface ISortView {\r\n sorting: SortState;\r\n ngOnInit(): void;\r\n sort(column: string): void;\r\n}\r\n","export interface IGroupingState {\r\n selectedRowIds: Set;\r\n itemIds: number[];\r\n checkAreAllRowsSelected(): boolean;\r\n selectRow(id: number): IGroupingState;\r\n // tslint:disable-next-line:variable-name\r\n clearRows(_itemIds: number[]): IGroupingState;\r\n isRowSelected(id: number): boolean;\r\n selectAllRows(): IGroupingState;\r\n getSelectedRows(): number[];\r\n getSelectedRowsCount(): number;\r\n}\r\n\r\nexport class GroupingState implements IGroupingState {\r\n selectedRowIds: Set = new Set();\r\n itemIds = [];\r\n\r\n\r\n checkAreAllRowsSelected(): boolean {\r\n if (this.itemIds.length === 0) {\r\n return false;\r\n }\r\n\r\n return this.selectedRowIds.size === this.itemIds.length;\r\n }\r\n\r\n selectRow(id: number): GroupingState {\r\n if (this.selectedRowIds.has(id)) {\r\n this.selectedRowIds.delete(id);\r\n } else {\r\n this.selectedRowIds.add(id);\r\n }\r\n return this;\r\n }\r\n\r\n // tslint:disable-next-line:variable-name\r\n clearRows(_itemIds: number[]): GroupingState {\r\n this.itemIds = _itemIds;\r\n this.selectedRowIds = new Set();\r\n return this;\r\n }\r\n\r\n isRowSelected(id: number): boolean {\r\n return this.selectedRowIds.has(id);\r\n }\r\n\r\n selectAllRows(): GroupingState {\r\n const areAllSelected = this.itemIds.length === this.selectedRowIds.size;\r\n if (areAllSelected) {\r\n this.selectedRowIds = new Set();\r\n } else {\r\n this.selectedRowIds = new Set();\r\n this.itemIds.forEach(id => this.selectedRowIds.add(id));\r\n }\r\n return this;\r\n }\r\n\r\n getSelectedRows(): number[] {\r\n return Array.from(this.selectedRowIds);\r\n }\r\n\r\n getSelectedRowsCount(): number {\r\n return this.selectedRowIds.size;\r\n }\r\n}\r\n\r\nexport interface IGroupingView {\r\n grouping: GroupingState;\r\n ngOnInit(): void;\r\n}\r\n","// tslint:disable:variable-name\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { BehaviorSubject, Observable, of, Subscription } from 'rxjs';\r\nimport { catchError, finalize, tap } from 'rxjs/operators';\r\nimport { PaginatorState } from '../models/paginator.model';\r\nimport { ITableState, TableResponseModel } from '../models/table.model';\r\nimport { BaseModel } from '../models/base.model';\r\nimport { SortState } from '../models/sort.model';\r\nimport { GroupingState } from '../models/grouping.model';\r\nimport { environment } from '../../../../../environments/environment';\r\n\r\nexport class BetweenDatesFilter {\r\n dateField: string;\r\n startDate: Date;\r\n endDate: Date; \r\n}\r\n\r\nconst DEFAULT_STATE: ITableState = {\r\n filter: {},\r\n datesFilter: [],\r\n paginator: new PaginatorState(),\r\n sorting: new SortState(),\r\n searchTerm: '',\r\n grouping: new GroupingState(),\r\n entityId: undefined\r\n};\r\n\r\nexport abstract class TableService {\r\n // Private fields\r\n private _items$ = new BehaviorSubject([]);\r\n private _isLoading$ = new BehaviorSubject(false);\r\n private _isFirstLoading$ = new BehaviorSubject(true);\r\n private _tableState$ = new BehaviorSubject(DEFAULT_STATE);\r\n private _errorMessage = new BehaviorSubject('');\r\n private _subscriptions: Subscription[] = [];\r\n\r\n // Getters\r\n get items$() {\r\n return this._items$.asObservable();\r\n }\r\n \r\n get isLoading$() {\r\n return this._isLoading$.asObservable();\r\n }\r\n\r\n isLoading(isLoading: boolean) {\r\n this._isLoading$.next(isLoading);\r\n }\r\n \r\n get isFirstLoading$() {\r\n return this._isFirstLoading$.asObservable();\r\n }\r\n get errorMessage$() {\r\n return this._errorMessage.asObservable();\r\n }\r\n get subscriptions() {\r\n return this._subscriptions;\r\n }\r\n // State getters\r\n get paginator() {\r\n return this._tableState$.value.paginator;\r\n }\r\n get filter() {\r\n return this._tableState$.value.filter;\r\n }\r\n get datesFilter() {\r\n return this._tableState$.value.datesFilter;\r\n }\r\n get sorting() {\r\n return this._tableState$.value.sorting;\r\n }\r\n get searchTerm() {\r\n return this._tableState$.value.searchTerm;\r\n }\r\n get grouping() {\r\n return this._tableState$.value.grouping;\r\n }\r\n\r\n protected http: HttpClient;\r\n // API URL has to be overrided\r\n API_URL = '/endpoint';\r\n constructor(http: HttpClient) {\r\n this.http = http;\r\n }\r\n\r\n // CREATE\r\n // server should return the object with ID\r\n create(item: BaseModel): Observable {\r\n this._isLoading$.next(true);\r\n this._errorMessage.next('');\r\n return this.http.post(this.API_URL, item).pipe(\r\n catchError(err => {\r\n this._errorMessage.next(err);\r\n console.error('CREATE ITEM', err);\r\n return of({ id: undefined });\r\n }),\r\n finalize(() => this._isLoading$.next(false))\r\n );\r\n }\r\n\r\n // READ (Returning filtered list of entities)\r\n find(tableState: ITableState): Observable> {\r\n const url = this.API_URL + '/find';\r\n //const url = this.API_URL;\r\n this._errorMessage.next('');\r\n return this.http.post>(url, tableState).pipe(\r\n catchError(err => {\r\n this._errorMessage.next(err);\r\n console.error('FIND ITEMS', err);\r\n return of({ items: [], total: 0 });\r\n })\r\n );\r\n }\r\n\r\n getItemById(id: number): Observable {\r\n this._isLoading$.next(true);\r\n this._errorMessage.next('');\r\n const url = `${this.API_URL}/${id}`;\r\n return this.http.get(url).pipe(\r\n catchError(err => {\r\n this._errorMessage.next(err);\r\n console.error('GET ITEM BY IT', id, err);\r\n return of({ id: undefined });\r\n }),\r\n finalize(() => this._isLoading$.next(false))\r\n );\r\n }\r\n\r\n // UPDATE\r\n update(item: BaseModel): Observable {\r\n const url = `${this.API_URL}/${item.id}`;\r\n this._isLoading$.next(true);\r\n this._errorMessage.next('');\r\n return this.http.put(url, item).pipe(\r\n catchError(err => {\r\n this._errorMessage.next(err);\r\n console.error('UPDATE ITEM', item, err);\r\n return of(item);\r\n }),\r\n finalize(() => this._isLoading$.next(false))\r\n );\r\n }\r\n\r\n // UPDATE Status\r\n updateStatusForItems(ids: number[], status: string): Observable {\r\n this._isLoading$.next(true);\r\n this._errorMessage.next('');\r\n const body = { ids, status };\r\n const url = this.API_URL + '/updateStatus';\r\n return this.http.put(url, body).pipe(\r\n catchError(err => {\r\n this._errorMessage.next(err);\r\n console.error('UPDATE STATUS FOR SELECTED ITEMS', ids, status, err);\r\n return of([]);\r\n }),\r\n finalize(() => this._isLoading$.next(false))\r\n );\r\n }\r\n\r\n // DELETE\r\n delete(id: any): Observable {\r\n this._isLoading$.next(true);\r\n this._errorMessage.next('');\r\n const url = `${this.API_URL}/${id}`;\r\n return this.http.delete(url).pipe(\r\n catchError(err => {\r\n this._errorMessage.next(err);\r\n console.error('DELETE ITEM', id, err);\r\n return of({});\r\n }),\r\n finalize(() => this._isLoading$.next(false))\r\n );\r\n }\r\n\r\n // delete list of items\r\n deleteItems(ids: number[] = []): Observable {\r\n this._isLoading$.next(true);\r\n this._errorMessage.next('');\r\n const url = this.API_URL + '/deleteItems';\r\n const body = { ids };\r\n return this.http.put(url, body).pipe(\r\n catchError(err => {\r\n this._errorMessage.next(err);\r\n console.error('DELETE SELECTED ITEMS', ids, err);\r\n return of([]);\r\n }),\r\n finalize(() => this._isLoading$.next(false))\r\n );\r\n }\r\n\r\n public fetch() {\r\n this._isLoading$.next(true);\r\n this._errorMessage.next('');\r\n const request = this.find(this._tableState$.value)\r\n .pipe(\r\n tap((res: TableResponseModel) => {\r\n this._items$.next(res.items);\r\n this.patchStateWithoutFetch({\r\n paginator: this._tableState$.value.paginator.recalculatePaginator(\r\n res.total\r\n ),\r\n });\r\n }),\r\n catchError((err) => {\r\n this._errorMessage.next(err);\r\n return of({\r\n items: [],\r\n total: 0\r\n });\r\n }),\r\n finalize(() => {\r\n this._isLoading$.next(false);\r\n const itemIds = this._items$.value.map((el: T) => {\r\n const item = (el as unknown) as BaseModel;\r\n return item.id;\r\n });\r\n this.patchStateWithoutFetch({\r\n grouping: this._tableState$.value.grouping.clearRows(itemIds), \r\n });\r\n })\r\n )\r\n .subscribe();\r\n this._subscriptions.push(request);\r\n }\r\n\r\n public setDefaults() {\r\n this.patchStateWithoutFetch({ filter: {} });\r\n this.patchStateWithoutFetch({ sorting: new SortState() });\r\n this.patchStateWithoutFetch({ grouping: new GroupingState() });\r\n this.patchStateWithoutFetch({ searchTerm: '' });\r\n this.patchStateWithoutFetch({ datesFilter: [] });\r\n this.patchStateWithoutFetch({\r\n paginator: new PaginatorState()\r\n });\r\n this._isFirstLoading$.next(true);\r\n this._isLoading$.next(true);\r\n this._tableState$.next(DEFAULT_STATE);\r\n this._errorMessage.next('');\r\n }\r\n\r\n // Base Methods\r\n public patchState(patch: Partial) {\r\n this.patchStateWithoutFetch(patch);\r\n this.fetch();\r\n }\r\n\r\n public patchStateWithoutFetch(patch: Partial) {\r\n const newState = Object.assign(this._tableState$.value, patch);\r\n this._tableState$.next(newState);\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { TableService } from './table.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TableExtendedService extends TableService {\r\n constructor(@Inject(HttpClient) http) {\r\n super(http);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PaginatorComponent } from './components/paginator/paginator.component';\r\nimport { NgPagination } from './components/paginator/ng-pagination/ng-pagination.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { SortIconComponent } from './components/sort-icon/sort-icon.component';\r\nimport { InlineSVGModule } from 'ng-inline-svg-2';\r\n@NgModule({\r\n declarations: [PaginatorComponent, NgPagination, SortIconComponent],\r\n imports: [CommonModule, FormsModule, InlineSVGModule ],\r\n exports: [PaginatorComponent, NgPagination, SortIconComponent],\r\n})\r\nexport class CRUDTableModule { }\r\n","export const PageSizes = [3, 5, 10, 15, 50, 100];\r\n\r\nexport interface IPaginatorState {\r\n page: number;\r\n pageSize: number;\r\n total: number;\r\n recalculatePaginator(total: number): IPaginatorState;\r\n}\r\n\r\nexport class PaginatorState implements IPaginatorState {\r\n page = 1;\r\n pageSize = PageSizes[2];\r\n total = 0;\r\n pageSizes: number[] = [];\r\n\r\n recalculatePaginator(total: number): PaginatorState {\r\n this.total = total;\r\n return this;\r\n }\r\n\r\n resetPageSize(){\r\n this.pageSize = PageSizes[2];\r\n }\r\n}\r\n\r\nexport interface IPaginatorView {\r\n paginator: PaginatorState;\r\n ngOnInit(): void;\r\n paginate(paginator: PaginatorState): void;\r\n}\r\n","export interface ITime {\r\n dayUnits : number,\r\n hourUnits : number,\r\n minuteUnits: number,\r\n startTime?: Date,\r\n endTime?: Date\r\n}\r\n\r\nexport class Time implements ITime {\r\n constructor(\r\n public dayUnits : number = 0,\r\n public hourUnits : number = 0,\r\n public minuteUnits : number = 0,\r\n public startTime?: Date,\r\n public endTime?: Date\r\n ) {}\r\n}","import { DateFormatConstants } from \"src/app/_mx/constants/DateFormatConstants\";\r\nimport { LocaleConstants } from \"src/app/_mx/constants/LocaleConstants\";\r\n\r\nexport class DateHelperService {\r\n\r\n constructor() { }\r\n\r\n public getDaysForDateRange(startDate: Date, endDate: Date): Array {\r\n let days = new Array();\r\n\r\n let current = startDate;\r\n while (current < endDate) {\r\n days.push(current);\r\n current = new Date(current.getFullYear(), current.getMonth(), current.getDate() + 1);\r\n }\r\n days.push(current);\r\n\r\n return days;\r\n }\r\n\r\n public getOrdinalIndicator(day: Date): string {\r\n const dayNumber = day.getDate();\r\n\r\n if (dayNumber === 1 || dayNumber === 21 || dayNumber === 31)\r\n return 'st';\r\n if (dayNumber === 2 || dayNumber === 22)\r\n return 'nd';\r\n if (dayNumber === 3 || dayNumber === 23)\r\n return 'rd';\r\n\r\n return 'th';\r\n }\r\n\r\n public getDatePipeFromLocale(): string {\r\n switch (navigator.language) {\r\n case LocaleConstants.enGB:\r\n case LocaleConstants.en: {\r\n return DateFormatConstants.en\r\n }\r\n case LocaleConstants.enUS: {\r\n return DateFormatConstants.enUS\r\n }\r\n default: {\r\n return DateFormatConstants.default\r\n }\r\n }\r\n }\r\n}\r\n","export const LocaleConstants = {\r\n en: 'en',\r\n enGB: 'en-GB',\r\n enUS: 'en-US'\r\n};","export const DateFormatConstants = {\r\n en: 'dd/MM/yyyy',\r\n enUS: 'MM/dd/yyyy',\r\n default: 'yyyy-MM-dd'\r\n};","export enum TimesheetFrequencyType {\r\n Weekly = 975310000,\r\n Monthly = 975310001,\r\n MultiWeek = 975310002\r\n}","import { Time } from \"@angular/common\";\r\nimport { BaseModel } from \"src/app/_metronic/shared/crud-table/models/base.model\";\r\nimport { ITime } from \"../time.model\";\r\nimport { ITimesheetRate } from \"./timesheet-rates.model\";\r\n\r\nexport interface ITimesheetDay extends BaseModel {\r\n id: any,\r\n mondayUnits : ITime,\r\n tuesdayUnits : ITime,\r\n wednesdayUnits : ITime,\r\n thursdayUnits : ITime,\r\n fridayUnits : ITime,\r\n saturdayUnits : ITime,\r\n sundayUnits : ITime,\r\n startDate : Date,\r\n endDate : Date,\r\n rate : ITimesheetRate,\r\n}\r\n\r\nexport class TimesheetDay implements ITimesheetDay {\r\n constructor(\r\n public id : any = '',\r\n public mondayUnits : ITime = undefined,\r\n public tuesdayUnits : ITime = undefined,\r\n public wednesdayUnits : ITime = undefined,\r\n public thursdayUnits : ITime = undefined,\r\n public fridayUnits : ITime = undefined,\r\n public saturdayUnits : ITime = undefined,\r\n public sundayUnits : ITime = undefined,\r\n public startDate : Date = new Date(),\r\n public endDate : Date = new Date(),\r\n public rate : ITimesheetRate = undefined,\r\n ) {}\r\n}","import { BaseModel } from \"src/app/_metronic/shared/crud-table/models/base.model\";\r\n\r\nexport interface ITimesheetRate extends BaseModel {\r\n name : string,\r\n rateType : string,\r\n}\r\n\r\nexport class TimesheetRate implements ITimesheetRate {\r\n constructor(\r\n public id : any = '',\r\n public name : string = '',\r\n public rateType : string = '',\r\n ) {}\r\n}","import { AbstractControl } from '@angular/forms';\r\nimport { TimesheetFrequencyType } from 'src/app/_mx/enums/timesheet-frequency-type.enum';\r\nimport { NonWorkingDays } from 'src/app/_mx/models/calendar-ribbon/non-working-days.model';\r\nimport { ITime, Time } from 'src/app/_mx/models/time.model';\r\nimport { ITimesheetDay, TimesheetDay } from 'src/app/_mx/models/timesheet/timesheet-day.model';\r\nimport { ITimesheetDetail, TimesheetDetail } from 'src/app/_mx/models/timesheet/timesheet-detail.model';\r\nimport { TimesheetRate } from 'src/app/_mx/models/timesheet/timesheet-rates.model';\r\nimport { TimesheetView } from 'src/app/_mx/models/timesheet/timesheet-view.model';\r\nimport { ITimesheet } from 'src/app/_mx/models/timesheet/timesheet.model';\r\nimport { DateRange } from 'src/app/_mx/models/date-range.model';\r\n\r\nexport class TimesheetHelperService {\r\n\r\n private readonly daysOfWeek: string[] = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thur\", \"Fri\", \"Sat\"]; \r\n\r\n constructor() { }\r\n\r\n public getTimesheetFrequencyText(timesheetDetail: ITimesheetDetail): string {\r\n if (!timesheetDetail.frequency) //TODO: update Spec Tests\r\n return \"\";\r\n\r\n const frequencyType = timesheetDetail.frequency.frequencyType;\r\n switch(frequencyType) {\r\n case TimesheetFrequencyType.Weekly:\r\n return \"Week\";\r\n case TimesheetFrequencyType.Monthly:\r\n return \"Month\";\r\n case TimesheetFrequencyType.MultiWeek:\r\n return \"Weeks\";\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n public getDayUnits(rate: ITimesheetDay, day: Date): ITime {\r\n const dayOfWeek = day.getDay();\r\n\r\n switch(dayOfWeek)\r\n {\r\n case 0:\r\n return rate.sundayUnits;\r\n case 1:\r\n return rate.mondayUnits;\r\n case 2:\r\n return rate.tuesdayUnits;\r\n case 3:\r\n return rate.wednesdayUnits;\r\n case 4:\r\n return rate.thursdayUnits;\r\n case 5:\r\n return rate.fridayUnits;\r\n case 6:\r\n return rate.saturdayUnits;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n public calculateNonWorkingDay(nonWorkingDays: NonWorkingDays, day: Date): boolean {\r\n const dayOfWeek = day.getDay();\r\n\r\n switch(dayOfWeek)\r\n {\r\n case 0:\r\n return nonWorkingDays.sunday;\r\n case 1:\r\n return nonWorkingDays.monday;\r\n case 2:\r\n return nonWorkingDays.tuesday;\r\n case 3:\r\n return nonWorkingDays.wednesday;\r\n case 4:\r\n return nonWorkingDays.thursday;\r\n case 5:\r\n return nonWorkingDays.friday;\r\n case 6:\r\n return nonWorkingDays.saturday;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n public isFinishedStatus(timesheet: ITimesheet): boolean {\r\n return timesheet.status === 'Submitted' || \r\n timesheet.status === 'Approved' || \r\n timesheet.status === 'Validated' ||\r\n timesheet.status === 'Complete';\r\n }\r\n\r\n public getDays(timesheetDetail: TimesheetDetail) : string[] {\r\n let startDay = 1;\r\n let days: string[] = [];\r\n if (timesheetDetail.frequency != null)\r\n startDay = timesheetDetail.frequency.startDay;\r\n\r\n for (let i = 1; i < 8; i++) {\r\n days.push(this.daysOfWeek[startDay]);\r\n startDay = startDay == 6 ? 0 : startDay+1;\r\n }\r\n\r\n return days;\r\n }\r\n \r\n public calculateTotalTimeUnits(timesheetView: TimesheetView): Time {\r\n let totalMins = 0;\r\n\r\n if (timesheetView.day1StartTime && timesheetView.day1EndTime)\r\n totalMins += this.timeDiff(timesheetView.day1StartTime, timesheetView.day1EndTime);\r\n if (timesheetView.day2StartTime && timesheetView.day2EndTime)\r\n totalMins += this.timeDiff(timesheetView.day2StartTime, timesheetView.day2EndTime);\r\n if (timesheetView.day3StartTime && timesheetView.day3EndTime)\r\n totalMins += this.timeDiff(timesheetView.day3StartTime, timesheetView.day3EndTime);\r\n if (timesheetView.day4StartTime && timesheetView.day4EndTime)\r\n totalMins += this.timeDiff(timesheetView.day4StartTime, timesheetView.day4EndTime);\r\n if (timesheetView.day5StartTime && timesheetView.day5EndTime)\r\n totalMins += this.timeDiff(timesheetView.day5StartTime, timesheetView.day5EndTime);\r\n if (timesheetView.day6StartTime && timesheetView.day6EndTime)\r\n totalMins += this.timeDiff(timesheetView.day6StartTime, timesheetView.day6EndTime);\r\n if (timesheetView.day7StartTime && timesheetView.day7EndTime)\r\n totalMins += this.timeDiff(timesheetView.day7StartTime, timesheetView.day7EndTime);\r\n\r\n const hours = Math.floor(totalMins / 60);\r\n const mins = totalMins - (hours * 60);\r\n \r\n return new Time(null, hours, mins);\r\n }\r\n\r\n public mapTimesheetViewsToTimesheetDays(timesheetViews: Array, timesheetDetail: TimesheetDetail): Array {\r\n let timesheetDays: ITimesheetDay[] = [];\r\n\r\n timesheetViews.forEach(timesheetView => {\r\n const timesheetDetailDay = timesheetDetail.days.find(x => x.rate.id == timesheetView.rateId &&\r\n x.rate.rateType == timesheetView.rateType &&\r\n new Date(x.startDate).toDateString() == new Date(timesheetView.start).toDateString() &&\r\n new Date(x.endDate).toDateString() == new Date(timesheetView.end).toDateString());\r\n if (timesheetDetailDay) {\r\n const timesheetDay = new TimesheetDay(\r\n timesheetDetailDay.id,\r\n this.getMappedUnits('Mon', timesheetView, timesheetDetail),\r\n this.getMappedUnits('Tue', timesheetView, timesheetDetail),\r\n this.getMappedUnits('Wed', timesheetView, timesheetDetail),\r\n this.getMappedUnits('Thur', timesheetView, timesheetDetail),\r\n this.getMappedUnits('Fri', timesheetView, timesheetDetail),\r\n this.getMappedUnits('Sat', timesheetView, timesheetDetail),\r\n this.getMappedUnits('Sun', timesheetView, timesheetDetail),\r\n timesheetDetailDay.startDate,\r\n timesheetDetailDay.endDate,\r\n new TimesheetRate(timesheetDetailDay.rate.id, timesheetDetailDay.rate.name, timesheetDetailDay.rate.rateType),\r\n )\r\n \r\n timesheetDays.push(timesheetDay);\r\n }\r\n });\r\n\r\n return timesheetDays;\r\n }\r\n\r\n public dayFormsToUpdate(dayForms: Array, timesheetWeeks: Array, timesheetDetail: ITimesheetDetail): Array {\r\n let timesheetDays: Array = new Array();\r\n \r\n dayForms.forEach(dayForm => {\r\n const day = dayForm.value;\r\n const week = timesheetWeeks.find(x => x.start <= day.date && x.end >= day.date);\r\n\r\n day.rates.forEach(rate => {\r\n let timesheetDay = timesheetDays.find(x =>\r\n x.startDate.getTime() === week.start.getTime() && \r\n x.endDate.getTime() === week.end.getTime() && \r\n x.rate.id == rate.rateId\r\n );\r\n \r\n if (!timesheetDay) {\r\n timesheetDay = timesheetDetail.days.find(x =>\r\n x.startDate.getTime() === week.start.getTime() &&\r\n x.endDate.getTime() === week.end.getTime() &&\r\n x.rate.id == rate.rateId\r\n );\r\n timesheetDays.push(timesheetDay);\r\n }\r\n \r\n let dayUnit = this.getDayUnits(timesheetDay, day.date);\r\n\r\n if (timesheetDay.rate.rateType == 'Daily') {\r\n dayUnit.dayUnits = rate.dayUnits;\r\n }\r\n else {\r\n dayUnit.hourUnits = rate.hourUnits;\r\n dayUnit.minuteUnits = rate.minuteUnits;\r\n }\r\n });\r\n\r\n let timesheetDay = timesheetDetail.days.filter(x =>\r\n new Date(x.startDate).toDateString() == week.start.toDateString() &&\r\n new Date(x.endDate).toDateString() == week.end.toDateString())[0];\r\n\r\n let dayUnit = this.getDayUnits(timesheetDay, day.date);\r\n \r\n dayUnit.startTime = day.startTime;\r\n dayUnit.endTime = day.endTime;\r\n });\r\n\r\n return timesheetDays;\r\n }\r\n\r\n public formatTimesheetDates(timesheets: ITimesheetDay[]): ITimesheetDay[] {\r\n var formatedTimesheets: ITimesheetDay[] = [];\r\n timesheets.forEach(timesheet => {\r\n formatedTimesheets.push(new TimesheetDay(\r\n timesheet.id,\r\n timesheet.mondayUnits,\r\n timesheet.tuesdayUnits,\r\n timesheet.wednesdayUnits,\r\n timesheet.thursdayUnits,\r\n timesheet.fridayUnits,\r\n timesheet.saturdayUnits,\r\n timesheet.sundayUnits,\r\n this.setMinutesWithOffset(timesheet.startDate),\r\n this.setMinutesWithOffset(timesheet.endDate),\r\n timesheet.rate\r\n ));\r\n });\r\n \r\n return formatedTimesheets;\r\n }\r\n\r\n private setMinutesWithOffset(date: Date) {\r\n var offsetDate = new Date(date.getTime());\r\n offsetDate.setMinutes(offsetDate.getMinutes() - (offsetDate.getTimezoneOffset()));\r\n return offsetDate;\r\n }\r\n\r\n private getMappedUnits(day: string, timesheetView: TimesheetView, timesheetDetail: TimesheetDetail) : Time {\r\n const dayOfWeek = this.getDays(timesheetDetail).findIndex(d => d == day);\r\n \r\n let startTime: Date = null;\r\n if (timesheetView[`day${dayOfWeek + 1}StartTime`]) {\r\n startTime = this.getMappedTimeValue(timesheetView, `day${dayOfWeek + 1}StartTime`);\r\n }\r\n \r\n let endTime: Date = null;\r\n if (timesheetView[`day${dayOfWeek + 1}EndTime`]) {\r\n endTime = this.getMappedTimeValue(timesheetView, `day${dayOfWeek + 1}EndTime`);\r\n }\r\n\r\n return new Time(\r\n timesheetView[`day${dayOfWeek + 1}DayUnits`],\r\n timesheetView[`day${dayOfWeek + 1}HourUnits`],\r\n timesheetView[`day${dayOfWeek + 1}MinuteUnits`],\r\n startTime,\r\n endTime\r\n );\r\n }\r\n\r\n public getMappedTimeValue(timesheetView: TimesheetView, timeField: string): Date {\r\n const timeParts = this.splitTime((timesheetView[timeField] as string));\r\n const date = new Date(0);\r\n date.setUTCHours(timeParts[0], timeParts[1]);\r\n return date;\r\n }\r\n\r\n private splitTime(time: string): number[] {\r\n const timeParts = time.split(':');\r\n const hours = Number.parseInt(timeParts[0]);\r\n const mins = Number.parseInt(timeParts[1]);\r\n return [\r\n hours,\r\n mins\r\n ]\r\n }\r\n\r\n private timeDiff(start: string, end: string): number {\r\n const startParts = this.splitTime(start);\r\n const endParts = this.splitTime(end);\r\n\r\n return ((endParts[0] * 60) + endParts[1]) - ((startParts[0] * 60) + startParts[1]);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ScreenService {\r\n public height: number;\r\n public width: number;\r\n public isMobile: boolean = false;\r\n\r\n private readonly mobileSizeThreshold: number = 576;\r\n\r\n constructor() {\r\n this.resize();\r\n }\r\n\r\n public resize(): void {\r\n this.width = window.innerWidth;\r\n this.height = window.innerHeight;\r\n\r\n this.isMobile = (this.width <= this.mobileSizeThreshold);\r\n\r\n //Set Custom css variable to height of current window height\r\n const windowHeight = window.innerHeight;\r\n document.documentElement.style.setProperty(\r\n \"--windowHeight\",\r\n windowHeight + \"px\"\r\n );\r\n\r\n }\r\n}\r\n","export class StorageKeyConstants {\r\n public static readonly SelectedLanguage = 'SelectedLanguage';\r\n public static readonly SelectedTheme = 'SelectedTheme';\r\n}\r\n","export class AuthRequestModel {\r\n username: string;\r\n password: string;\r\n scope: string;\r\n}\r\n\r\nexport class AuthModel {\r\n id: string;\r\n token: string;\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { map } from \"rxjs/operators\";\r\nimport { AppConfigService } from 'src/app/_primeng/services/appconfig.service';\r\nimport { AuthModel, AuthRequestModel } from '../../models/auth.model';\r\nimport { ResetPasswordModel } from '../../models/reset-password.model';\r\nimport { AESService } from 'src/app/_primeng/services/encryption/aes-service';\r\nimport { Theme } from 'src/app/_primeng/models/theme/theme.model';\r\nimport { IUserModel } from '../../models/user.model';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthHTTPService {\r\n constructor(private http: HttpClient,\r\n private appConfig: AppConfigService) {\r\n }\r\n\r\n // * === === === === === === === === === === === === === ===\r\n // * PUBLIC METHODS\r\n // * === === === === === === === === === === === === === ===\r\n\r\n public login(email: string, password: string): Observable {\r\n const body = new AuthRequestModel();\r\n body.password = AESService.encrypt(password);\r\n body.username = email;\r\n body.scope = \"candidate_portal\";\r\n\r\n const options = { headers: new HttpHeaders().set('Content-Type', 'application/json') };\r\n\r\n return this.http.post(`${this.appConfig.getConfig().apiUrl}/auth/token`, body, options);\r\n }\r\n\r\n public resetPassword(access_token: string, resetPassword: ResetPasswordModel): Observable {\r\n return this.httpPost(`/auth/resetpassword`, resetPassword, access_token).pipe(\r\n map((success: boolean) => {\r\n return success;\r\n })\r\n );\r\n }\r\n\r\n public forgotPassword(email: string): Observable {\r\n const body = { email: email };\r\n return this.httpPost(`/auth/forgotpassword`, body).pipe(\r\n map((success: boolean) => {\r\n return success;\r\n })\r\n );\r\n }\r\n\r\n public getTheme(hash: string): Observable {\r\n let params = '';\r\n if (hash)\r\n params = `?hash=${hash}`\r\n\r\n return this.httpGet(`/theme${params}`).pipe(\r\n map((theme: Theme) => {\r\n return theme;\r\n })\r\n );\r\n }\r\n\r\n public getUserByToken(token): Observable {\r\n const httpHeaders = new HttpHeaders({\r\n Authorization: `Bearer ${token}`,\r\n });\r\n return this.http.get(`${this.appConfig.getConfig().apiUrl}/auth/user`, {\r\n headers: httpHeaders,\r\n }).pipe(\r\n map((response: IUserModel) => {\r\n return response;\r\n })\r\n );\r\n }\r\n\r\n public httpGet(url: string, token: string = null, responseType: any = 'json') {\r\n\r\n if (token != null) {\r\n const httpHeaders = new HttpHeaders({\r\n Authorization: `Bearer ${token}`,\r\n });\r\n return this.http.get(this.appConfig.getConfig().apiUrl + url, { headers: httpHeaders, responseType: responseType });\r\n }\r\n else\r\n return this.http.get(this.appConfig.getConfig().apiUrl + url);\r\n }\r\n\r\n public httpPost(url: string, body: any, token: string = null) {\r\n\r\n if (token != null) {\r\n const httpHeaders = new HttpHeaders({\r\n Authorization: `Bearer ${token}`,\r\n });\r\n return this.http.post(this.appConfig.getConfig().apiUrl + url, body, { headers: httpHeaders });\r\n }\r\n else\r\n return this.http.post(this.appConfig.getConfig().apiUrl + url, body);\r\n }\r\n\r\n public httpPut(url: string, body: any, token: string, returnHttpResponse: boolean = false) {\r\n const httpHeaders = new HttpHeaders({\r\n Authorization: `Bearer ${token}`\r\n });\r\n\r\n if (returnHttpResponse)\r\n return this.http.put(this.appConfig.getConfig().apiUrl + url, body, { headers: httpHeaders, observe: 'response' });\r\n else\r\n return this.http.put(this.appConfig.getConfig().apiUrl + url, body, { headers: httpHeaders });\r\n }\r\n\r\n public httpDelete(url: string, token: string) {\r\n if (token != null) {\r\n const httpHeaders = new HttpHeaders({\r\n Authorization: `Bearer ${token}`,\r\n });\r\n return this.http.delete(this.appConfig.getConfig().apiUrl + url, { headers: httpHeaders });\r\n }\r\n else\r\n return this.http.delete(this.appConfig.getConfig().apiUrl + url);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, BehaviorSubject, of } from 'rxjs';\r\nimport { map, catchError, switchMap, finalize } from 'rxjs/operators';\r\nimport { environment } from 'src/environments/environment';\r\nimport { Router } from '@angular/router';\r\nimport { UserModel } from '../../models/user.model';\r\nimport { DataAccess } from '../../models/dataaccess.model';\r\nimport { AuthModel } from '../../models/auth.model';\r\nimport { ResetPasswordModel } from '../../models/reset-password.model';\r\nimport { Theme } from 'src/app/_primeng/models/theme/theme.model';\r\nimport { AuthHTTPService } from './auth-http.service';\r\nimport { StorageKeyConstants } from 'src/app/_primeng/constants/storage-key.constants';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthService {\r\n private authSessionStorageToken = `${environment.appVersion}-${environment.USERDATA_KEY}`;\r\n private readonly DataAccessStorageKey = 'DataAccess';\r\n\r\n public isLoading$: Observable;\r\n public currentUserSubject: BehaviorSubject;\r\n public isLoadingSubject: BehaviorSubject;\r\n public isResetPassword: boolean;\r\n public timesheetsEnabled: boolean;\r\n public userName: string;\r\n public selectedTheme: BehaviorSubject = new BehaviorSubject(\"lara-light-blue\");\r\n\r\n constructor(\r\n private authHttpService: AuthHTTPService,\r\n private router: Router,\r\n ) {\r\n this.isLoadingSubject = new BehaviorSubject(false);\r\n this.currentUserSubject = new BehaviorSubject(undefined);\r\n this.isLoading$ = this.isLoadingSubject.asObservable();\r\n }\r\n\r\n // * === === === === === === === === === === === === === ===\r\n // * PRIVATE METHODS\r\n // * === === === === === === === === === === === === === ===\r\n\r\n private setAuthFromSessionStorage(auth: AuthModel): boolean {\r\n // store auth accessToken/refreshToken/epiresIn in session storage to keep user logged in between page refreshes\r\n if (auth && auth.token) {\r\n sessionStorage.setItem(this.authSessionStorageToken, JSON.stringify(auth));\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private getAuthFromSessionStorage(): AuthModel {\r\n try {\r\n const authData = JSON.parse(\r\n sessionStorage.getItem(this.authSessionStorageToken)\r\n );\r\n\r\n if (\r\n !authData?.token &&\r\n this.router.url !== \"/auth/login\" &&\r\n this.router.url !== \"/\"\r\n )\r\n setTimeout(() => {\r\n this.router.navigate([\"/auth/login\"]).then(() => {\r\n window.location.reload();\r\n });\r\n }, 500);\r\n\r\n return authData;\r\n } catch (error) {\r\n console.error(error);\r\n return undefined;\r\n }\r\n }\r\n\r\n // * === === === === === === === === === === === === === ===\r\n // * PUBLIC METHODS\r\n // * === === === === === === === === === === === === === ===\r\n\r\n public getDataAccess(): Observable {\r\n const auth = this.getAuthFromSessionStorage();\r\n if (!auth || !auth.token) {\r\n return of(undefined);\r\n }\r\n\r\n this.isLoadingSubject.next(true);\r\n return this.authHttpService.httpGet(\"/auth/dataAccess\", auth.token).pipe(\r\n map((dataAccess: DataAccess) => {\r\n sessionStorage.setItem(this.DataAccessStorageKey, JSON.stringify(dataAccess));\r\n return true;\r\n }),\r\n finalize(() => this.isLoadingSubject.next(false))\r\n );\r\n }\r\n\r\n public get dataAccessValue(): DataAccess {\r\n return JSON.parse(sessionStorage.getItem(this.DataAccessStorageKey));\r\n }\r\n\r\n public get currentUserValue(): UserModel {\r\n return this.currentUserSubject.value;\r\n }\r\n\r\n public set currentUserValue(user: UserModel) {\r\n this.currentUserSubject.next(user);\r\n }\r\n\r\n public login(email: string, password: string): Observable {\r\n this.isLoadingSubject.next(true);\r\n return this.authHttpService.login(email, password).pipe(\r\n map((auth: AuthModel) => {\r\n const result = this.setAuthFromSessionStorage(auth);\r\n return result;\r\n }),\r\n switchMap(() => this.getUserByToken()),\r\n switchMap(() => this.getDataAccess()),\r\n catchError((err) => {\r\n console.error('err', err);\r\n return of(undefined);\r\n }),\r\n finalize(() => this.isLoadingSubject.next(false))\r\n );\r\n }\r\n\r\n public logout(): void {\r\n sessionStorage.removeItem(this.authSessionStorageToken);\r\n sessionStorage.removeItem(this.DataAccessStorageKey);\r\n this.router.navigate(['/auth/login'], {\r\n queryParams: {},\r\n });\r\n }\r\n\r\n public resetPassword(resetPassword: ResetPasswordModel): Observable {\r\n this.isLoadingSubject.next(true);\r\n const auth = this.getAuthFromSessionStorage();\r\n if (!auth || !auth.token) {\r\n return of(undefined);\r\n }\r\n return this.authHttpService\r\n .resetPassword(auth.token, resetPassword)\r\n .pipe(finalize(() => this.isLoadingSubject.next(false)));\r\n }\r\n\r\n public forgotPassword(email: string): Observable {\r\n this.isLoadingSubject.next(true);\r\n return this.authHttpService\r\n .forgotPassword(email)\r\n .pipe(finalize(() => this.isLoadingSubject.next(false)));\r\n }\r\n\r\n public httpGet(url: string, responseType: any = 'json') {\r\n const auth = this.getAuthFromSessionStorage();\r\n if (!auth || !auth.token) {\r\n return of(undefined);\r\n }\r\n return this.authHttpService.httpGet(url, auth.token, responseType);\r\n }\r\n\r\n \r\n\r\n public getTheme(hash: string): Observable {\r\n return this.authHttpService.getTheme(hash);\r\n }\r\n\r\n public httpPost(url: string, body: any) {\r\n const auth = this.getAuthFromSessionStorage();\r\n if (!auth || !auth.token) {\r\n return of(undefined);\r\n }\r\n return this.authHttpService.httpPost(url, body, auth.token);\r\n }\r\n\r\n public httpPut(url: string, body: any, returnHttpResponse: boolean = false) {\r\n const auth = this.getAuthFromSessionStorage();\r\n if (!auth || !auth.token) {\r\n return of(undefined);\r\n }\r\n return this.authHttpService.httpPut(url, body, auth.token, returnHttpResponse);\r\n }\r\n\r\n public httpDelete(url: string) {\r\n const auth = this.getAuthFromSessionStorage();\r\n if (!auth || !auth.token) {\r\n return of(undefined);\r\n }\r\n return this.authHttpService.httpDelete(url, auth.token);\r\n }\r\n\r\n public getUserByToken(): Observable {\r\n const auth = this.getAuthFromSessionStorage();\r\n if (!auth || !auth.token) {\r\n return of(undefined);\r\n }\r\n\r\n this.isLoadingSubject.next(true);\r\n return this.authHttpService.getUserByToken(auth.token).pipe(\r\n map((user: UserModel) => {\r\n if (user) {\r\n if (user.needsPasswordReset) {\r\n this.isResetPassword = true;\r\n this.userName = user.username;\r\n this.router.navigate(['/auth/reset-password']);\r\n }\r\n else {\r\n this.currentUserSubject = new BehaviorSubject(user);\r\n }\r\n } else {\r\n this.logout();\r\n }\r\n return user;\r\n }),\r\n finalize(() => this.isLoadingSubject.next(false))\r\n );\r\n }\r\n\r\n public setSelectedTheme(theme: string): void {\r\n this.selectedTheme.next(theme);\r\n localStorage.setItem(StorageKeyConstants.SelectedTheme, theme);\r\n }\r\n\r\n}\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MercuryLoaderComponent } from \"src/app/_primeng/shared/mercury-loader/mercury-loader.component\";\r\nimport { FileUploaderComponent } from \"../../shared/file-uploader/file-uploader.component\";\r\nimport { PrimeNgModule } from \"src/app/modules/primeng/primeng.module\";\r\nimport { TranslationModule } from \"src/app/modules/i18n/translation.module\";\r\nimport { TabViewIdDirective } from \"src/app/tab-view-id.directive\";\r\n\r\n@NgModule({\r\n declarations: [MercuryLoaderComponent, FileUploaderComponent],\r\n imports: [CommonModule, PrimeNgModule, TranslationModule, TabViewIdDirective],\r\n exports: [MercuryLoaderComponent, FileUploaderComponent],\r\n})\r\nexport class SharedModule {}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { IAppConfig } from \"../models/appconfig.model\";\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AppConfigService {\r\n private appConfig: IAppConfig;\r\n\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n load() {\r\n return this.http.get('assets/_primeng/config/config.json')\r\n .toPromise()\r\n .then(response => {\r\n this.appConfig = response;\r\n sessionStorage.setItem(\"config\", JSON.stringify(this.appConfig));\r\n });\r\n }\r\n\r\n getConfig() {\r\n if (this.appConfig == null)\r\n this.appConfig = JSON.parse(sessionStorage.getItem(\"config\"));\r\n\r\n return this.appConfig;\r\n }\r\n}","export class Config {\r\n constructor(\r\n public apiUrl: string = ''\r\n ) {}\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Config } from '../../models/config/config.model';\r\n \r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ConfigService {\r\n public get config(): Config {\r\n return this._config;\r\n }\r\n\r\n private _config: Config = new Config();\r\n\r\n constructor(private readonly http: HttpClient) {}\r\n\r\n public load(): Promise {\r\n return new Promise((resolve) => {\r\n this.http\r\n .get('assets/_primeng/config/config.json')\r\n .subscribe((response) => {\r\n this._config = response;\r\n resolve();\r\n });\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport * as CryptoJS from 'crypto-js';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport abstract class AESService {\r\n\r\n public static encrypt(msg) {\r\n var keySize = 256;\r\n var salt = CryptoJS.lib.WordArray.random(16);\r\n var key = CryptoJS.PBKDF2(`${environment.USERDATA_KEY}`, salt, {\r\n keySize: keySize / 32,\r\n iterations: 100\r\n });\r\n\r\n var iv = CryptoJS.lib.WordArray.random(128 / 8);\r\n\r\n var encrypted = CryptoJS.AES.encrypt(msg, key, {\r\n iv: iv,\r\n padding: CryptoJS.pad.Pkcs7,\r\n mode: CryptoJS.mode.CBC\r\n });\r\n\r\n var result = CryptoJS.enc.Base64.stringify(salt.concat(iv).concat(encrypted.ciphertext));\r\n\r\n return result;\r\n }\r\n}","export class Theme {\r\n constructor(public header: any = {},\r\n public headerLogoImage: string = null,\r\n public subHeader: any = {},\r\n public background: any = {},\r\n public loginBackground: any = {},\r\n public loginButton: any = {},\r\n public loginLogoImage: string = null,\r\n public loginSideImage: string = null,\r\n public hash: string = '',\r\n public hasChanged: boolean = false) { }\r\n}","import { Inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, catchError, map, Observable, of } from 'rxjs';\r\nimport { Theme } from '../../models/theme/theme.model';\r\nimport { AuthService } from '../../modules/auth/services/auth/auth.service';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n\r\nconst THEME_LOCAL_STORAGE_KEY = `portal_theme`;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ThemeService {\r\n public themeChanged: BehaviorSubject = new BehaviorSubject(new Theme());\r\n public isLoadingChanged: BehaviorSubject = new BehaviorSubject(false);\r\n\r\n constructor(\r\n @Inject(DOCUMENT) private document: Document,\r\n private readonly authService: AuthService,\r\n private httpClient: HttpClient) { }\r\n\r\n // * === === === === === === === === === === === === === ===\r\n // * PRIVATE METHODS\r\n // * === === === === === === === === === === === === === ===\r\n\r\n private getThemeFromLocalStorage(): Theme {\r\n const json = localStorage.getItem(THEME_LOCAL_STORAGE_KEY);\r\n if (!json)\r\n return new Theme();\r\n\r\n let theme = JSON.parse(json);\r\n return theme;\r\n }\r\n\r\n // * === === === === === === === === === === === === === ===\r\n // * PUBLIC METHODS\r\n // * === === === === === === === === === === === === === ===\r\n\r\n public checkIfThemeExists(theme: string): Observable {\r\n let themeRoute = `${theme}.css`;\r\n return this.httpClient.get(themeRoute, { observe: 'response', responseType: 'blob' })\r\n .pipe(\r\n map(response => {\r\n return true;\r\n }),\r\n catchError(error => {\r\n return of(false);\r\n })\r\n );\r\n }\r\n\r\n public loadTheme(): void {\r\n this.isLoadingChanged.next(true);\r\n const theme = this.getThemeFromLocalStorage();\r\n\r\n this.themeChanged.next(theme);\r\n if (theme.hash)\r\n this.isLoadingChanged.next(false);\r\n\r\n this.authService.getTheme(theme.hash).subscribe((theme: Theme) => {\r\n const previousTheme = this.getThemeFromLocalStorage();\r\n\r\n if (!theme.hasChanged) {\r\n this.isLoadingChanged.next(false);\r\n return;\r\n }\r\n\r\n if (!previousTheme || theme.hash !== previousTheme.hash) {\r\n localStorage.setItem(THEME_LOCAL_STORAGE_KEY, JSON.stringify(theme));\r\n this.themeChanged.next(theme);\r\n }\r\n this.isLoadingChanged.next(false);\r\n },\r\n () => {\r\n this.isLoadingChanged.next(false);\r\n }\r\n );\r\n }\r\n\r\n public switchTheme(theme: string): void {\r\n let themeLink = this.document.getElementById('app-style') as HTMLLinkElement;\r\n\r\n if (themeLink) {\r\n this.checkIfThemeExists(theme).subscribe(result => {\r\n if (result) {\r\n themeLink.href = `${theme}.css`;\r\n this.authService.setSelectedTheme(theme);\r\n } else {\r\n this.authService.setSelectedTheme('lara-light-blue');\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\n@NgModule({\r\n imports: [CommonModule, TranslateModule],\r\n exports: [CommonModule, TranslateModule],\r\n})\r\nexport class TranslationModule {}\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\nimport { MessageService, PrimeNGConfig } from \"primeng/api\";\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { InputTextModule } from \"primeng/inputtext\";\r\nimport { ImageModule } from \"primeng/image\";\r\nimport { MessagesModule } from \"primeng/messages\";\r\nimport { ToastModule } from \"primeng/toast\";\r\nimport { TabMenuModule } from \"primeng/tabmenu\";\r\nimport { AvatarModule } from \"primeng/avatar\";\r\nimport { AvatarGroupModule } from \"primeng/avatargroup\";\r\nimport { TieredMenuModule } from \"primeng/tieredmenu\";\r\nimport { ProgressSpinnerModule } from \"primeng/progressspinner\";\r\nimport { DialogModule } from \"primeng/dialog\";\r\nimport { DynamicDialogModule } from \"primeng/dynamicdialog\";\r\nimport { PaginatorModule } from \"primeng/paginator\";\r\nimport { SidebarModule } from \"primeng/sidebar\";\r\nimport { PanelMenuModule } from \"primeng/panelmenu\";\r\nimport { InputSwitchModule } from \"primeng/inputswitch\";\r\nimport { CardModule } from \"primeng/card\";\r\nimport { DividerModule } from \"primeng/divider\";\r\nimport { ConfirmDialogModule } from \"primeng/confirmdialog\";\r\nimport { TableModule } from \"primeng/table\";\r\nimport { DropdownModule } from \"primeng/dropdown\";\r\nimport { TabViewModule } from \"primeng/tabview\";\r\nimport { InputIconModule } from \"primeng/inputicon\";\r\nimport { IconFieldModule } from \"primeng/iconfield\";\r\nimport { CalendarModule } from \"primeng/calendar\";\r\nimport { FileUploadModule } from \"primeng/fileupload\";\r\nimport { FloatLabelModule } from \"primeng/floatlabel\";\r\nimport { InputTextareaModule } from \"primeng/inputtextarea\";\r\nimport { CheckboxModule } from \"primeng/checkbox\";\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n ButtonModule,\r\n InputTextModule,\r\n ImageModule,\r\n MessagesModule,\r\n ProgressSpinnerModule,\r\n ToastModule,\r\n TabMenuModule,\r\n AvatarModule,\r\n AvatarGroupModule,\r\n TieredMenuModule,\r\n DialogModule,\r\n DynamicDialogModule,\r\n PaginatorModule,\r\n SidebarModule,\r\n PanelMenuModule,\r\n InputSwitchModule,\r\n CardModule,\r\n DividerModule,\r\n ConfirmDialogModule,\r\n FloatLabelModule,\r\n TabViewModule,\r\n CalendarModule,\r\n InputTextareaModule,\r\n CheckboxModule,\r\n TableModule,\r\n DropdownModule,\r\n InputIconModule,\r\n IconFieldModule,\r\n FileUploadModule,\r\n ButtonModule,\r\n ],\r\n exports: [\r\n CommonModule,\r\n ButtonModule,\r\n InputTextModule,\r\n ImageModule,\r\n MessagesModule,\r\n ProgressSpinnerModule,\r\n ToastModule,\r\n TabMenuModule,\r\n AvatarModule,\r\n AvatarGroupModule,\r\n TieredMenuModule,\r\n DialogModule,\r\n DynamicDialogModule,\r\n PaginatorModule,\r\n SidebarModule,\r\n PanelMenuModule,\r\n InputSwitchModule,\r\n CardModule,\r\n DividerModule,\r\n ConfirmDialogModule,\r\n FloatLabelModule,\r\n TabViewModule,\r\n CalendarModule,\r\n InputTextareaModule,\r\n TableModule,\r\n DropdownModule,\r\n InputIconModule,\r\n IconFieldModule,\r\n FileUploadModule,\r\n ButtonModule,\r\n CheckboxModule,\r\n ],\r\n providers: [PrimeNGConfig, MessageService],\r\n})\r\nexport class PrimeNgModule {}\r\n","export const environment = {\r\n production: true,\r\n appVersion: 'vmxclientportal2',\r\n USERDATA_KEY: 'JaNdRgUkXp2s5v8y',\r\n apiUrl: 'api'\r\n};\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { AuthGuard } from './_primeng/modules/auth/services/auth/auth.guard';\r\n\r\n\r\nexport const routes: Routes = [\r\n {\r\n path: 'auth',\r\n loadChildren: () =>\r\n import('./_primeng/modules/auth/auth.module').then((m) => m.AuthModule),\r\n },\r\n {\r\n path: 'error',\r\n loadChildren: () =>\r\n import('./modules/errors/errors.module').then((m) => m.ErrorsModule),\r\n },\r\n {\r\n path: '',\r\n canActivate: [AuthGuard],\r\n loadChildren: () =>\r\n import('./_primeng/modules/layout/layout.module').then((m) => m.LayoutModule),\r\n },\r\n { path: '**', redirectTo: 'error/404' },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes)],\r\n exports: [RouterModule],\r\n})\r\nexport class AppRoutingModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { AuthService } from './auth.service';\r\n\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AuthGuard {\r\n constructor(private authService: AuthService) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\r\n const currentUser = this.authService.currentUserValue;\r\n if (currentUser) {\r\n // logged in so return true\r\n return true;\r\n }\r\n\r\n // not logged in so redirect to login page with the return url\r\n this.authService.logout();\r\n return false;\r\n }\r\n}\r\n","// USA\r\nexport const locale = {\r\n lang: \"en\",\r\n data: {\r\n COMMON: {\r\n CANCEL: \"Cancel\",\r\n CLOSE: \"Close\",\r\n SUBMIT: \"Submit\",\r\n NO: \"No\",\r\n YES: \"Yes\",\r\n YES_CLOSE_AND_LOSE_CHANGES: \"Yes, close and lose changes\",\r\n DISCARD_AND_CLOSE: \"Discard and Close\",\r\n SAVE_AND_CLOSE: \"Save and Close\",\r\n SEARCH: \"Search...\",\r\n SHOWING_PAGE: \"Showing Page \",\r\n OF: \"of\",\r\n RESULTS_PER_PAGE: \"Results per page\",\r\n VALIDATION: {\r\n SOMETHING_WENT_WRONG:\r\n \"Oops looks like something went wrong! Please try again.\",\r\n SUCCESSFULLY_UPDATED: \"Successfully Updated\",\r\n ANY_CHANGES_MADE_WILL_BE_LOST: \"Any changes made will be lost.\",\r\n ARE_YOU_SURE_YOU_WANT_TO_PROCEED: \"Are you sure you want to proceed?\",\r\n FAILED_TO_RETRIEVE_DATA: \"Unable to retrieve data from server\",\r\n FAILED_TO_RETRIEVE_DATA_FOR_SELECTION:\r\n \"Unable to retrieve data for selection\",\r\n },\r\n },\r\n NAVBAR: {\r\n HELLO: \"Hello\",\r\n MY_DETAILS: \"My Details\",\r\n MY_CONTACT_METHODS: \"My Contact Methods\",\r\n MY_DATA_CONSENTS: \"My Data Consents\",\r\n MY_DOCUMENTS: \"My Documents\",\r\n LOGOUT: \"Logout\",\r\n SELECT_LANGUAGE: \"Select Language\",\r\n MENU: \"Menu\",\r\n CLOSE: \"Close\",\r\n SETTINGS: \"Settings\",\r\n TERMSANDCONDITIONS: \"Terms & Conditions\",\r\n LANGUAGE: {\r\n ENLABEL: \"English\",\r\n CHLABEL: \"Chinese\",\r\n ESLABEL: \"Spanish\",\r\n JALABEL: \"Japanese\",\r\n DELABEL: \"German\",\r\n FRLABEL: \"French\",\r\n },\r\n MENU_ITEM: {\r\n CURRENT_PLACEMENT: \"My Current Placement\",\r\n COMPLIANCE: \"My Compliance\",\r\n TIMESHEETS: \"My Timesheets\",\r\n EXPENSES: \"My Expenses\",\r\n DOCUMENTS: \"My Documents\",\r\n },\r\n },\r\n AUTH: {\r\n LOGIN: {\r\n BUTTON: {\r\n SIGN_IN: \"Sign In\",\r\n },\r\n LABEL: {\r\n EMAIL: \"Email\",\r\n PASSWORD: \"Password\",\r\n FORGOT_PASSWORD: \"Forgot Password?\",\r\n },\r\n VALIDATION: {\r\n EMAIL_INVALID: \"Invalid Email address\",\r\n EMAIL_MAX_LENGTH: \"Email must not exceed {{value}} characters long\",\r\n EMAIL_REQUIRED: \"Email is required\",\r\n LOGIN_FAILED: \"The login details are incorrect\",\r\n PASSWORD_MAX_LENGTH:\r\n \"Password must not exceed {{value}} characters long\",\r\n PASSWORD_MIN_LENGTH:\r\n \"Password must be at least {{value}} characters long\",\r\n PASSWORD_REQUIRED: \"Password is required\",\r\n },\r\n },\r\n FORGOT_PASSWORD: {\r\n ENTER_YOUR_EMAIL_TO_RESET_YOUR_PASSWORD:\r\n \"Enter your email to reset your password\",\r\n FORGOTTEN_PASSWORD: \"Forgotten Password?\",\r\n BUTTON: {\r\n OK_GOT_IT: \"Ok, got it!\",\r\n },\r\n LABEL: {\r\n EMAIL: \"Email\",\r\n EMAIL_SENT_MESSAGE1:\r\n \"We've sent an email to the address you specified to reset your password.\",\r\n EMAIL_SENT_MESSAGE2:\r\n \"If you didn't receive it, please check your junk folder and also verify that the email address entered was correct.\",\r\n EMAIL_SENT_TITLE: \"Recovery Email Sent!\",\r\n SUCCESS: \"Your account has been successfully reset.\",\r\n },\r\n VALIDATION: {\r\n EMAIL_INVALID: \"Invalid Email address\",\r\n EMAIL_MAX_LENGTH: \"Email must not exceed {{value}} characters long\",\r\n EMAIL_REQUIRED: \"Email is required\",\r\n },\r\n },\r\n RESET_PASSWORD: {\r\n ENTER_NEW_PASSWORD_DETAILS: \"Enter new password details\",\r\n RESET_PASSWORD: \"Reset Password\",\r\n BUTTON: {},\r\n LABEL: {\r\n CONFIRM_NEW_PASSWORD: \"Confirm new password\",\r\n CREATE_NEW_PASSWORD: \"Create new password\",\r\n OLD_PASSWORD: \"Old Password\",\r\n PASSWORD: \"Password\",\r\n },\r\n VALIDATION: {\r\n PASSWORDS_DONT_MATCH:\r\n \"'Passsword' and 'Confirm Password' didn't match\",\r\n PASSWORD_MAX_LENGTH:\r\n \"Password must not exceed {{value}} characters long\",\r\n PASSWORD_MIN_LENGTH:\r\n \"Password must be at least {{value}} characters long\",\r\n PASSWORD_PATTERN:\r\n \"Must contain both uppercase & lowercase letters, a number and one of: -+_!@#$%^&*.,?\",\r\n PASSWORD_REQUIRED: \"Password is required\",\r\n REGISTRATION_DETAILS_INCORRECT:\r\n \"The registration details are incorrect\",\r\n },\r\n },\r\n },\r\n MY_CONTACT_METHODS: {\r\n MY_CONTACT_METHODS: \"My Contact Methods\",\r\n CONTACT_PREFERENCES: \"Contact Preferences\",\r\n PLEASE_SELECT_HOW_YOU_WISH_TO_BE_CONTACTED:\r\n \"Please select how you wish to be contacted.\",\r\n BUTTON: {},\r\n LABEL: {\r\n RECEIVE: \"Receive\",\r\n DO_NOT_RECEIVE: \"Do not receive\",\r\n SALES_EMAIL: \"Sales Email\",\r\n EMAIL: \"Email\",\r\n PHONE_CALL: \"Phone Call\",\r\n TEXT_MESSAGE: \"Text Message\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING: \"There was an error updating Contact Preferences\",\r\n },\r\n WARNING: {\r\n WARNING_MESSAGE: \"This will disable all emails, including those for timesheets and expenses.\"\r\n }\r\n },\r\n MY_DATA_CONSENTS: {\r\n MY_DATA_CONSENTS: \"My Data Consents\",\r\n PLEASE_SELECT_HOW_YOU_WISH_TO_MANAGE_YOUR_DATA_CONSENTS:\r\n \"Please select how you wish to manage your data consents.\",\r\n BUTTON: {},\r\n LABEL: {\r\n CONSENT: \"Consent\",\r\n WITHDRAW: \"Withdraw\",\r\n DATA_CONSENT_PURPOSE: \"Data Consent Purpose\",\r\n CONSENT_METHOD: \"Consent Method\",\r\n CONSENT_GIVEN: \"Consent Given\",\r\n CONSENT_EXPIRY: \"Consent Expiry\",\r\n WITHDRAW_CONSENT: \"Withdraw Consent\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING: \"There was an error updating My Data Consents\",\r\n },\r\n },\r\n MY_CURRENT_PLACEMENT: {\r\n MY_CURRENT_PLACEMENTS: \"My Current Placements\",\r\n BUTTON: {},\r\n LABEL: {\r\n NO_ACTIVE_PLACEMENTS: \"No active placements\",\r\n CLIENT: \"Client\",\r\n PLACEMENT_DETAILS: \"Placement Details\",\r\n DOCUMENTS: \"Documents\",\r\n JOB_TITLE: \"Job Title\",\r\n TYPE: \"Type\",\r\n START_DATE: \"Start Date\",\r\n END_DATE: \"End Date\",\r\n CANDIDATE_COMPANY: \"Candidate Company\",\r\n NOTICE_FROM_US: \"Notice from us\",\r\n NOTICE_FROM_YOU: \"Notice from you\",\r\n PAY: \"Pay\",\r\n CLIENT_ADDRESS: \"Client Address\",\r\n COMPLIANCE: \"Compliance\",\r\n STATUS: \"Status\",\r\n EVIDENCE: \"Evidence\",\r\n REASON_FOR_REJECTION: \"Reason for rejection\",\r\n VALID_FROM: \"Valid From\",\r\n VALID_TO: \"Valid To\",\r\n DESCRIPTION: \"Description\",\r\n LAST_UPDATED: \"Last Updated\",\r\n DOCUMENT: \"Document\",\r\n PLEASE_CLICK_TO_DOWNLOAD: \"Please click to download\",\r\n DOWNLOAD: \"Download\",\r\n NO_DOCUMENTS_FOUND: \"No documents found\",\r\n CHECKED_ON: \"Checked On\",\r\n CHECKED_BY: \"Checked By\",\r\n OUTSTANDING: \"Outstanding\",\r\n SUBMITTED: \"Submitted\",\r\n CHECKED: \"Checked\",\r\n REJECTED: \"Rejected\",\r\n },\r\n VALIDATION: {\r\n FROM_DATE_IS_REQUIRED: \"From date is required\",\r\n TO_DATE_IS_REQUIRED: \"To date is required\",\r\n TO_DATE_LESS_THAN_FROM_DATE: \"To date is less than From date\",\r\n FROM_DATE_GREATER_THAN_TO_DATE: \"From date is greater than To date\",\r\n ERROR_SAVING: \"There was an error saving Compliance\",\r\n TO_DATE_MUST_BE_IN_FUTURE:\r\n \"To date must be set to a date in the future\",\r\n },\r\n },\r\n FILEUPLOAD: {\r\n CHOOSEFILE: \"Choose File\",\r\n UPLOADFILE: \"Upload File\",\r\n REMOVEFILE: \"Remove File\",\r\n PENDINGUPLOAD: \"Pending Upload\",\r\n COMPLETEDUPLOAD: \"Completed Upload\",\r\n COMPLETED: \"Completed\",\r\n VALIDATION: {\r\n INVALID_FILE: \"Invalid File Selected\",\r\n FILE_IS_ZERO_SIZE:\r\n \"The file size cannot be zero. Please select a valid file and try again.\",\r\n MULTIPLE_FILES_ARE_ZERO_SIZE:\r\n \"The file sizes cannot be zero. The invalid files will be removed. Please ensure all selected files are valid and try again.\",\r\n },\r\n },\r\n MY_DETAILS: {\r\n MY_DETAILS: \"My Details\",\r\n TAB_TITLES: {\r\n CANDIDATE_INFORMATION: \"Candidate Information\",\r\n PREFERENCES: \"Preferences\",\r\n PROFILE: \"Profile\",\r\n },\r\n CANDIDATE_INFORMATION_TAB: {\r\n FIRST_NAME: \"First Name\",\r\n LAST_NAME: \"Last Name\",\r\n MOBILE_PHONE: \"Mobile Phone\",\r\n HOME_PHONE: \"Home Phone\",\r\n WORK_PHONE: \"Work Phone\",\r\n PERSONAL_EMAIL: \"Personal Email\",\r\n WORK_EMAIL: \"Work Email\",\r\n LINKEDIN: \"LinkedIn\",\r\n ADDRESSLINE1: \"Address Line 1\",\r\n CITY_TOWN: \"City/Town\",\r\n POSTCODE: \"Postcode\",\r\n COUNTRY: \"Country\",\r\n },\r\n PREFERENCES_TAB: {\r\n AVAILABILITY: \"Availability\",\r\n NOTICE_PERIOD: \"Notice Period\",\r\n CURRENCY: \"Currency\",\r\n CONTRACTOR: \"Contractor\",\r\n TEMP: \"Temp\",\r\n RATE_FROM: \"Rate From\",\r\n PAY_FREQUENCY: \"Pay Frequency\",\r\n RATE_TO: \"Rate To\",\r\n PERMANENT: \"Permanent\",\r\n SALARY_FROM: \"Salary From\",\r\n SALARY_TO: \"Salary To\",\r\n CHOOSE_INTERVAL: \"Choose Interval...\",\r\n SELECT_A_CURRENCY: \"Select a currency...\",\r\n PAY_FREQUENCY_PLACEHOLDER: \"Select a pay frequency...\",\r\n },\r\n PROFILE_TAB: {\r\n CANDIDATE_SUMMARY: \"Candidate Summary\",\r\n ROLES_SOUGHT: \"Role Sought\",\r\n CANDIDATE_SUMMARY_PLACEHOLDER: \"Please enter a candidate summary...\",\r\n ROLESSOUGHT_SUMMARY_PLACEHOLDER:\r\n \"Please enter a candidate role sought...\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING: \"There was an error updating your details\",\r\n FIRST_NAME_VALIDATION: \"First name is a required field\",\r\n LAST_NAME_VALIDATION: \"Last name is a required field\",\r\n PHONE_NUMBER_VALIDATION: \"Please enter a valid phone number\",\r\n PHONE_NUMBER_REQUIRED: \"Mobile phone is required\",\r\n EMAIL_VALIDATION: \"Please enter a valid email address\",\r\n EMAIL_REQUIRED: \"Personal Email is required\",\r\n FREQUENCY_REQUIRED: \"Frequency is required\",\r\n RATE_FROM_VALIDATION:\r\n \"Please ensure 'Rate to' is greater than or equal to 'Rate from'\",\r\n CANDIDATE_SUMMARY_VALIDATION: \"Maximum characters allowed is 5,000\",\r\n ROLE_SOUGHT_VALIDATION: \"Maximum characters allowed is 2,000\",\r\n SALARY_TO_VALIDATION:\r\n \"Please ensure 'Salary to' is greater than or equal to 'Salary from'\",\r\n SALARY_REQUIRED: \"Salary required\",\r\n PAY_FREQUENCY_REQUIRED: \"Pay frequency required\",\r\n SELECT_A_UNIT: \"Please select unit\",\r\n RATE_SET_REQUIRED: \"Required if rate set\",\r\n SALARY_SET_REQUIRED: \"Required if salary set\",\r\n NOTICE_PERIOD_VALIDATION: \"The notice period must not be less than 0\",\r\n },\r\n },\r\n DOCUSIGN: {\r\n DOCUSIGN_TITLE: \"DocuSign\",\r\n LABEL: {\r\n ENVELOPECOMPLETED: \"Completed\",\r\n DOCUMENTSSENT: \"Sent\",\r\n ENVELOPEDELIVERED: \"Delivered\",\r\n DOCUMENTSPACKREQUESTED: \"Requested\",\r\n STATUS: \"Status\",\r\n ENVELOPEID: \"Envelope ID\",\r\n PLACEMENT: \"Placement\",\r\n CREATED_DATE: \"Created Date\",\r\n NAME: \"Name\",\r\n TYPE: \"Type\",\r\n DOCUMENTID: \"DocumentId\",\r\n SIGN_DOCUMENTS: \"Sign Documents\",\r\n EMBEDDED_URL_CREATED: \"Embedded URL Created\",\r\n VIEW_PDF: \"View PDF\",\r\n },\r\n },\r\n },\r\n};\r\n","// China\r\nexport const locale = {\r\n lang: \"ch\",\r\n data: {\r\n COMMON: {\r\n CANCEL: \"取消\",\r\n CLOSE: \"关闭\",\r\n SUBMIT: \"提交\",\r\n NO: \"否\",\r\n YES: \"是\",\r\n YES_CLOSE_AND_LOSE_CHANGES: \"是,关闭并丢失更改\",\r\n DISCARD_AND_CLOSE: \"舍弃并关闭\",\r\n SAVE_AND_CLOSE: \"保存并关闭\",\r\n SEARCH: \"搜索...\",\r\n SHOWING_PAGE: \"显示页面\",\r\n OF: \"的\",\r\n RESULTS_PER_PAGE: \"每页结果\",\r\n VALIDATION: {\r\n SOMETHING_WENT_WRONG: \"哎呀,好像出了点问题!请再试一次。\",\r\n SUCCESSFULLY_UPDATED: \"更新成功\",\r\n ANY_CHANGES_MADE_WILL_BE_LOST: \"所有更改将会丢失。\",\r\n ARE_YOU_SURE_YOU_WANT_TO_PROCEED: \"你确定要继续吗?\",\r\n FAILED_TO_RETRIEVE_DATA: \"无法从服务器检索数据\",\r\n FAILED_TO_RETRIEVE_DATA_FOR_SELECTION: \"无法检索选择的数据\",\r\n },\r\n },\r\n NAVBAR: {\r\n HELLO: \"你好\",\r\n MY_DETAILS: \"我的详情\",\r\n MY_CONTACT_METHODS: \"我的联系方式\",\r\n MY_DATA_CONSENTS: \"我的数据同意书\",\r\n MY_DOCUMENTS: \"我的文档\",\r\n LOGOUT: \"登出\",\r\n SELECT_LANGUAGE: \"选择语言\",\r\n MENU: \"菜单\",\r\n CLOSE: \"关闭\",\r\n SETTINGS: \"设置\",\r\n TERMSANDCONDITIONS: \"条款和条件\",\r\n LANGUAGE: {\r\n ENLABEL: \"英语\",\r\n CHLABEL: \"中文\",\r\n ESLABEL: \"西班牙语\",\r\n JALABEL: \"日语\",\r\n DELABEL: \"德语\",\r\n FRLABEL: \"法语\",\r\n },\r\n MENU_ITEM: {\r\n CURRENT_PLACEMENT: \"我的当前职位\",\r\n COMPLIANCE: \"我的合规性\",\r\n TIMESHEETS: \"我的时间表\",\r\n EXPENSES: \"我的费用\",\r\n DOCUMENTS: \"我的文档\",\r\n },\r\n },\r\n AUTH: {\r\n LOGIN: {\r\n BUTTON: {\r\n SIGN_IN: \"登录\",\r\n },\r\n LABEL: {\r\n EMAIL: \"电子邮件\",\r\n PASSWORD: \"密码\",\r\n FORGOT_PASSWORD: \"忘记密码?\",\r\n },\r\n VALIDATION: {\r\n EMAIL_INVALID: \"无效的电子邮件地址\",\r\n EMAIL_MAX_LENGTH: \"电子邮件长度不得超过{{value}}个字符\",\r\n EMAIL_REQUIRED: \"必须输入电子邮件\",\r\n LOGIN_FAILED: \"登录详情不正确\",\r\n PASSWORD_MAX_LENGTH: \"密码长度不得超过{{value}}个字符\",\r\n PASSWORD_MIN_LENGTH: \"密码长度不得少于{{value}}个字符\",\r\n PASSWORD_REQUIRED: \"必须输入密码\",\r\n },\r\n },\r\n FORGOT_PASSWORD: {\r\n ENTER_YOUR_EMAIL_TO_RESET_YOUR_PASSWORD: \"输入您的电子邮件以重置密码\",\r\n FORGOTTEN_PASSWORD: \"忘记密码?\",\r\n BUTTON: {\r\n OK_GOT_IT: \"好的,明白了!\",\r\n },\r\n LABEL: {\r\n EMAIL: \"电子邮件\",\r\n EMAIL_SENT_MESSAGE1: \"我们已将电子邮件发送到您指定的地址以重置密码。\",\r\n EMAIL_SENT_MESSAGE2:\r\n \"如果您没有收到,请检查您的垃圾邮件文件夹,并确认输入的电子邮件地址是否正确。\",\r\n EMAIL_SENT_TITLE: \"恢复邮件已发送!\",\r\n SUCCESS: \"您的帐户已成功重置。\",\r\n },\r\n VALIDATION: {\r\n EMAIL_INVALID: \"无效的电子邮件地址\",\r\n EMAIL_MAX_LENGTH: \"电子邮件长度不得超过{{value}}个字符\",\r\n EMAIL_REQUIRED: \"必须输入电子邮件\",\r\n },\r\n },\r\n RESET_PASSWORD: {\r\n ENTER_NEW_PASSWORD_DETAILS: \"输入新密码详情\",\r\n RESET_PASSWORD: \"重置密码\",\r\n BUTTON: {},\r\n LABEL: {\r\n CONFIRM_NEW_PASSWORD: \"确认新密码\",\r\n CREATE_NEW_PASSWORD: \"创建新密码\",\r\n OLD_PASSWORD: \"旧密码\",\r\n PASSWORD: \"密码\",\r\n },\r\n VALIDATION: {\r\n PASSWORDS_DONT_MATCH: \"'密码'和'确认密码'不匹配\",\r\n PASSWORD_MAX_LENGTH: \"密码长度不得超过{{value}}个字符\",\r\n PASSWORD_MIN_LENGTH: \"密码长度不得少于{{value}}个字符\",\r\n PASSWORD_PATTERN:\r\n \"必须包含大写和小写字母、一个数字以及以下字符之一:-+_!@#$%^&*.,?\",\r\n PASSWORD_REQUIRED: \"必须输入密码\",\r\n REGISTRATION_DETAILS_INCORRECT: \"注册详情不正确\",\r\n },\r\n },\r\n },\r\n MY_CONTACT_METHODS: {\r\n MY_CONTACT_METHODS: \"我的联系方式\",\r\n CONTACT_PREFERENCES: \"联系偏好\",\r\n PLEASE_SELECT_HOW_YOU_WISH_TO_BE_CONTACTED: \"请选择您希望被联系的方式。\",\r\n BUTTON: {},\r\n LABEL: {\r\n RECEIVE: \"接收\",\r\n DO_NOT_RECEIVE: \"不接收\",\r\n SALES_EMAIL: \"销售电子邮件\",\r\n EMAIL: \"电子邮件\",\r\n PHONE_CALL: \"电话\",\r\n TEXT_MESSAGE: \"短信\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING: \"更新联系偏好时出错\",\r\n },\r\n WARNING: {\r\n WARNING_MESSAGE: \"这将禁用所有电子邮件,包括那些用于时间表和费用的电子邮件。\"\r\n }\r\n },\r\n MY_DETAILS: {\r\n MY_DETAILS: \"我的详情\",\r\n TAB_TITLES: {\r\n CANDIDATE_INFORMATION: \"候选人信息\",\r\n PREFERENCES: \"偏好设置\",\r\n PROFILE: \"个人资料\",\r\n },\r\n CANDIDATE_INFORMATION_TAB: {\r\n FIRST_NAME: \"名字\",\r\n LAST_NAME: \"姓氏\",\r\n MOBILE_PHONE: \"移动电话\",\r\n HOME_PHONE: \"家庭电话\",\r\n WORK_PHONE: \"工作电话\",\r\n PERSONAL_EMAIL: \"个人邮箱\",\r\n WORK_EMAIL: \"工作邮箱\",\r\n LINKEDIN: \"领英\",\r\n ADDRESSLINE1: \"地址行1\",\r\n CITY_TOWN: \"城市/镇\",\r\n POSTCODE: \"邮政编码\",\r\n COUNTRY: \"国家\",\r\n },\r\n PREFERENCES_TAB: {\r\n AVAILABILITY: \"可用性\",\r\n NOTICE_PERIOD: \"通知期\",\r\n CURRENCY: \"货币\",\r\n CONTRACTOR: \"承包商\",\r\n TEMP: \"临时\",\r\n RATE_FROM: \"费率起始\",\r\n PAY_FREQUENCY: \"支付频率\",\r\n RATE_TO: \"费率至\",\r\n PERMANENT: \"永久\",\r\n SALARY_FROM: \"薪资起始\",\r\n SALARY_TO: \"薪资至\",\r\n CHOOSE_INTERVAL: \"选择间隔...\",\r\n SELECT_A_CURRENCY: \"选择货币...\",\r\n PAY_FREQUENCY_PLACEHOLDER: \"选择付款频率...\",\r\n },\r\n PROFILE_TAB: {\r\n CANDIDATE_SUMMARY: \"候选人概述\",\r\n ROLES_SOUGHT: \"期望职位\",\r\n CANDIDATE_SUMMARY_PLACEHOLDER: \"请输入候选人概要...\",\r\n ROLESSOUGHT_SUMMARY_PLACEHOLDER: \"请输入候选人所寻求的角色概要...\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING: \"更新您的详细信息时出错\",\r\n FIRST_NAME_VALIDATION: \"名字是必填字段\",\r\n LAST_NAME_VALIDATION: \"姓氏是必填字段\",\r\n PHONE_NUMBER_VALIDATION: \"请输入有效的电话号码\",\r\n PHONE_NUMBER_REQUIRED: \"需要移动电话\",\r\n EMAIL_VALIDATION: \"请输入有效的电子邮件地址\",\r\n EMAIL_REQUIRED: \"个人电子邮件是必填项\",\r\n FREQUENCY_REQUIRED: \"频率是必填项\",\r\n RATE_FROM_VALIDATION: \"请确保'最高费率'大于或等于'最低费率'\",\r\n CANDIDATE_SUMMARY_VALIDATION: \"允许的最大字符数为5000\",\r\n ROLE_SOUGHT_VALIDATION: \"允许的最大字符数为2000\",\r\n SALARY_TO_VALIDATION: \"请确保'最高工资'大于或等于'最低工资'\",\r\n SALARY_REQUIRED: \"需要填写薪资\",\r\n PAY_FREQUENCY_REQUIRED: \"需要填写支付频率\",\r\n SELECT_A_UNIT: \"请选择单位\",\r\n RATE_SET_REQUIRED: \"如果设置了费率则必填\",\r\n SALARY_SET_REQUIRED: \"如果设置了工资则必填\",\r\n NOTICE_PERIOD_VALIDATION: \"通知期限不能小于0\",\r\n },\r\n },\r\n MY_DATA_CONSENTS: {\r\n MY_DATA_CONSENTS: \"我的数据同意\",\r\n PLEASE_SELECT_HOW_YOU_WISH_TO_MANAGE_YOUR_DATA_CONSENTS:\r\n \"请选择您希望如何管理您的数据同意。\",\r\n BUTTON: {},\r\n LABEL: {\r\n CONSENT: \"同意\",\r\n WITHDRAW: \"撤回\",\r\n DATA_CONSENT_PURPOSE: \"数据同意用途\",\r\n CONSENT_METHOD: \"同意方法\",\r\n CONSENT_GIVEN: \"已授予同意\",\r\n CONSENT_EXPIRY: \"同意到期\",\r\n WITHDRAW_CONSENT: \"撤回同意\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING: \"更新我的数据同意时出错\",\r\n },\r\n },\r\n MY_CURRENT_PLACEMENT: {\r\n MY_CURRENT_PLACEMENTS: \"我当前的职位\",\r\n BUTTON: {},\r\n LABEL: {\r\n NO_ACTIVE_PLACEMENTS: \"没有活动职位\",\r\n CLIENT: \"客户\",\r\n PLACEMENT_DETAILS: \"职位详情\",\r\n DOCUMENTS: \"文件\",\r\n JOB_TITLE: \"职位名称\",\r\n TYPE: \"类型\",\r\n START_DATE: \"开始日期\",\r\n END_DATE: \"结束日期\",\r\n CANDIDATE_COMPANY: \"候选人公司\",\r\n NOTICE_FROM_US: \"我们的通知\",\r\n NOTICE_FROM_YOU: \"您的通知\",\r\n PAY: \"薪资\",\r\n CLIENT_ADDRESS: \"客户地址\",\r\n COMPLIANCE: \"合规性\",\r\n STATUS: \"状态\",\r\n EVIDENCE: \"证据\",\r\n REASON_FOR_REJECTION: \"拒绝原因\",\r\n VALID_FROM: \"有效期开始\",\r\n VALID_TO: \"有效期结束\",\r\n DESCRIPTION: \"描述\",\r\n LAST_UPDATED: \"最后更新\",\r\n DOCUMENT: \"文件\",\r\n PLEASE_CLICK_TO_DOWNLOAD: \"请点击下载\",\r\n DOWNLOAD: \"下载\",\r\n NO_DOCUMENTS_FOUND: \"未找到文件\",\r\n CHECKED_ON: \"检查日期\",\r\n CHECKED_BY: \"检查人\",\r\n OUTSTANDING: \"未完成\",\r\n SUBMITTED: \"已提交\",\r\n CHECKED: \"已检查\",\r\n REJECTED: \"已拒绝\",\r\n },\r\n VALIDATION: {\r\n FROM_DATE_IS_REQUIRED: \"开始日期是必填的\",\r\n TO_DATE_IS_REQUIRED: \"结束日期是必填的\",\r\n TO_DATE_LESS_THAN_FROM_DATE: \"结束日期必须晚于开始日期\",\r\n FROM_DATE_GREATER_THAN_TO_DATE: \"开始日期不能晚于结束日期\",\r\n ERROR_SAVING: \"保存合规性时出错\",\r\n TO_DATE_MUST_BE_IN_FUTURE: \"结束日期必须设置为将来的日期\",\r\n },\r\n },\r\n FILEUPLOAD: {\r\n CHOOSEFILE: \"选择文件\",\r\n UPLOADFILE: \"上传文件\",\r\n REMOVEFILE: \"移除文件\",\r\n PENDINGUPLOAD: \"待上传\",\r\n COMPLETEDUPLOAD: \"上传完成\",\r\n COMPLETED: \"已完成\",\r\n VALIDATION: {\r\n INVALID_FILE: \"选择的文件无效\",\r\n FILE_IS_ZERO_SIZE: \"文件大小不能为零。请选择有效的文件并重试。\",\r\n MULTIPLE_FILES_ARE_ZERO_SIZE:\r\n \"文件大小不能为零。无效的文件将被移除。请确保所有选定的文件有效并重试。\",\r\n },\r\n },\r\n DOCUSIGN: {\r\n DOCUSIGN_TITLE: \"DocuSign\",\r\n LABEL: {\r\n COMPLETED: \"完成\",\r\n SENT: \"已发送\",\r\n DELIVERED: \"已交付\",\r\n VOIDED: \"作废\",\r\n CREATED: \"已创建\",\r\n STATUS: \"状态\",\r\n ENVELOPEID: \"信封编号\",\r\n PLACEMENT: \"安置\",\r\n CREATED_DATE: \"创建日期\",\r\n NAME: \"名称\",\r\n TYPE: \"类型\",\r\n DOCUMENTID: \"文档ID\",\r\n SIGN_DOCUMENTS: \"签署文件\",\r\n EMBEDDED_URL_CREATED: \"嵌入式网址已创建\",\r\n VIEW_PDF: \"查看 PDF\",\r\n },\r\n },\r\n },\r\n};\r\n","// Spain\r\nexport const locale = {\r\n lang: \"es\",\r\n data: {\r\n COMMON: {\r\n CANCEL: \"Cancelar\",\r\n CLOSE: \"Cerrar\",\r\n SUBMIT: \"Enviar\",\r\n NO: \"No\",\r\n YES: \"Sí\",\r\n YES_CLOSE_AND_LOSE_CHANGES: \"Sí, cerrar y perder cambios\",\r\n DISCARD_AND_CLOSE: \"Descartar y cerrar\",\r\n SAVE_AND_CLOSE: \"Guardar y cerrar\",\r\n SEARCH: \"Buscar...\",\r\n SHOWING_PAGE: \"Mostrando página\",\r\n OF: \"de\",\r\n RESULTS_PER_PAGE: \"Resultados por página\",\r\n VALIDATION: {\r\n SOMETHING_WENT_WRONG:\r\n \"¡Vaya, parece que algo salió mal! Por favor, inténtalo de nuevo.\",\r\n SUCCESSFULLY_UPDATED: \"Actualizado con éxito\",\r\n ANY_CHANGES_MADE_WILL_BE_LOST: \"Cualquier cambio realizado se perderá.\",\r\n ARE_YOU_SURE_YOU_WANT_TO_PROCEED:\r\n \"¿Estás seguro de que quieres continuar?\",\r\n FAILED_TO_RETRIEVE_DATA: \"No se pudo recuperar datos del servidor\",\r\n FAILED_TO_RETRIEVE_DATA_FOR_SELECTION:\r\n \"No se pudo recuperar datos para la selección\",\r\n },\r\n },\r\n NAVBAR: {\r\n HELLO: \"Hola\",\r\n MY_DETAILS: \"Mis detalles\",\r\n MY_CONTACT_METHODS: \"Mis métodos de contacto\",\r\n MY_DATA_CONSENTS: \"Mis consentimientos de datos\",\r\n MY_DOCUMENTS: \"Mis documentos\",\r\n LOGOUT: \"Cerrar sesión\",\r\n SELECT_LANGUAGE: \"Seleccionar idioma\",\r\n MENU: \"Menú\",\r\n CLOSE: \"Cerrar\",\r\n SETTINGS: \"Configuraciones\",\r\n TERMSANDCONDITIONS: \"Términos y condiciones\",\r\n LANGUAGE: {\r\n ENLABEL: \"Inglés\",\r\n CHLABEL: \"Chino\",\r\n ESLABEL: \"Español\",\r\n JALABEL: \"Japonés\",\r\n DELABEL: \"Alemán\",\r\n FRLABEL: \"Francés\",\r\n },\r\n MENU_ITEM: {\r\n CURRENT_PLACEMENT: \"Mi ubicación actual\",\r\n COMPLIANCE: \"Mi cumplimiento\",\r\n TIMESHEETS: \"Mis hojas de tiempo\",\r\n EXPENSES: \"Mis gastos\",\r\n DOCUMENTS: \"Mis documentos\",\r\n },\r\n },\r\n AUTH: {\r\n LOGIN: {\r\n BUTTON: {\r\n SIGN_IN: \"Iniciar sesión\",\r\n },\r\n LABEL: {\r\n EMAIL: \"Correo electrónico\",\r\n PASSWORD: \"Contraseña\",\r\n FORGOT_PASSWORD: \"¿Olvidaste tu contraseña?\",\r\n },\r\n VALIDATION: {\r\n EMAIL_INVALID: \"Correo electrónico inválido\",\r\n EMAIL_MAX_LENGTH:\r\n \"El correo electrónico no debe superar los {{value}} caracteres\",\r\n EMAIL_REQUIRED: \"El correo electrónico es obligatorio\",\r\n LOGIN_FAILED: \"Los detalles de inicio de sesión son incorrectos\",\r\n PASSWORD_MAX_LENGTH:\r\n \"La contraseña no debe superar los {{value}} caracteres\",\r\n PASSWORD_MIN_LENGTH:\r\n \"La contraseña debe tener al menos {{value}} caracteres\",\r\n PASSWORD_REQUIRED: \"La contraseña es obligatoria\",\r\n },\r\n },\r\n FORGOT_PASSWORD: {\r\n ENTER_YOUR_EMAIL_TO_RESET_YOUR_PASSWORD:\r\n \"Introduce tu correo electrónico para restablecer tu contraseña\",\r\n FORGOTTEN_PASSWORD: \"¿Contraseña olvidada?\",\r\n BUTTON: {\r\n OK_GOT_IT: \"¡Ok, entendido!\",\r\n },\r\n LABEL: {\r\n EMAIL: \"Correo electrónico\",\r\n EMAIL_SENT_MESSAGE1:\r\n \"Hemos enviado un correo electrónico a la dirección que especificaste para restablecer tu contraseña.\",\r\n EMAIL_SENT_MESSAGE2:\r\n \"Si no lo recibiste, por favor revisa tu carpeta de spam y verifica que la dirección de correo electrónico ingresada sea correcta.\",\r\n EMAIL_SENT_TITLE: \"¡Correo de recuperación enviado!\",\r\n SUCCESS: \"Tu cuenta ha sido restablecida con éxito.\",\r\n },\r\n VALIDATION: {\r\n EMAIL_INVALID: \"Correo electrónico inválido\",\r\n EMAIL_MAX_LENGTH:\r\n \"El correo electrónico no debe superar los {{value}} caracteres\",\r\n EMAIL_REQUIRED: \"El correo electrónico es obligatorio\",\r\n },\r\n },\r\n RESET_PASSWORD: {\r\n ENTER_NEW_PASSWORD_DETAILS:\r\n \"Introduce los detalles de la nueva contraseña\",\r\n RESET_PASSWORD: \"Restablecer contraseña\",\r\n BUTTON: {},\r\n LABEL: {\r\n CONFIRM_NEW_PASSWORD: \"Confirmar nueva contraseña\",\r\n CREATE_NEW_PASSWORD: \"Crear nueva contraseña\",\r\n OLD_PASSWORD: \"Contraseña anterior\",\r\n PASSWORD: \"Contraseña\",\r\n },\r\n VALIDATION: {\r\n PASSWORDS_DONT_MATCH:\r\n \"'Contraseña' y 'Confirmar contraseña' no coinciden\",\r\n PASSWORD_MAX_LENGTH:\r\n \"La contraseña no debe superar los {{value}} caracteres\",\r\n PASSWORD_MIN_LENGTH:\r\n \"La contraseña debe tener al menos {{value}} caracteres\",\r\n PASSWORD_PATTERN:\r\n \"Debe contener letras mayúsculas y minúsculas, un número y uno de los siguientes: -+_!@#$%^&*.,?\",\r\n PASSWORD_REQUIRED: \"La contraseña es obligatoria\",\r\n REGISTRATION_DETAILS_INCORRECT:\r\n \"Los detalles de registro son incorrectos\",\r\n },\r\n },\r\n },\r\n MY_CONTACT_METHODS: {\r\n MY_CONTACT_METHODS: \"Mis métodos de contacto\",\r\n CONTACT_PREFERENCES: \"Preferencias de contacto\",\r\n PLEASE_SELECT_HOW_YOU_WISH_TO_BE_CONTACTED:\r\n \"Por favor, selecciona cómo deseas ser contactado.\",\r\n BUTTON: {},\r\n LABEL: {\r\n RECEIVE: \"Recibir\",\r\n DO_NOT_RECEIVE: \"No recibir\",\r\n SALES_EMAIL: \"Correo electrónico de ventas\",\r\n EMAIL: \"Correo electrónico\",\r\n PHONE_CALL: \"Llamada telefónica\",\r\n TEXT_MESSAGE: \"Mensaje de texto\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING:\r\n \"Hubo un error al actualizar las preferencias de contacto\",\r\n },\r\n WARNING: {\r\n WARNING_MESSAGE: \"Esto desactivará todos los correos electrónicos, incluidos los de hojas de tiempo y gastos.\"\r\n }\r\n },\r\n MY_DETAILS: {\r\n MY_DETAILS: \"Mis Detalles\",\r\n TAB_TITLES: {\r\n CANDIDATE_INFORMATION: \"Información del Candidato\",\r\n PREFERENCES: \"Preferencias\",\r\n PROFILE: \"Perfil\",\r\n },\r\n CANDIDATE_INFORMATION_TAB: {\r\n FIRST_NAME: \"Nombre\",\r\n LAST_NAME: \"Apellido\",\r\n MOBILE_PHONE: \"Teléfono Móvil\",\r\n HOME_PHONE: \"Teléfono de Casa\",\r\n WORK_PHONE: \"Teléfono del Trabajo\",\r\n PERSONAL_EMAIL: \"Correo Electrónico Personal\",\r\n WORK_EMAIL: \"Correo Electrónico del Trabajo\",\r\n LINKEDIN: \"LinkedIn\",\r\n ADDRESSLINE1: \"Línea de Dirección 1\",\r\n CITY_TOWN: \"Ciudad/Pueblo\",\r\n POSTCODE: \"Código Postal\",\r\n COUNTRY: \"País\",\r\n },\r\n PREFERENCES_TAB: {\r\n AVAILABILITY: \"Disponibilidad\",\r\n NOTICE_PERIOD: \"Periodo de Preaviso\",\r\n CURRENCY: \"Moneda\",\r\n CONTRACTOR: \"Contratista\",\r\n TEMP: \"Temporal\",\r\n RATE_FROM: \"Tarifa Desde\",\r\n PAY_FREQUENCY: \"Frecuencia de Pago\",\r\n RATE_TO: \"Tarifa Hasta\",\r\n PERMANENT: \"Permanente\",\r\n SALARY_FROM: \"Salario Desde\",\r\n SALARY_TO: \"Salario Hasta\",\r\n CHOOSE_INTERVAL: \"Elegir intervalo...\",\r\n SELECT_A_CURRENCY: \"Seleccionar una moneda...\",\r\n PAY_FREQUENCY_PLACEHOLDER: \"Seleccionar una frecuencia de pago...\",\r\n },\r\n PROFILE_TAB: {\r\n CANDIDATE_SUMMARY: \"Resumen del Candidato\",\r\n ROLES_SOUGHT: \"Roles Buscados\",\r\n CANDIDATE_SUMMARY_PLACEHOLDER:\r\n \"Por favor, introduzca un resumen del candidato...\",\r\n ROLESSOUGHT_SUMMARY_PLACEHOLDER:\r\n \"Por favor, introduzca un resumen del rol buscado por el candidato...\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING: \"Se produjo un error al actualizar sus detalles\",\r\n FIRST_NAME_VALIDATION: \"El nombre es un campo obligatorio\",\r\n LAST_NAME_VALIDATION: \"El apellido es un campo obligatorio\",\r\n PHONE_NUMBER_VALIDATION:\r\n \"Por favor, introduzca un número de teléfono válido\",\r\n PHONE_NUMBER_REQUIRED: \"Se requiere teléfono móvil\",\r\n EMAIL_VALIDATION:\r\n \"Por favor, introduzca una dirección de correo electrónico válida\",\r\n EMAIL_REQUIRED: \"Se requiere el correo electrónico personal\",\r\n FREQUENCY_REQUIRED: \"Se requiere la frecuencia\",\r\n RATE_FROM_VALIDATION:\r\n \"Asegúrese de que la 'Tasa máxima' sea mayor o igual a la 'Tasa mínima'\",\r\n CANDIDATE_SUMMARY_VALIDATION:\r\n \"El máximo de caracteres permitidos es 5,000\",\r\n ROLE_SOUGHT_VALIDATION: \"El máximo de caracteres permitidos es 2,000\",\r\n SALARY_TO_VALIDATION:\r\n \"Asegúrese de que el 'Salario máximo' sea mayor o igual al 'Salario mínimo'\",\r\n SALARY_REQUIRED: \"Salario requerido\",\r\n PAY_FREQUENCY_REQUIRED: \"Frecuencia de pago requerida\",\r\n SELECT_A_UNIT: \"Por favor seleccione una unidad\",\r\n RATE_SET_REQUIRED: \"Requerido si se establece una tarifa\",\r\n SALARY_SET_REQUIRED: \"Requerido si se establece un salario\",\r\n NOTICE_PERIOD_VALIDATION:\r\n \"El período de preaviso no debe ser inferior a 0\",\r\n },\r\n },\r\n MY_DATA_CONSENTS: {\r\n MY_DATA_CONSENTS: \"Mis Consentimientos de Datos\",\r\n PLEASE_SELECT_HOW_YOU_WISH_TO_MANAGE_YOUR_DATA_CONSENTS:\r\n \"Por favor seleccione cómo desea gestionar sus consentimientos de datos.\",\r\n BUTTON: {},\r\n LABEL: {\r\n CONSENT: \"Consentimiento\",\r\n WITHDRAW: \"Retirar\",\r\n DATA_CONSENT_PURPOSE: \"Propósito del Consentimiento de Datos\",\r\n CONSENT_METHOD: \"Método de Consentimiento\",\r\n CONSENT_GIVEN: \"Consentimiento Otorgado\",\r\n CONSENT_EXPIRY: \"Vencimiento del Consentimiento\",\r\n WITHDRAW_CONSENT: \"Retirar Consentimiento\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING:\r\n \"Hubo un error al actualizar mis consentimientos de datos\",\r\n },\r\n },\r\n MY_CURRENT_PLACEMENT: {\r\n MY_CURRENT_PLACEMENTS: \"Mis colocaciones actuales\",\r\n BUTTON: {},\r\n LABEL: {\r\n NO_ACTIVE_PLACEMENTS: \"No hay colocaciones activas\",\r\n CLIENT: \"Cliente\",\r\n PLACEMENT_DETAILS: \"Detalles de la colocación\",\r\n DOCUMENTS: \"Documentos\",\r\n JOB_TITLE: \"Título del trabajo\",\r\n TYPE: \"Tipo\",\r\n START_DATE: \"Fecha de inicio\",\r\n END_DATE: \"Fecha de finalización\",\r\n CANDIDATE_COMPANY: \"Empresa del candidato\",\r\n NOTICE_FROM_US: \"Aviso de nuestra parte\",\r\n NOTICE_FROM_YOU: \"Aviso de su parte\",\r\n PAY: \"Pago\",\r\n CLIENT_ADDRESS: \"Dirección del cliente\",\r\n COMPLIANCE: \"Cumplimiento\",\r\n STATUS: \"Estado\",\r\n EVIDENCE: \"Evidencia\",\r\n REASON_FOR_REJECTION: \"Razón de la rechazo\",\r\n VALID_FROM: \"Válido desde\",\r\n VALID_TO: \"Válido hasta\",\r\n DESCRIPTION: \"Descripción\",\r\n LAST_UPDATED: \"Última actualización\",\r\n DOCUMENT: \"Documento\",\r\n PLEASE_CLICK_TO_DOWNLOAD: \"Haga clic para descargar\",\r\n DOWNLOAD: \"Descargar\",\r\n NO_DOCUMENTS_FOUND: \"No se encontraron documentos\",\r\n CHECKED_ON: \"Revisado el\",\r\n CHECKED_BY: \"Revisado por\",\r\n OUTSTANDING: \"Pendiente\",\r\n SUBMITTED: \"Enviado\",\r\n CHECKED: \"Verificado\",\r\n REJECTED: \"Rechazado\",\r\n },\r\n VALIDATION: {\r\n FROM_DATE_IS_REQUIRED: \"La fecha de inicio es obligatoria\",\r\n TO_DATE_IS_REQUIRED: \"La fecha de finalización es obligatoria\",\r\n TO_DATE_LESS_THAN_FROM_DATE:\r\n \"La fecha de finalización debe ser posterior a la fecha de inicio\",\r\n FROM_DATE_GREATER_THAN_TO_DATE:\r\n \"La fecha de inicio no puede ser posterior a la fecha de finalización\",\r\n ERROR_SAVING: \"Error al guardar el cumplimiento\",\r\n TO_DATE_MUST_BE_IN_FUTURE:\r\n \"La fecha de finalización debe establecerse en una fecha futura\",\r\n },\r\n },\r\n FILEUPLOAD: {\r\n CHOOSEFILE: \"Elegir archivo\",\r\n UPLOADFILE: \"Subir archivo\",\r\n REMOVEFILE: \"Eliminar archivo\",\r\n PENDINGUPLOAD: \"Carga pendiente\",\r\n COMPLETEDUPLOAD: \"Carga completada\",\r\n COMPLETED: \"Completado\",\r\n VALIDATION: {\r\n INVALID_FILE: \"Archivo seleccionado no válido\",\r\n FILE_IS_ZERO_SIZE:\r\n \"El tamaño del archivo no puede ser cero. Por favor, seleccione un archivo válido y vuelva a intentarlo.\",\r\n MULTIPLE_FILES_ARE_ZERO_SIZE:\r\n \"Los tamaños de los archivos no pueden ser cero. Los archivos no válidos serán eliminados. Asegúrese de que todos los archivos seleccionados sean válidos y vuelva a intentarlo.\",\r\n },\r\n },\r\n DOCUSIGN: {\r\n DOCUSIGN_TITLE: \"DocuSign\",\r\n LABEL: {\r\n COMPLETED: \"Completado\",\r\n SENT: \"Enviado\",\r\n DELIVERED: \"Entregado\",\r\n VOIDED: \"Anulado\",\r\n CREATED: \"Creado\",\r\n STATUS: \"Estado\",\r\n ENVELOPEID: \"ID del sobre\",\r\n PLACEMENT: \"Colocación\",\r\n CREATED_DATE: \"Fecha de creación\",\r\n NAME: \"Nombre\",\r\n TYPE: \"Tipo\",\r\n DOCUMENTID: \"ID del documento\",\r\n SIGN_DOCUMENTS: \"Firmar documentos\",\r\n EMBEDDED_URL_CREATED: \"URL incrustada creada\",\r\n VIEW_PDF: \"Ver PDF\",\r\n },\r\n },\r\n },\r\n};\r\n","// Japan\r\nexport const locale = {\r\n lang: \"ja\",\r\n data: {\r\n COMMON: {\r\n CANCEL: \"キャンセル\",\r\n CLOSE: \"閉じる\",\r\n SUBMIT: \"送信\",\r\n NO: \"いいえ\",\r\n YES: \"はい\",\r\n YES_CLOSE_AND_LOSE_CHANGES: \"はい、閉じて変更を破棄します\",\r\n DISCARD_AND_CLOSE: \"破棄して閉じる\",\r\n SAVE_AND_CLOSE: \"保存して閉じる\",\r\n SEARCH: \"検索...\",\r\n SHOWING_PAGE: \"ページ表示中\",\r\n OF: \"の\",\r\n RESULTS_PER_PAGE: \"ページごとの結果\",\r\n VALIDATION: {\r\n SOMETHING_WENT_WRONG:\r\n \"おっと、何か問題が発生したようです!もう一度お試しください。\",\r\n SUCCESSFULLY_UPDATED: \"正常に更新されました\",\r\n ANY_CHANGES_MADE_WILL_BE_LOST: \"行われた変更はすべて失われます。\",\r\n ARE_YOU_SURE_YOU_WANT_TO_PROCEED: \"続行してもよろしいですか?\",\r\n FAILED_TO_RETRIEVE_DATA: \"サーバーからデータを取得できませんでした\",\r\n FAILED_TO_RETRIEVE_DATA_FOR_SELECTION:\r\n \"選択のためのデータを取得できませんでした\",\r\n },\r\n },\r\n NAVBAR: {\r\n HELLO: \"こんにちは\",\r\n MY_DETAILS: \"私の詳細\",\r\n MY_CONTACT_METHODS: \"私の連絡方法\",\r\n MY_DATA_CONSENTS: \"私のデータ同意\",\r\n MY_DOCUMENTS: \"マイドキュメント\",\r\n LOGOUT: \"ログアウト\",\r\n SELECT_LANGUAGE: \"言語を選択\",\r\n MENU: \"メニュー\",\r\n CLOSE: \"閉じる\",\r\n SETTINGS: \"設定\",\r\n TERMSANDCONDITIONS: \"利用規約\",\r\n LANGUAGE: {\r\n ENLABEL: \"英語\",\r\n CHLABEL: \"中国語\",\r\n ESLABEL: \"スペイン語\",\r\n JALABEL: \"日本語\",\r\n DELABEL: \"ドイツ語\",\r\n FRLABEL: \"フランス語\",\r\n },\r\n MENU_ITEM: {\r\n CURRENT_PLACEMENT: \"現在の配置\",\r\n COMPLIANCE: \"コンプライアンス\",\r\n TIMESHEETS: \"タイムシート\",\r\n EXPENSES: \"経費\",\r\n DOCUMENTS: \"マイドキュメント\",\r\n },\r\n },\r\n AUTH: {\r\n LOGIN: {\r\n BUTTON: {\r\n SIGN_IN: \"サインイン\",\r\n },\r\n LABEL: {\r\n EMAIL: \"メール\",\r\n PASSWORD: \"パスワード\",\r\n FORGOT_PASSWORD: \"パスワードを忘れましたか?\",\r\n },\r\n VALIDATION: {\r\n EMAIL_INVALID: \"無効なメールアドレスです\",\r\n EMAIL_MAX_LENGTH: \"メールは{{value}}文字を超えてはなりません\",\r\n EMAIL_REQUIRED: \"メールは必須です\",\r\n LOGIN_FAILED: \"ログイン情報が正しくありません\",\r\n PASSWORD_MAX_LENGTH: \"パスワードは{{value}}文字を超えてはなりません\",\r\n PASSWORD_MIN_LENGTH:\r\n \"パスワードは最低{{value}}文字でなければなりません\",\r\n PASSWORD_REQUIRED: \"パスワードは必須です\",\r\n },\r\n },\r\n FORGOT_PASSWORD: {\r\n ENTER_YOUR_EMAIL_TO_RESET_YOUR_PASSWORD:\r\n \"パスワードをリセットするためにメールアドレスを入力してください\",\r\n FORGOTTEN_PASSWORD: \"パスワードを忘れましたか?\",\r\n BUTTON: {\r\n OK_GOT_IT: \"わかりました!\",\r\n },\r\n LABEL: {\r\n EMAIL: \"メール\",\r\n EMAIL_SENT_MESSAGE1:\r\n \"パスワードをリセットするためのメールを指定されたアドレスに送信しました。\",\r\n EMAIL_SENT_MESSAGE2:\r\n \"受信していない場合は、迷惑メールフォルダーを確認し、入力されたメールアドレスが正しいことを確認してください。\",\r\n EMAIL_SENT_TITLE: \"回復メールを送信しました!\",\r\n SUCCESS: \"アカウントが正常にリセットされました。\",\r\n },\r\n VALIDATION: {\r\n EMAIL_INVALID: \"無効なメールアドレスです\",\r\n EMAIL_MAX_LENGTH: \"メールは{{value}}文字を超えてはなりません\",\r\n EMAIL_REQUIRED: \"メールは必須です\",\r\n },\r\n },\r\n RESET_PASSWORD: {\r\n ENTER_NEW_PASSWORD_DETAILS: \"新しいパスワードの詳細を入力してください\",\r\n RESET_PASSWORD: \"パスワードをリセット\",\r\n BUTTON: {},\r\n LABEL: {\r\n CONFIRM_NEW_PASSWORD: \"新しいパスワードを確認\",\r\n CREATE_NEW_PASSWORD: \"新しいパスワードを作成\",\r\n OLD_PASSWORD: \"古いパスワード\",\r\n PASSWORD: \"パスワード\",\r\n },\r\n VALIDATION: {\r\n PASSWORDS_DONT_MATCH:\r\n \"「パスワード」と「パスワードの確認」が一致しません\",\r\n PASSWORD_MAX_LENGTH: \"パスワードは{{value}}文字を超えてはなりません\",\r\n PASSWORD_MIN_LENGTH:\r\n \"パスワードは最低{{value}}文字でなければなりません\",\r\n PASSWORD_PATTERN:\r\n \"大文字と小文字の両方、数字、および以下のいずれかを含む必要があります: -+_!@#$%^&*.,?\",\r\n PASSWORD_REQUIRED: \"パスワードは必須です\",\r\n REGISTRATION_DETAILS_INCORRECT: \"登録情報が正しくありません\",\r\n },\r\n },\r\n },\r\n MY_CONTACT_METHODS: {\r\n MY_CONTACT_METHODS: \"私の連絡方法\",\r\n CONTACT_PREFERENCES: \"連絡の好み\",\r\n PLEASE_SELECT_HOW_YOU_WISH_TO_BE_CONTACTED:\r\n \"連絡方法を選択してください。\",\r\n BUTTON: {},\r\n LABEL: {\r\n RECEIVE: \"受け取る\",\r\n DO_NOT_RECEIVE: \"受け取らない\",\r\n SALES_EMAIL: \"営業メール\",\r\n EMAIL: \"メール\",\r\n PHONE_CALL: \"電話\",\r\n TEXT_MESSAGE: \"テキストメッセージ\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING: \"連絡の好みを更新中にエラーが発生しました\",\r\n },\r\n WARNING: {\r\n WARNING_MESSAGE: \"これにより、タイムシートや経費のためのメールを含む、すべてのメールが無効になります。\"\r\n }\r\n },\r\n MY_DETAILS: {\r\n MY_DETAILS: \"私の詳細\",\r\n TAB_TITLES: {\r\n CANDIDATE_INFORMATION: \"候補者情報\",\r\n PREFERENCES: \"設定\",\r\n PROFILE: \"プロフィール\",\r\n },\r\n CANDIDATE_INFORMATION_TAB: {\r\n FIRST_NAME: \"名\",\r\n LAST_NAME: \"姓\",\r\n MOBILE_PHONE: \"携帯電話\",\r\n HOME_PHONE: \"自宅電話\",\r\n WORK_PHONE: \"勤務先電話\",\r\n PERSONAL_EMAIL: \"個人メール\",\r\n WORK_EMAIL: \"仕事用メール\",\r\n LINKEDIN: \"LinkedIn\",\r\n ADDRESSLINE1: \"住所1行目\",\r\n CITY_TOWN: \"市区町村\",\r\n POSTCODE: \"郵便番号\",\r\n COUNTRY: \"国\",\r\n },\r\n PREFERENCES_TAB: {\r\n AVAILABILITY: \"利用可能性\",\r\n NOTICE_PERIOD: \"通知期間\",\r\n CURRENCY: \"通貨\",\r\n CONTRACTOR: \"契約者\",\r\n TEMP: \"臨時\",\r\n RATE_FROM: \"料金の下限\",\r\n PAY_FREQUENCY: \"支払い頻度\",\r\n RATE_TO: \"料金の上限\",\r\n PERMANENT: \"正社員\",\r\n SALARY_FROM: \"給与の下限\",\r\n SALARY_TO: \"給与の上限\",\r\n CHOOSE_INTERVAL: \"間隔を選択...\",\r\n SELECT_A_CURRENCY: \"通貨を選択...\",\r\n PAY_FREQUENCY_PLACEHOLDER: \"支払い頻度を選択...\",\r\n },\r\n PROFILE_TAB: {\r\n CANDIDATE_SUMMARY: \"候補者の概要\",\r\n ROLES_SOUGHT: \"希望の役割\",\r\n CANDIDATE_SUMMARY_PLACEHOLDER: \"候補者の概要を入力してください...\",\r\n ROLESSOUGHT_SUMMARY_PLACEHOLDER:\r\n \"求める役割の概要を入力してください...\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING: \"詳細情報の更新中にエラーが発生しました\",\r\n FIRST_NAME_VALIDATION: \"名は必須フィールドです\",\r\n LAST_NAME_VALIDATION: \"姓は必須フィールドです\",\r\n PHONE_NUMBER_VALIDATION: \"有効な電話番号を入力してください\",\r\n PHONE_NUMBER_REQUIRED: \"携帯電話が必要です\",\r\n EMAIL_VALIDATION: \"有効なメールアドレスを入力してください\",\r\n EMAIL_REQUIRED: \"個人用メールは必須です\",\r\n FREQUENCY_REQUIRED: \"頻度は必須です\",\r\n RATE_FROM_VALIDATION:\r\n \"「レート最大」が「レート最小」以上であることを確認してください\",\r\n CANDIDATE_SUMMARY_VALIDATION: \"許可される最大文字数は5,000です\",\r\n ROLE_SOUGHT_VALIDATION: \"許可される最大文字数は2,000です\",\r\n SALARY_TO_VALIDATION:\r\n \"「給与最大」が「給与最小」以上であることを確認してください\",\r\n SALARY_REQUIRED: \"給与が必要です\",\r\n PAY_FREQUENCY_REQUIRED: \"支払い頻度が必要です\",\r\n SELECT_A_UNIT: \"ユニットを選択してください\",\r\n RATE_SET_REQUIRED: \"レートが設定されている場合は必須です\",\r\n SALARY_SET_REQUIRED: \"給与が設定されている場合は必須です\",\r\n NOTICE_PERIOD_VALIDATION: \"通知期間は0未満であってはなりません\",\r\n },\r\n },\r\n MY_DATA_CONSENTS: {\r\n MY_DATA_CONSENTS: \"私のデータ同意\",\r\n PLEASE_SELECT_HOW_YOU_WISH_TO_MANAGE_YOUR_DATA_CONSENTS:\r\n \"データ同意の管理方法を選択してください。\",\r\n BUTTON: {},\r\n LABEL: {\r\n CONSENT: \"同意\",\r\n WITHDRAW: \"撤回\",\r\n DATA_CONSENT_PURPOSE: \"データ同意の目的\",\r\n CONSENT_METHOD: \"同意方法\",\r\n CONSENT_GIVEN: \"同意済み\",\r\n CONSENT_EXPIRY: \"同意の有効期限\",\r\n WITHDRAW_CONSENT: \"同意を撤回\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING: \"データ同意の更新中にエラーが発生しました\",\r\n },\r\n },\r\n MY_CURRENT_PLACEMENT: {\r\n MY_CURRENT_PLACEMENTS: \"私の現在の配置\",\r\n BUTTON: {},\r\n LABEL: {\r\n NO_ACTIVE_PLACEMENTS: \"アクティブな配置はありません\",\r\n CLIENT: \"クライアント\",\r\n PLACEMENT_DETAILS: \"配置の詳細\",\r\n DOCUMENTS: \"ドキュメント\",\r\n JOB_TITLE: \"職種\",\r\n TYPE: \"タイプ\",\r\n START_DATE: \"開始日\",\r\n END_DATE: \"終了日\",\r\n CANDIDATE_COMPANY: \"候補者の会社\",\r\n NOTICE_FROM_US: \"こちらからのお知らせ\",\r\n NOTICE_FROM_YOU: \"あなたからのお知らせ\",\r\n PAY: \"給与\",\r\n CLIENT_ADDRESS: \"クライアントの住所\",\r\n COMPLIANCE: \"コンプライアンス\",\r\n STATUS: \"ステータス\",\r\n EVIDENCE: \"証拠\",\r\n REASON_FOR_REJECTION: \"拒否理由\",\r\n VALID_FROM: \"有効期限開始\",\r\n VALID_TO: \"有効期限終了\",\r\n DESCRIPTION: \"説明\",\r\n LAST_UPDATED: \"最終更新\",\r\n DOCUMENT: \"ドキュメント\",\r\n PLEASE_CLICK_TO_DOWNLOAD: \"ダウンロードするにはクリックしてください\",\r\n DOWNLOAD: \"ダウンロード\",\r\n NO_DOCUMENTS_FOUND: \"ドキュメントが見つかりませんでした\",\r\n CHECKED_ON: \"チェック日\",\r\n CHECKED_BY: \"チェック担当者\",\r\n OUTSTANDING: \"未解決\",\r\n SUBMITTED: \"提出済み\",\r\n CHECKED: \"チェック済み\",\r\n REJECTED: \"却下されました\",\r\n },\r\n VALIDATION: {\r\n FROM_DATE_IS_REQUIRED: \"開始日は必須です\",\r\n TO_DATE_IS_REQUIRED: \"終了日は必須です\",\r\n TO_DATE_LESS_THAN_FROM_DATE:\r\n \"終了日は開始日よりも後でなければなりません\",\r\n FROM_DATE_GREATER_THAN_TO_DATE:\r\n \"開始日は終了日よりも後であってはなりません\",\r\n ERROR_SAVING: \"コンプライアンスの保存中にエラーが発生しました\",\r\n TO_DATE_MUST_BE_IN_FUTURE: \"終了日は未来の日付を設定する必要があります\",\r\n },\r\n },\r\n FILEUPLOAD: {\r\n CHOOSEFILE: \"ファイルを選択\",\r\n UPLOADFILE: \"ファイルをアップロード\",\r\n REMOVEFILE: \"ファイルを削除\",\r\n PENDINGUPLOAD: \"アップロード待機中\",\r\n COMPLETEDUPLOAD: \"アップロード完了\",\r\n COMPLETED: \"完了\",\r\n VALIDATION: {\r\n INVALID_FILE: \"無効なファイルが選択されました\",\r\n FILE_IS_ZERO_SIZE:\r\n \"ファイルサイズはゼロにできません。有効なファイルを選択して再試行してください。\",\r\n MULTIPLE_FILES_ARE_ZERO_SIZE:\r\n \"ファイルサイズはゼロにできません。無効なファイルは削除されます。すべての選択されたファイルが有効であることを確認し、再試行してください。\",\r\n },\r\n },\r\n DOCUSIGN: {\r\n DOCUSIGN_TITLE: \"DocuSign\",\r\n LABEL: {\r\n COMPLETED: \"完了\",\r\n SENT: \"送信済み\",\r\n DELIVERED: \"配信済み\",\r\n VOIDED: \"無効\",\r\n CREATED: \"作成済み\",\r\n STATUS: \"ステータス\",\r\n ENVELOPEID: \"封筒ID (ふうとうID)\",\r\n PLACEMENT: \"配置\",\r\n CREATED_DATE: \"作成日\",\r\n NAME: \"名前\",\r\n TYPE: \"種類\",\r\n DOCUMENTID: \"ドキュメントID\",\r\n SIGN_DOCUMENTS: \"ドキュメントに署名\",\r\n EMBEDDED_URL_CREATED: \"埋め込みURLが作成されました\",\r\n VIEW_PDF: \"PDFを表示\",\r\n },\r\n },\r\n },\r\n};\r\n","// Germany\r\nexport const locale = {\r\n lang: \"de\",\r\n data: {\r\n COMMON: {\r\n CANCEL: \"Abbrechen\",\r\n CLOSE: \"Schließen\",\r\n SUBMIT: \"Einreichen\",\r\n NO: \"Nein\",\r\n YES: \"Ja\",\r\n YES_CLOSE_AND_LOSE_CHANGES: \"Ja, schließen und Änderungen verlieren\",\r\n DISCARD_AND_CLOSE: \"Verwerfen und Schließen\",\r\n SAVE_AND_CLOSE: \"Speichern und Schließen\",\r\n SEARCH: \"Suche...\",\r\n SHOWING_PAGE: \"Seite anzeigen\",\r\n OF: \"von\",\r\n RESULTS_PER_PAGE: \"Ergebnisse pro Seite\",\r\n VALIDATION: {\r\n SOMETHING_WENT_WRONG:\r\n \"Ups, etwas ist schief gelaufen! Bitte versuche es erneut.\",\r\n SUCCESSFULLY_UPDATED: \"Erfolgreich aktualisiert\",\r\n ANY_CHANGES_MADE_WILL_BE_LOST:\r\n \"Alle vorgenommenen Änderungen gehen verloren.\",\r\n ARE_YOU_SURE_YOU_WANT_TO_PROCEED:\r\n \"Bist du sicher, dass du fortfahren möchtest?\",\r\n FAILED_TO_RETRIEVE_DATA:\r\n \"Daten konnten nicht vom Server abgerufen werden\",\r\n FAILED_TO_RETRIEVE_DATA_FOR_SELECTION:\r\n \"Daten für die Auswahl konnten nicht abgerufen werden\",\r\n },\r\n },\r\n NAVBAR: {\r\n HELLO: \"Hallo\",\r\n MY_DETAILS: \"Meine Details\",\r\n MY_CONTACT_METHODS: \"Meine Kontaktmethoden\",\r\n MY_DATA_CONSENTS: \"Meine Datenzustimmungen\",\r\n MY_DOCUMENTS: \"Meine Dokumente\",\r\n LOGOUT: \"Abmelden\",\r\n SELECT_LANGUAGE: \"Sprache wählen\",\r\n MENU: \"Menü\",\r\n CLOSE: \"Schließen\",\r\n SETTINGS: \"Einstellungen\",\r\n TERMSANDCONDITIONS: \"Geschäftsbedingungen\",\r\n LANGUAGE: {\r\n ENLABEL: \"Englisch\",\r\n CHLABEL: \"Chinesisch\",\r\n ESLABEL: \"Spanisch\",\r\n JALABEL: \"Japanisch\",\r\n DELABEL: \"Deutsch\",\r\n FRLABEL: \"Französisch\",\r\n },\r\n MENU_ITEM: {\r\n CURRENT_PLACEMENT: \"Meine aktuelle Platzierung\",\r\n COMPLIANCE: \"Meine Compliance\",\r\n TIMESHEETS: \"Meine Stundenzettel\",\r\n EXPENSES: \"Meine Ausgaben\",\r\n DOCUMENTS: \"Meine Dokumente\",\r\n },\r\n },\r\n AUTH: {\r\n LOGIN: {\r\n BUTTON: {\r\n SIGN_IN: \"Anmelden\",\r\n },\r\n LABEL: {\r\n EMAIL: \"E-Mail\",\r\n PASSWORD: \"Passwort\",\r\n FORGOT_PASSWORD: \"Passwort vergessen?\",\r\n },\r\n VALIDATION: {\r\n EMAIL_INVALID: \"Ungültige E-Mail-Adresse\",\r\n EMAIL_MAX_LENGTH:\r\n \"E-Mail darf nicht länger als {{value}} Zeichen sein\",\r\n EMAIL_REQUIRED: \"E-Mail ist erforderlich\",\r\n LOGIN_FAILED: \"Die Anmeldedaten sind falsch\",\r\n PASSWORD_MAX_LENGTH:\r\n \"Passwort darf nicht länger als {{value}} Zeichen sein\",\r\n PASSWORD_MIN_LENGTH:\r\n \"Passwort muss mindestens {{value}} Zeichen lang sein\",\r\n PASSWORD_REQUIRED: \"Passwort ist erforderlich\",\r\n },\r\n },\r\n FORGOT_PASSWORD: {\r\n ENTER_YOUR_EMAIL_TO_RESET_YOUR_PASSWORD:\r\n \"Geben Sie Ihre E-Mail-Adresse ein, um Ihr Passwort zurückzusetzen\",\r\n FORGOTTEN_PASSWORD: \"Passwort vergessen?\",\r\n BUTTON: {\r\n OK_GOT_IT: \"Ok, verstanden!\",\r\n },\r\n LABEL: {\r\n EMAIL: \"E-Mail\",\r\n EMAIL_SENT_MESSAGE1:\r\n \"Wir haben eine E-Mail an die von Ihnen angegebene Adresse gesendet, um Ihr Passwort zurückzusetzen.\",\r\n EMAIL_SENT_MESSAGE2:\r\n \"Wenn Sie es nicht erhalten haben, überprüfen Sie bitte Ihren Spam-Ordner und vergewissern Sie sich, dass die eingegebene E-Mail-Adresse korrekt war.\",\r\n EMAIL_SENT_TITLE: \"Wiederherstellungs-E-Mail gesendet!\",\r\n SUCCESS: \"Ihr Konto wurde erfolgreich zurückgesetzt.\",\r\n },\r\n VALIDATION: {\r\n EMAIL_INVALID: \"Ungültige E-Mail-Adresse\",\r\n EMAIL_MAX_LENGTH:\r\n \"E-Mail darf nicht länger als {{value}} Zeichen sein\",\r\n EMAIL_REQUIRED: \"E-Mail ist erforderlich\",\r\n },\r\n },\r\n RESET_PASSWORD: {\r\n ENTER_NEW_PASSWORD_DETAILS: \"Geben Sie neue Passwortdetails ein\",\r\n RESET_PASSWORD: \"Passwort zurücksetzen\",\r\n BUTTON: {},\r\n LABEL: {\r\n CONFIRM_NEW_PASSWORD: \"Neues Passwort bestätigen\",\r\n CREATE_NEW_PASSWORD: \"Neues Passwort erstellen\",\r\n OLD_PASSWORD: \"Altes Passwort\",\r\n PASSWORD: \"Passwort\",\r\n },\r\n VALIDATION: {\r\n PASSWORDS_DONT_MATCH:\r\n \"'Passwort' und 'Passwort bestätigen' stimmen nicht überein\",\r\n PASSWORD_MAX_LENGTH:\r\n \"Passwort darf nicht länger als {{value}} Zeichen sein\",\r\n PASSWORD_MIN_LENGTH:\r\n \"Passwort muss mindestens {{value}} Zeichen lang sein\",\r\n PASSWORD_PATTERN:\r\n \"Muss Groß- und Kleinbuchstaben, eine Zahl und eines der folgenden Zeichen enthalten: -+_!@#$%^&*.,?\",\r\n PASSWORD_REQUIRED: \"Passwort ist erforderlich\",\r\n REGISTRATION_DETAILS_INCORRECT:\r\n \"Die Registrierungsdetails sind falsch\",\r\n },\r\n },\r\n },\r\n MY_CONTACT_METHODS: {\r\n MY_CONTACT_METHODS: \"Meine Kontakmethoden\",\r\n CONTACT_PREFERENCES: \"Kontaktpräferenzen\",\r\n PLEASE_SELECT_HOW_YOU_WISH_TO_BE_CONTACTED:\r\n \"Bitte wählen Sie, wie Sie kontaktiert werden möchten.\",\r\n BUTTON: {},\r\n LABEL: {\r\n RECEIVE: \"Empfangen\",\r\n DO_NOT_RECEIVE: \"Nicht empfangen\",\r\n SALES_EMAIL: \"Vertriebs-E-Mail\",\r\n EMAIL: \"E-Mail\",\r\n PHONE_CALL: \"Anruf\",\r\n TEXT_MESSAGE: \"Textnachricht\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING:\r\n \"Beim Aktualisieren der Kontaktpräferenzen ist ein Fehler aufgetreten\",\r\n },\r\n WARNING: {\r\n WARNING_MESSAGE: \"Dies wird alle E-Mails deaktivieren, einschließlich derjenigen für Stundenzettel und Ausgaben.\"\r\n }\r\n },\r\n MY_DETAILS: {\r\n MY_DETAILS: \"Meine Details\",\r\n TAB_TITLES: {\r\n CANDIDATE_INFORMATION: \"Kandidateninformation\",\r\n PREFERENCES: \"Präferenzen\",\r\n PROFILE: \"Profil\",\r\n },\r\n CANDIDATE_INFORMATION_TAB: {\r\n FIRST_NAME: \"Vorname\",\r\n LAST_NAME: \"Nachname\",\r\n MOBILE_PHONE: \"Handy\",\r\n HOME_PHONE: \"Festnetztelefon\",\r\n WORK_PHONE: \"Arbeitstelefon\",\r\n PERSONAL_EMAIL: \"Persönliche E-Mail\",\r\n WORK_EMAIL: \"Arbeits-E-Mail\",\r\n LINKEDIN: \"LinkedIn\",\r\n ADDRESSLINE1: \"Adresszeile 1\",\r\n CITY_TOWN: \"Stadt\",\r\n POSTCODE: \"Postleitzahl\",\r\n COUNTRY: \"Land\",\r\n },\r\n PREFERENCES_TAB: {\r\n AVAILABILITY: \"Verfügbarkeit\",\r\n NOTICE_PERIOD: \"Kündigungsfrist\",\r\n CURRENCY: \"Währung\",\r\n CONTRACTOR: \"Freiberufler\",\r\n TEMP: \"Zeitarbeit\",\r\n RATE_FROM: \"Tarif ab\",\r\n PAY_FREQUENCY: \"Zahlungshäufigkeit\",\r\n RATE_TO: \"Tarif bis\",\r\n PERMANENT: \"Festanstellung\",\r\n SALARY_FROM: \"Gehalt ab\",\r\n SALARY_TO: \"Gehalt bis\",\r\n CHOOSE_INTERVAL: \"Intervall wählen...\",\r\n SELECT_A_CURRENCY: \"Währung auswählen...\",\r\n PAY_FREQUENCY_PLACEHOLDER: \"Zahlungsfrequenz auswählen...\",\r\n },\r\n PROFILE_TAB: {\r\n CANDIDATE_SUMMARY: \"Kandidatenzusammenfassung\",\r\n ROLES_SOUGHT: \"Gesuchte Rollen\",\r\n CANDIDATE_SUMMARY_PLACEHOLDER:\r\n \"Bitte geben Sie eine Zusammenfassung des Kandidaten ein...\",\r\n ROLESSOUGHT_SUMMARY_PLACEHOLDER:\r\n \"Bitte geben Sie eine Zusammenfassung der gesuchten Rolle des Kandidaten ein...\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING:\r\n \"Beim Aktualisieren Ihrer Daten ist ein Fehler aufgetreten\",\r\n FIRST_NAME_VALIDATION: \"Der Vorname ist ein Pflichtfeld\",\r\n LAST_NAME_VALIDATION: \"Der Nachname ist ein Pflichtfeld\",\r\n PHONE_NUMBER_VALIDATION:\r\n \"Bitte geben Sie eine gültige Telefonnummer ein\",\r\n PHONE_NUMBER_REQUIRED: \"Mobiltelefon ist erforderlich\",\r\n EMAIL_VALIDATION: \"Bitte geben Sie eine gültige E-Mail-Adresse ein\",\r\n EMAIL_REQUIRED: \"Persönliche E-Mail ist erforderlich\",\r\n FREQUENCY_REQUIRED: \"Häufigkeit ist erforderlich\",\r\n RATE_FROM_VALIDATION:\r\n \"Bitte stellen Sie sicher, dass der 'Höchstsatz' größer oder gleich dem 'Mindestsatz' ist\",\r\n CANDIDATE_SUMMARY_VALIDATION:\r\n \"Die maximale Anzahl zulässiger Zeichen beträgt 5.000\",\r\n ROLE_SOUGHT_VALIDATION:\r\n \"Die maximale Anzahl zulässiger Zeichen beträgt 2.000\",\r\n SALARY_TO_VALIDATION:\r\n \"Bitte stellen Sie sicher, dass das 'Höchstgehalt' größer oder gleich dem 'Mindestgehalt' ist\",\r\n SALARY_REQUIRED: \"Gehalt erforderlich\",\r\n PAY_FREQUENCY_REQUIRED: \"Zahlungsfrequenz erforderlich\",\r\n SELECT_A_UNIT: \"Bitte wählen Sie eine Einheit\",\r\n RATE_SET_REQUIRED: \"Erforderlich, wenn ein Tarif festgelegt wird\",\r\n SALARY_SET_REQUIRED: \"Erforderlich, wenn ein Gehalt festgelegt wird\",\r\n NOTICE_PERIOD_VALIDATION:\r\n \"Die Kündigungsfrist darf nicht weniger als 0 sein\",\r\n },\r\n },\r\n MY_DATA_CONSENTS: {\r\n MY_DATA_CONSENTS: \"Meine Datenzustimmungen\",\r\n PLEASE_SELECT_HOW_YOU_WISH_TO_MANAGE_YOUR_DATA_CONSENTS:\r\n \"Bitte wählen Sie aus, wie Sie Ihre Datenzustimmungen verwalten möchten.\",\r\n BUTTON: {},\r\n LABEL: {\r\n CONSENT: \"Zustimmung\",\r\n WITHDRAW: \"Widerrufen\",\r\n DATA_CONSENT_PURPOSE: \"Zweck der Datenzustimmung\",\r\n CONSENT_METHOD: \"Zustimmungsmethode\",\r\n CONSENT_GIVEN: \"Zustimmung erteilt\",\r\n CONSENT_EXPIRY: \"Zustimmungsablauf\",\r\n WITHDRAW_CONSENT: \"Zustimmung widerrufen\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING:\r\n \"Beim Aktualisieren meiner Datenzustimmungen ist ein Fehler aufgetreten\",\r\n },\r\n },\r\n MY_CURRENT_PLACEMENT: {\r\n MY_CURRENT_PLACEMENTS: \"Meine aktuellen Platzierungen\",\r\n BUTTON: {},\r\n LABEL: {\r\n NO_ACTIVE_PLACEMENTS: \"Keine aktiven Platzierungen\",\r\n CLIENT: \"Kunde\",\r\n PLACEMENT_DETAILS: \"Platzierungsdetails\",\r\n DOCUMENTS: \"Dokumente\",\r\n JOB_TITLE: \"Jobtitel\",\r\n TYPE: \"Typ\",\r\n START_DATE: \"Startdatum\",\r\n END_DATE: \"Enddatum\",\r\n CANDIDATE_COMPANY: \"Kandidatenfirma\",\r\n NOTICE_FROM_US: \"Benachrichtigung von uns\",\r\n NOTICE_FROM_YOU: \"Benachrichtigung von Ihnen\",\r\n PAY: \"Bezahlung\",\r\n CLIENT_ADDRESS: \"Kundenadresse\",\r\n COMPLIANCE: \"Konformität\",\r\n STATUS: \"Status\",\r\n EVIDENCE: \"Nachweis\",\r\n REASON_FOR_REJECTION: \"Ablehnungsgrund\",\r\n VALID_FROM: \"Gültig ab\",\r\n VALID_TO: \"Gültig bis\",\r\n DESCRIPTION: \"Beschreibung\",\r\n LAST_UPDATED: \"Zuletzt aktualisiert\",\r\n DOCUMENT: \"Dokument\",\r\n PLEASE_CLICK_TO_DOWNLOAD: \"Bitte klicken Sie zum Herunterladen\",\r\n DOWNLOAD: \"Herunterladen\",\r\n NO_DOCUMENTS_FOUND: \"Keine Dokumente gefunden\",\r\n CHECKED_ON: \"Überprüft am\",\r\n CHECKED_BY: \"Überprüft von\",\r\n OUTSTANDING: \"Ausstehend\",\r\n SUBMITTED: \"Einreichung\",\r\n CHECKED: \"Überprüft\",\r\n REJECTED: \"Abgelehnt\",\r\n },\r\n VALIDATION: {\r\n FROM_DATE_IS_REQUIRED: \"Das Startdatum ist erforderlich\",\r\n TO_DATE_IS_REQUIRED: \"Das Enddatum ist erforderlich\",\r\n TO_DATE_LESS_THAN_FROM_DATE:\r\n \"Das Enddatum muss nach dem Startdatum liegen\",\r\n FROM_DATE_GREATER_THAN_TO_DATE:\r\n \"Das Startdatum darf nicht nach dem Enddatum liegen\",\r\n ERROR_SAVING: \"Fehler beim Speichern der Konformität\",\r\n TO_DATE_MUST_BE_IN_FUTURE: \"Das Enddatum muss in der Zukunft liegen\",\r\n },\r\n },\r\n FILEUPLOAD: {\r\n CHOOSEFILE: \"Datei auswählen\",\r\n UPLOADFILE: \"Datei hochladen\",\r\n REMOVEFILE: \"Datei entfernen\",\r\n PENDINGUPLOAD: \"Ausstehender Upload\",\r\n COMPLETEDUPLOAD: \"Upload abgeschlossen\",\r\n COMPLETED: \"Abgeschlossen\",\r\n VALIDATION: {\r\n INVALID_FILE: \"Ungültige Datei ausgewählt\",\r\n FILE_IS_ZERO_SIZE:\r\n \"Die Dateigröße darf nicht null sein. Bitte wählen Sie eine gültige Datei aus und versuchen Sie es erneut.\",\r\n MULTIPLE_FILES_ARE_ZERO_SIZE:\r\n \"Die Dateigrößen dürfen nicht null sein. Ungültige Dateien werden entfernt. Bitte stellen Sie sicher, dass alle ausgewählten Dateien gültig sind, und versuchen Sie es erneut.\",\r\n },\r\n },\r\n DOCUSIGN: {\r\n DOCUSIGN_TITLE: \"DocuSign\",\r\n LABEL: {\r\n COMPLETED: \"Abgeschlossen\",\r\n SENT: \"Gesendet\",\r\n DELIVERED: \"Geliefert\",\r\n VOIDED: \"Ungültig\",\r\n CREATED: \"Erstellt\",\r\n STATUS: \"Status\",\r\n ENVELOPEID: \"Umschlag-ID\",\r\n PLACEMENT: \"Platzierung\",\r\n CREATED_DATE: \"Erstellungsdatum\",\r\n NAME: \"Name\",\r\n TYPE: \"Typ\",\r\n DOCUMENTID: \"Dokumenten-ID\",\r\n SIGN_DOCUMENTS: \"Dokumente unterschreiben\",\r\n EMBEDDED_URL_CREATED: \"Eingebettete URL erstellt\",\r\n VIEW_PDF: \"PDF anzeigen\",\r\n },\r\n },\r\n },\r\n};\r\n","// France\r\nexport const locale = {\r\n lang: \"fr\",\r\n data: {\r\n COMMON: {\r\n CANCEL: \"Annuler\",\r\n CLOSE: \"Fermer\",\r\n SUBMIT: \"Soumettre\",\r\n NO: \"Non\",\r\n YES: \"Oui\",\r\n YES_CLOSE_AND_LOSE_CHANGES: \"Oui, fermer et perdre les modifications\",\r\n DISCARD_AND_CLOSE: \"Jeter et fermer\",\r\n SAVE_AND_CLOSE: \"Enregistrer et fermer\",\r\n SEARCH: \"Rechercher...\",\r\n SHOWING_PAGE: \"Affichage de la page\",\r\n OF: \"de\",\r\n RESULTS_PER_PAGE: \"Résultats par page\",\r\n VALIDATION: {\r\n SOMETHING_WENT_WRONG:\r\n \"Oups, quelque chose a mal tourné ! Veuillez réessayer.\",\r\n SUCCESSFULLY_UPDATED: \"Mis à jour avec succès\",\r\n ANY_CHANGES_MADE_WILL_BE_LOST:\r\n \"Toute modification apportée sera perdue.\",\r\n ARE_YOU_SURE_YOU_WANT_TO_PROCEED:\r\n \"Êtes-vous sûr de vouloir continuer ?\",\r\n FAILED_TO_RETRIEVE_DATA:\r\n \"Impossible de récupérer les données du serveur\",\r\n FAILED_TO_RETRIEVE_DATA_FOR_SELECTION:\r\n \"Impossible de récupérer les données pour la sélection\",\r\n },\r\n },\r\n NAVBAR: {\r\n HELLO: \"Bonjour\",\r\n MY_DETAILS: \"Mes informations\",\r\n MY_CONTACT_METHODS: \"Mes méthodes de contact\",\r\n MY_DATA_CONSENTS: \"Mes consentements de données\",\r\n MY_DOCUMENTS: \"Mes documents\",\r\n LOGOUT: \"Déconnexion\",\r\n SELECT_LANGUAGE: \"Choisir la langue\",\r\n MENU: \"Menu\",\r\n CLOSE: \"Fermer\",\r\n SETTINGS: \"Paramètres\",\r\n TERMSANDCONDITIONS: \"Termes et conditions\",\r\n LANGUAGE: {\r\n ENLABEL: \"Anglais\",\r\n CHLABEL: \"Chinois\",\r\n ESLABEL: \"Espagnol\",\r\n JALABEL: \"Japonais\",\r\n DELABEL: \"Allemand\",\r\n FRLABEL: \"Français\",\r\n },\r\n MENU_ITEM: {\r\n CURRENT_PLACEMENT: \"Mon poste actuel\",\r\n COMPLIANCE: \"Ma conformité\",\r\n TIMESHEETS: \"Mes feuilles de temps\",\r\n EXPENSES: \"Mes dépenses\",\r\n DOCUMENTS: \"Mes documents\",\r\n },\r\n },\r\n AUTH: {\r\n LOGIN: {\r\n BUTTON: {\r\n SIGN_IN: \"Se connecter\",\r\n },\r\n LABEL: {\r\n EMAIL: \"Email\",\r\n PASSWORD: \"Mot de passe\",\r\n FORGOT_PASSWORD: \"Mot de passe oublié ?\",\r\n },\r\n VALIDATION: {\r\n EMAIL_INVALID: \"Adresse e-mail invalide\",\r\n EMAIL_MAX_LENGTH:\r\n \"L'e-mail ne doit pas dépasser {{value}} caractères\",\r\n EMAIL_REQUIRED: \"L'e-mail est requis\",\r\n LOGIN_FAILED: \"Les détails de connexion sont incorrects\",\r\n PASSWORD_MAX_LENGTH:\r\n \"Le mot de passe ne doit pas dépasser {{value}} caractères\",\r\n PASSWORD_MIN_LENGTH:\r\n \"Le mot de passe doit comporter au moins {{value}} caractères\",\r\n PASSWORD_REQUIRED: \"Le mot de passe est requis\",\r\n },\r\n },\r\n FORGOT_PASSWORD: {\r\n ENTER_YOUR_EMAIL_TO_RESET_YOUR_PASSWORD:\r\n \"Entrez votre e-mail pour réinitialiser votre mot de passe\",\r\n FORGOTTEN_PASSWORD: \"Mot de passe oublié ?\",\r\n BUTTON: {\r\n OK_GOT_IT: \"Ok, compris !\",\r\n },\r\n LABEL: {\r\n EMAIL: \"Email\",\r\n EMAIL_SENT_MESSAGE1:\r\n \"Nous avons envoyé un e-mail à l'adresse que vous avez spécifiée pour réinitialiser votre mot de passe.\",\r\n EMAIL_SENT_MESSAGE2:\r\n \"Si vous ne l'avez pas reçu, veuillez vérifier votre dossier de spam et également vérifier que l'adresse e-mail saisie était correcte.\",\r\n EMAIL_SENT_TITLE: \"E-mail de récupération envoyé !\",\r\n SUCCESS: \"Votre compte a été réinitialisé avec succès.\",\r\n },\r\n VALIDATION: {\r\n EMAIL_INVALID: \"Adresse e-mail invalide\",\r\n EMAIL_MAX_LENGTH:\r\n \"L'e-mail ne doit pas dépasser {{value}} caractères\",\r\n EMAIL_REQUIRED: \"L'e-mail est requis\",\r\n },\r\n },\r\n RESET_PASSWORD: {\r\n ENTER_NEW_PASSWORD_DETAILS:\r\n \"Entrez les détails du nouveau mot de passe\",\r\n RESET_PASSWORD: \"Réinitialiser le mot de passe\",\r\n BUTTON: {},\r\n LABEL: {\r\n CONFIRM_NEW_PASSWORD: \"Confirmer le nouveau mot de passe\",\r\n CREATE_NEW_PASSWORD: \"Créer un nouveau mot de passe\",\r\n OLD_PASSWORD: \"Ancien mot de passe\",\r\n PASSWORD: \"Mot de passe\",\r\n },\r\n VALIDATION: {\r\n PASSWORDS_DONT_MATCH:\r\n \"'Mot de passe' et 'Confirmer le mot de passe' ne correspondent pas\",\r\n PASSWORD_MAX_LENGTH:\r\n \"Le mot de passe ne doit pas dépasser {{value}} caractères\",\r\n PASSWORD_MIN_LENGTH:\r\n \"Le mot de passe doit comporter au moins {{value}} caractères\",\r\n PASSWORD_PATTERN:\r\n \"Doit contenir des majuscules et minuscules, un chiffre et l'un des suivants : -+_!@#$%^&*.,?\",\r\n PASSWORD_REQUIRED: \"Le mot de passe est requis\",\r\n REGISTRATION_DETAILS_INCORRECT:\r\n \"Les détails de l'inscription sont incorrects\",\r\n },\r\n },\r\n },\r\n MY_CONTACT_METHODS: {\r\n MY_CONTACT_METHODS: \"Mes méthodes de contact\",\r\n CONTACT_PREFERENCES: \"Préférences de contact\",\r\n PLEASE_SELECT_HOW_YOU_WISH_TO_BE_CONTACTED:\r\n \"Veuillez sélectionner comment vous souhaitez être contacté.\",\r\n BUTTON: {},\r\n LABEL: {\r\n RECEIVE: \"Recevoir\",\r\n DO_NOT_RECEIVE: \"Ne pas recevoir\",\r\n SALES_EMAIL: \"Email de vente\",\r\n EMAIL: \"Email\",\r\n PHONE_CALL: \"Appel téléphonique\",\r\n TEXT_MESSAGE: \"Message texte\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING:\r\n \"Une erreur s'est produite lors de la mise à jour des préférences de contact\",\r\n },\r\n WARNING: {\r\n WARNING_MESSAGE: \"Cela désactivera tous les e-mails, y compris ceux pour les feuilles de temps et les dépenses.\"\r\n }\r\n },\r\n MY_DETAILS: {\r\n MY_DETAILS: \"Mes Détails\",\r\n TAB_TITLES: {\r\n CANDIDATE_INFORMATION: \"Informations sur le Candidat\",\r\n PREFERENCES: \"Préférences\",\r\n PROFILE: \"Profil\",\r\n },\r\n CANDIDATE_INFORMATION_TAB: {\r\n FIRST_NAME: \"Prénom\",\r\n LAST_NAME: \"Nom de Famille\",\r\n MOBILE_PHONE: \"Téléphone Portable\",\r\n HOME_PHONE: \"Téléphone Fixe\",\r\n WORK_PHONE: \"Téléphone de Travail\",\r\n PERSONAL_EMAIL: \"Email Personnel\",\r\n WORK_EMAIL: \"Email Professionnel\",\r\n LINKEDIN: \"LinkedIn\",\r\n ADDRESSLINE1: \"Adresse Ligne 1\",\r\n CITY_TOWN: \"Ville\",\r\n POSTCODE: \"Code Postal\",\r\n COUNTRY: \"Pays\",\r\n },\r\n PREFERENCES_TAB: {\r\n AVAILABILITY: \"Disponibilité\",\r\n NOTICE_PERIOD: \"Période de Préavis\",\r\n CURRENCY: \"Devise\",\r\n CONTRACTOR: \"Contractuel\",\r\n TEMP: \"Intérimaire\",\r\n RATE_FROM: \"Taux à Partir de\",\r\n PAY_FREQUENCY: \"Fréquence de Paiement\",\r\n RATE_TO: \"Taux Jusqu'à\",\r\n PERMANENT: \"Permanent\",\r\n SALARY_FROM: \"Salaire à Partir de\",\r\n SALARY_TO: \"Salaire Jusqu'à\",\r\n CHOOSE_INTERVAL: \"Choisir un intervalle...\",\r\n SELECT_A_CURRENCY: \"Sélectionner une monnaie...\",\r\n PAY_FREQUENCY_PLACEHOLDER: \"Sélectionner une fréquence de paiement...\",\r\n },\r\n PROFILE_TAB: {\r\n CANDIDATE_SUMMARY: \"Résumé du Candidat\",\r\n ROLES_SOUGHT: \"Rôles Recherchés\",\r\n CANDIDATE_SUMMARY_PLACEHOLDER:\r\n \"Veuillez entrer un résumé du candidat...\",\r\n ROLESSOUGHT_SUMMARY_PLACEHOLDER:\r\n \"Veuillez entrer un résumé du rôle recherché par le candidat...\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING:\r\n \"Une erreur s'est produite lors de la mise à jour de vos informations\",\r\n FIRST_NAME_VALIDATION: \"Le prénom est un champ obligatoire\",\r\n LAST_NAME_VALIDATION: \"Le nom de famille est un champ obligatoire\",\r\n PHONE_NUMBER_VALIDATION:\r\n \"Veuillez entrer un numéro de téléphone valide\",\r\n PHONE_NUMBER_REQUIRED: \"Le téléphone portable est requis\",\r\n EMAIL_VALIDATION: \"Veuillez entrer une adresse e-mail valide\",\r\n EMAIL_REQUIRED: \"L'e-mail personnel est requis\",\r\n FREQUENCY_REQUIRED: \"La fréquence est requise\",\r\n RATE_FROM_VALIDATION:\r\n \"Veuillez vous assurer que le 'Taux maximum' est supérieur ou égal au 'Taux minimum'\",\r\n CANDIDATE_SUMMARY_VALIDATION:\r\n \"Le nombre maximum de caractères autorisé est de 5 000\",\r\n ROLE_SOUGHT_VALIDATION:\r\n \"Le nombre maximum de caractères autorisé est de 2 000\",\r\n SALARY_TO_VALIDATION:\r\n \"Veuillez vous assurer que le 'Salaire maximum' est supérieur ou égal au 'Salaire minimum'\",\r\n SALARY_REQUIRED: \"Salaire requis\",\r\n PAY_FREQUENCY_REQUIRED: \"Fréquence de paiement requise\",\r\n SELECT_A_UNIT: \"Veuillez sélectionner une unité\",\r\n RATE_SET_REQUIRED: \"Requis si un taux est défini\",\r\n SALARY_SET_REQUIRED: \"Requis si un salaire est défini\",\r\n NOTICE_PERIOD_VALIDATION:\r\n \"La période de préavis ne doit pas être inférieure à 0\",\r\n },\r\n },\r\n MY_DATA_CONSENTS: {\r\n MY_DATA_CONSENTS: \"Mes Consentements de Données\",\r\n PLEASE_SELECT_HOW_YOU_WISH_TO_MANAGE_YOUR_DATA_CONSENTS:\r\n \"Veuillez sélectionner comment vous souhaitez gérer vos consentements de données.\",\r\n BUTTON: {},\r\n LABEL: {\r\n CONSENT: \"Consentement\",\r\n WITHDRAW: \"Retirer\",\r\n DATA_CONSENT_PURPOSE: \"Objet du Consentement de Données\",\r\n CONSENT_METHOD: \"Méthode de Consentement\",\r\n CONSENT_GIVEN: \"Consentement Donné\",\r\n CONSENT_EXPIRY: \"Expiration du Consentement\",\r\n WITHDRAW_CONSENT: \"Retirer le Consentement\",\r\n },\r\n VALIDATION: {\r\n ERROR_UPDATING:\r\n \"Une erreur s'est produite lors de la mise à jour de mes consentements de données\",\r\n },\r\n },\r\n MY_CURRENT_PLACEMENT: {\r\n MY_CURRENT_PLACEMENTS: \"Mes placements actuels\",\r\n BUTTON: {},\r\n LABEL: {\r\n NO_ACTIVE_PLACEMENTS: \"Aucun placement actif\",\r\n CLIENT: \"Client\",\r\n PLACEMENT_DETAILS: \"Détails du placement\",\r\n DOCUMENTS: \"Documents\",\r\n JOB_TITLE: \"Intitulé du poste\",\r\n TYPE: \"Type\",\r\n START_DATE: \"Date de début\",\r\n END_DATE: \"Date de fin\",\r\n CANDIDATE_COMPANY: \"Société du candidat\",\r\n NOTICE_FROM_US: \"Avis de notre part\",\r\n NOTICE_FROM_YOU: \"Avis de votre part\",\r\n PAY: \"Rémunération\",\r\n CLIENT_ADDRESS: \"Adresse du client\",\r\n COMPLIANCE: \"Conformité\",\r\n STATUS: \"Statut\",\r\n EVIDENCE: \"Preuve\",\r\n REASON_FOR_REJECTION: \"Raison du rejet\",\r\n VALID_FROM: \"Valide à partir de\",\r\n VALID_TO: \"Valide jusqu'à\",\r\n DESCRIPTION: \"Description\",\r\n LAST_UPDATED: \"Dernière mise à jour\",\r\n DOCUMENT: \"Document\",\r\n PLEASE_CLICK_TO_DOWNLOAD: \"Veuillez cliquer pour télécharger\",\r\n DOWNLOAD: \"Télécharger\",\r\n NO_DOCUMENTS_FOUND: \"Aucun document trouvé\",\r\n CHECKED_ON: \"Vérifié le\",\r\n CHECKED_BY: \"Vérifié par\",\r\n OUTSTANDING: \"En attente\",\r\n SUBMITTED: \"Soumis\",\r\n CHECKED: \"Vérifié\",\r\n REJECTED: \"Rejeté\",\r\n },\r\n VALIDATION: {\r\n FROM_DATE_IS_REQUIRED: \"La date de début est requise\",\r\n TO_DATE_IS_REQUIRED: \"La date de fin est requise\",\r\n TO_DATE_LESS_THAN_FROM_DATE:\r\n \"La date de fin doit être postérieure à la date de début\",\r\n FROM_DATE_GREATER_THAN_TO_DATE:\r\n \"La date de début ne peut pas être postérieure à la date de fin\",\r\n ERROR_SAVING: \"Erreur lors de l'enregistrement de la conformité\",\r\n TO_DATE_MUST_BE_IN_FUTURE:\r\n \"La date de fin doit être définie dans le futur\",\r\n },\r\n },\r\n FILEUPLOAD: {\r\n CHOOSEFILE: \"Choisir un fichier\",\r\n UPLOADFILE: \"Télécharger un fichier\",\r\n REMOVEFILE: \"Supprimer le fichier\",\r\n PENDINGUPLOAD: \"Téléchargement en attente\",\r\n COMPLETEDUPLOAD: \"Téléchargement terminé\",\r\n COMPLETED: \"Terminé\",\r\n VALIDATION: {\r\n INVALID_FILE: \"Fichier sélectionné invalide\",\r\n FILE_IS_ZERO_SIZE:\r\n \"La taille du fichier ne peut pas être nulle. Veuillez sélectionner un fichier valide et réessayer.\",\r\n MULTIPLE_FILES_ARE_ZERO_SIZE:\r\n \"Les tailles de fichiers ne peuvent pas être nulles. Les fichiers invalides seront supprimés. Veuillez vous assurer que tous les fichiers sélectionnés sont valides et réessayez.\",\r\n },\r\n },\r\n DOCUSIGN: {\r\n DOCUSIGN_TITLE: \"DocuSign\",\r\n LABEL: {\r\n COMPLETED: \"Terminé\",\r\n SENT: \"Envoyé\",\r\n DELIVERED: \"Livré\",\r\n VOIDED: \"Annulé\",\r\n CREATED: \"Créé\",\r\n STATUS: \"Statut\",\r\n ENVELOPEID: \"ID de l'enveloppe\",\r\n PLACEMENT: \"Placement\",\r\n CREATED_DATE: \"Date de création\",\r\n NAME: \"Nom\",\r\n TYPE: \"Type\",\r\n DOCUMENTID: \"Identifiant du document\",\r\n SIGN_DOCUMENTS: \"Signer des documents\",\r\n EMBEDDED_URL_CREATED: \"URL intégrée créée\",\r\n VIEW_PDF: \"Voir le PDF\"\r\n },\r\n },\r\n },\r\n};\r\n","// Localization is based on '@ngx-translate/core';\r\n// Please be familiar with official documentations first => https://github.com/ngx-translate/core\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\nexport interface Locale {\r\n lang: string;\r\n data: any;\r\n}\r\n\r\nconst LOCALIZATION_LOCAL_STORAGE_KEY = 'language';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class TranslationService {\r\n // Private properties\r\n private langIds: any = [];\r\n\r\n constructor(private translate: TranslateService) {\r\n // add new langIds to the list\r\n this.translate.addLangs(['en']);\r\n\r\n // this language will be used as a fallback when a translation isn't found in the current language\r\n this.translate.setDefaultLang('en');\r\n }\r\n\r\n loadTranslations(...args: Locale[]): void {\r\n const locales = [...args];\r\n\r\n locales.forEach((locale) => {\r\n // use setTranslation() with the third argument set to true\r\n // to append translations instead of replacing them\r\n this.translate.setTranslation(locale.lang, locale.data, true);\r\n\r\n this.langIds.push(locale.lang);\r\n });\r\n\r\n // add new languages to the list\r\n this.translate.addLangs(this.langIds);\r\n }\r\n\r\n setLanguage(lang) {\r\n if (lang) {\r\n this.translate.use(this.translate.getDefaultLang());\r\n this.translate.use(lang);\r\n localStorage.setItem(LOCALIZATION_LOCAL_STORAGE_KEY, lang);\r\n }\r\n }\r\n\r\n /**\r\n * Returns selected language\r\n */\r\n getSelectedLanguage(): any {\r\n return (\r\n localStorage.getItem(LOCALIZATION_LOCAL_STORAGE_KEY) ||\r\n this.translate.getDefaultLang()\r\n );\r\n }\r\n}\r\n","import { ElementRef, Injectable } from '@angular/core';\r\nimport { animate, AnimationBuilder, style } from '@angular/animations';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SplashScreenService {\r\n // Private properties\r\n private el: ElementRef;\r\n private stopped: boolean;\r\n\r\n /**\r\n * Service constructor\r\n *\r\n * @param animationBuilder: AnimationBuilder\r\n */\r\n constructor(private animationBuilder: AnimationBuilder) {}\r\n\r\n /**\r\n * Init\r\n *\r\n * @param element: ElementRef\r\n */\r\n init(element: ElementRef) {\r\n this.el = element;\r\n }\r\n\r\n /**\r\n * Hide\r\n */\r\n hide() {\r\n if (this.stopped || !this.el) {\r\n return;\r\n }\r\n\r\n const player = this.animationBuilder\r\n .build([style({ opacity: '1' }), animate(800, style({ opacity: '0' }))])\r\n .create(this.el.nativeElement);\r\n\r\n player.onDone(() => {\r\n if (typeof this.el.nativeElement.remove === 'function') {\r\n this.el.nativeElement.remove();\r\n } else {\r\n this.el.nativeElement.style.display = 'none !important';\r\n }\r\n this.stopped = true;\r\n });\r\n\r\n setTimeout(() => player.play(), 100);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ChangeDetectionStrategy,\r\n OnDestroy,\r\n OnInit,\r\n HostListener,\r\n NgZone,\r\n} from '@angular/core';\r\nimport { Router, NavigationEnd } from '@angular/router';\r\nimport { Subject, takeUntil, } from 'rxjs';\r\nimport { TranslationService } from './modules/i18n/translation.service';\r\n// language list\r\nimport { locale as enLang } from './modules/i18n/vocabs/en';\r\nimport { locale as chLang } from './modules/i18n/vocabs/ch';\r\nimport { locale as esLang } from './modules/i18n/vocabs/es';\r\nimport { locale as jpLang } from './modules/i18n/vocabs/jp';\r\nimport { locale as deLang } from './modules/i18n/vocabs/de';\r\nimport { locale as frLang } from './modules/i18n/vocabs/fr';\r\n\r\nimport { SplashScreenService } from './_mx/partials/layout/splash-screen/splash-screen.service';\r\nimport { TableExtendedService } from './_metronic/shared/crud-table';\r\nimport { ScreenService } from './_mx/services/screen/screen.service';\r\nimport { ThemeService } from './_primeng/services/theme/theme.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { StorageKeyConstants } from './_primeng/constants/storage-key.constants';\r\n\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AppComponent implements OnInit, OnDestroy {\r\n private destroy$ = new Subject();\r\n\r\n constructor(\r\n private translationService: TranslationService,\r\n private splashScreenService: SplashScreenService,\r\n private router: Router,\r\n private tableService: TableExtendedService,\r\n private themeService: ThemeService,\r\n private screenService: ScreenService,\r\n public translateService: TranslateService,\r\n private ngZone: NgZone\r\n ) {\r\n // register translations\r\n this.translationService.loadTranslations(\r\n enLang,\r\n chLang,\r\n esLang,\r\n jpLang,\r\n deLang,\r\n frLang\r\n );\r\n }\r\n\r\n // * === === === === === === === === === === === === === ===\r\n // * LIFE CYCLE\r\n // * === === === === === === === === === === === === === ===\r\n\r\n ngOnInit() {\r\n\r\n this.ngZone.runOutsideAngular(() => {\r\n window.addEventListener('resize', this.onResize.bind(this));\r\n });\r\n\r\n const id = new URLSearchParams(window.location.search).get('id');\r\n if (id != null) {\r\n sessionStorage.setItem(\"id\", id);\r\n }\r\n\r\n this.router.events.pipe(\r\n takeUntil(this.destroy$)\r\n ).subscribe(event => {\r\n if (event instanceof NavigationEnd) {\r\n // clear filtration paginations and others\r\n this.tableService.setDefaults();\r\n // hide splash screen\r\n this.splashScreenService.hide();\r\n\r\n // scroll to top on every route change\r\n window.scrollTo(0, 0);\r\n\r\n // to display back the body content\r\n setTimeout(() => {\r\n document.body.classList.add('page-loaded');\r\n }, 500);\r\n }\r\n });\r\n\r\n\r\n this.translateService.setDefaultLang('en');\r\n const browserLang = this.translateService.getBrowserLang();\r\n\r\n const localLanguagePreference = localStorage.getItem(StorageKeyConstants.SelectedLanguage);\r\n\r\n if (localLanguagePreference) {\r\n this.translateService.use(localLanguagePreference);\r\n }\r\n else {\r\n this.translateService.use(this.translateService.langs.find(x => x == browserLang) ? browserLang! : 'en');\r\n }\r\n\r\n const localThemePreference = localStorage.getItem(StorageKeyConstants.SelectedTheme);\r\n if (localThemePreference) {\r\n this.themeService.switchTheme(localThemePreference);\r\n }\r\n\r\n this.themeService.loadTheme();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n\r\n window.removeEventListener('resize', this.onResize.bind(this));\r\n }\r\n\r\n private onResize(): void {\r\n this.screenService.resize();\r\n }\r\n\r\n}\r\n","\r\n\r\n\r\n ","import { Injectable } from \"@angular/core\";\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { IAppConfig } from '../models/appconfig.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AppConfigService {\r\n constructor(private http: HttpClient) {\r\n }\r\n \r\n private appConfig: IAppConfig;\r\n\r\n load() {\r\n return this.http.get('assets/_mx/config/config.json')\r\n .toPromise()\r\n .then(response =>{\r\n this.appConfig = response;\r\n sessionStorage.setItem(\"config\", JSON.stringify(this.appConfig));\r\n });\r\n\r\n }\r\n\r\n getConfig() {\r\n if (this.appConfig == null)\r\n this.appConfig = JSON.parse(sessionStorage.getItem(\"config\"));\r\n\r\n return this.appConfig;\r\n }\r\n}","export class HttpHeaderConstants {\r\n public static readonly Device = 'Device';\r\n}","import {\r\n HttpErrorResponse,\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest,\r\n} from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { catchError, EMPTY, Observable, throwError } from \"rxjs\";\r\nimport { environment } from \"src/environments/environment\";\r\nimport { AppConfigService } from \"../_primeng/services/appconfig.service\";\r\nimport { HttpHeaderConstants } from \"../constants/http-header.constants\";\r\nimport { Router } from \"@angular/router\";\r\n\r\ntype AuthModel = {\r\n id: string;\r\n token: string;\r\n};\r\n\r\n@Injectable()\r\nexport class AuthInterceptor implements HttpInterceptor {\r\n constructor(\r\n private readonly router: Router,\r\n private readonly configService: AppConfigService\r\n ) {}\r\n\r\n private authSessionStorageToken = `${environment.appVersion}-${environment.USERDATA_KEY}`;\r\n\r\n intercept(\r\n req: HttpRequest,\r\n next: HttpHandler\r\n ): Observable> {\r\n const authToken: AuthModel = JSON.parse(\r\n sessionStorage.getItem(this.authSessionStorageToken)\r\n );\r\n\r\n const config = this.configService.getConfig();\r\n this.router.navigate;\r\n\r\n const device = navigator.userAgent;\r\n\r\n let cloneReq = req;\r\n\r\n if (authToken && (config?.apiUrl || req.url.startsWith(config?.apiUrl))) {\r\n cloneReq = req.clone({\r\n headers: req.headers\r\n .set(\"Authorization\", `Bearer ${authToken.token}`)\r\n .append(HttpHeaderConstants.Device, device),\r\n });\r\n } else if (authToken) {\r\n cloneReq = req.clone({\r\n headers: req.headers.set(\"Authorization\", `Bearer ${authToken.token}`),\r\n });\r\n } else if (config?.apiUrl || req.url.startsWith(config?.apiUrl)) {\r\n cloneReq = req.clone({\r\n headers: req.headers.append(HttpHeaderConstants.Device, device),\r\n });\r\n }\r\n\r\n return next.handle(cloneReq).pipe(\r\n catchError((error: HttpErrorResponse) => {\r\n if (error.status === 401 && this.router.url !== \"/auth/login\") {\r\n sessionStorage.removeItem(this.authSessionStorageToken);\r\n this.router.navigate([\"/auth/login\"]).then(() => {\r\n window.location.reload();\r\n });\r\n return EMPTY;\r\n }\r\n return throwError(() => error);\r\n })\r\n );\r\n }\r\n}\r\n","import {\r\n NgModule,\r\n APP_INITIALIZER,\r\n CUSTOM_ELEMENTS_SCHEMA,\r\n} from \"@angular/core\";\r\nimport { BrowserModule } from \"@angular/platform-browser\";\r\nimport { BrowserAnimationsModule } from \"@angular/platform-browser/animations\";\r\nimport { HTTP_INTERCEPTORS, HttpClientModule } from \"@angular/common/http\";\r\nimport { ClipboardModule } from \"ngx-clipboard\";\r\nimport { TranslateModule } from \"@ngx-translate/core\";\r\nimport { InlineSVGModule } from \"ng-inline-svg-2\";\r\nimport { NgbModule } from \"@ng-bootstrap/ng-bootstrap\";\r\nimport { AppRoutingModule } from \"./app-routing.module\";\r\nimport { AppComponent } from \"./app.component\";\r\nimport { ReactiveFormsModule, FormsModule } from \"@angular/forms\";\r\n// Highlight JS\r\nimport { HighlightModule, HIGHLIGHT_OPTIONS } from \"ngx-highlightjs\";\r\nimport { AppConfigService } from \"./_mx/services/appconfig.service\";\r\nimport { DateHelperService } from \"./_mx/services/helpers/date-helper/date-helper.service\";\r\nimport { TimesheetHelperService } from \"./_mx/services/helpers/timesheet-helper/timesheet-helper.service\";\r\nimport { DatePipe, registerLocaleData } from \"@angular/common\";\r\nimport { PrimeNgModule } from \"./modules/primeng/primeng.module\";\r\nimport { AuthService } from \"./_primeng/modules/auth/services/auth/auth.service\";\r\nimport { AuthHTTPService } from \"./_primeng/modules/auth/services/auth/auth-http.service\";\r\nimport { DialogService } from \"primeng/dynamicdialog\";\r\nimport { ConfirmationService } from \"primeng/api\";\r\nimport { SharedModule } from \"./_primeng/modules/shared/shared.module\";\r\nimport localeDe from '@angular/common/locales/de';\r\nimport localeFr from '@angular/common/locales/fr';\r\nimport localeZh from '@angular/common/locales/zh';\r\nimport localeJa from '@angular/common/locales/ja';\r\nimport localeEs from '@angular/common/locales/es';\r\nimport { AuthInterceptor } from \"./interceptors/auth.interceptor\";\r\nimport { ConfigService } from \"./_primeng/services/config/config.service\";\r\n\r\nfunction appInitializer(authService: AuthService) {\r\n return () => authService.getUserByToken();\r\n}\r\n\r\nconst configInitializer = (configService: AppConfigService) => {\r\n return () => {\r\n return configService.load();\r\n };\r\n};\r\n\r\nconst initializeApp = (\r\n configService: ConfigService\r\n) => {\r\n return async () => {\r\n await configService.load();\r\n };\r\n};\r\n\r\n// Register locales globally\r\nregisterLocaleData(localeDe);\r\nregisterLocaleData(localeFr);\r\nregisterLocaleData(localeZh);\r\nregisterLocaleData(localeJa);\r\nregisterLocaleData(localeEs);\r\n\r\n@NgModule({\r\n declarations: [AppComponent],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n imports: [\r\n PrimeNgModule,\r\n SharedModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n BrowserModule,\r\n BrowserAnimationsModule,\r\n TranslateModule.forRoot({}),\r\n HttpClientModule,\r\n HighlightModule,\r\n ClipboardModule,\r\n AppRoutingModule,\r\n InlineSVGModule.forRoot(),\r\n NgbModule,\r\n ],\r\n exports: [PrimeNgModule],\r\n providers: [\r\n DialogService,\r\n ConfirmationService,\r\n AuthHTTPService,\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: appInitializer,\r\n multi: true,\r\n deps: [AuthService],\r\n },\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: configInitializer,\r\n multi: true,\r\n deps: [AppConfigService],\r\n },\r\n {\r\n provide: HIGHLIGHT_OPTIONS,\r\n useValue: {\r\n coreLibraryLoader: () => import(\"highlight.js/lib/core\"),\r\n languages: {\r\n xml: () => import(\"highlight.js/lib/languages/xml\"),\r\n typescript: () => import(\"highlight.js/lib/languages/typescript\"),\r\n scss: () => import(\"highlight.js/lib/languages/scss\"),\r\n json: () => import(\"highlight.js/lib/languages/json\"),\r\n },\r\n },\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: AuthInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: initializeApp,\r\n deps: [ConfigService],\r\n multi: true,\r\n },\r\n DateHelperService,\r\n TimesheetHelperService,\r\n DatePipe,\r\n ],\r\n bootstrap: [AppComponent],\r\n})\r\nexport class AppModule {}\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule)\r\n .catch(err => console.error(err));\r\n"],"x_google_ignoreList":[]}