@seniorsistemas/platform-components 5.3.1 → 5.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/seniorsistemas-platform-components.umd.js +65 -36
- package/bundles/seniorsistemas-platform-components.umd.js.map +1 -1
- package/bundles/seniorsistemas-platform-components.umd.min.js +1 -1
- package/bundles/seniorsistemas-platform-components.umd.min.js.map +1 -1
- package/esm2015/modules/advanced-filter/components/advanced-filter/advanced-filter.component.js +12 -4
- package/esm2015/modules/advanced-filter/components/form-filter/form-filter.component.js +52 -34
- package/esm2015/modules/advanced-filter/services/constants.js +2 -1
- package/esm5/modules/advanced-filter/components/advanced-filter/advanced-filter.component.js +13 -4
- package/esm5/modules/advanced-filter/components/form-filter/form-filter.component.js +53 -34
- package/esm5/modules/advanced-filter/services/constants.js +2 -1
- package/fesm2015/seniorsistemas-platform-components.js +63 -36
- package/fesm2015/seniorsistemas-platform-components.js.map +1 -1
- package/fesm5/seniorsistemas-platform-components.js +65 -36
- package/fesm5/seniorsistemas-platform-components.js.map +1 -1
- package/modules/advanced-filter/components/advanced-filter/advanced-filter.component.d.ts +4 -1
- package/modules/advanced-filter/components/form-filter/form-filter.component.d.ts +5 -1
- package/modules/advanced-filter/services/constants.d.ts +1 -0
- package/package.json +1 -1
- package/seniorsistemas-platform-components.metadata.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","ng://@seniorsistemas/platform-components/modules/advanced-filter/pipes/map-values.pipe.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/pipes/translate.pipe.ts","ng://@seniorsistemas/platform-components/modules/translations/translations.module.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/models/filter-type.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/models/scope.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/locale/fallback.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/services/advanced-filter.service.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/services/constants.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/models/filter.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/models/form-filter.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/models/tab-view.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/filter-id/index.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/filter-value/index.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/filterOperators.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/index.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/form-field/index.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/comparator.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/services/calendar-options.service.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/components/form-filter/form-filter.component.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/json-path.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/shared/constants.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/components/advanced-filter/advanced-filter.component.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/advanced-filter.module.ts","ng://@seniorsistemas/platform-components/modules/cyclic-json-interceptor/cyclic-json-interceptor.service.ts","ng://@seniorsistemas/platform-components/modules/cyclic-json-interceptor/cyclic-json-interceptor.module.ts","ng://@seniorsistemas/platform-components/modules/http-interceptor/rest-url.service.ts","ng://@seniorsistemas/platform-components/modules/http-interceptor/x-services-url.service.ts","ng://@seniorsistemas/platform-components/modules/http-interceptor/http-interceptor.service.ts","ng://@seniorsistemas/platform-components/modules/http-interceptor/http-interceptor.module.ts","ng://@seniorsistemas/platform-components/modules/permissions/permissions.config.ts","ng://@seniorsistemas/platform-components/modules/permissions/permissions.service.ts","ng://@seniorsistemas/platform-components/modules/permissions/permissions.module.ts","ng://@seniorsistemas/platform-components/modules/feature-toggle/constants/endpoint.constant.ts","ng://@seniorsistemas/platform-components/modules/spotlight/models/user-action.enum.ts","ng://@seniorsistemas/platform-components/modules/feature-toggle/feature-toggle.service.ts","ng://@seniorsistemas/platform-components/modules/feature-toggle/feature-toggle.module.ts","ng://@seniorsistemas/platform-components/modules/spotlight/models/display-type.enum.ts","ng://@seniorsistemas/platform-components/modules/spotlight/service/spotlight.service.ts","ng://@seniorsistemas/platform-components/modules/spotlight/models/spotlight-control.interface.ts","ng://@seniorsistemas/platform-components/modules/spotlight/models/spotlight-status.enum.ts","ng://@seniorsistemas/platform-components/modules/spotlight/component/spotlight.component.ts","ng://@seniorsistemas/platform-components/modules/spotlight/locale/fallback.ts","ng://@seniorsistemas/platform-components/modules/spotlight/pipes/translate.pipe.ts","ng://@seniorsistemas/platform-components/modules/spotlight/spotlight.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__assign","assign","t","s","i","n","arguments","length","prototype","call","apply","this","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","decorator","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__read","o","m","ar","error","__spread","concat","MapValuesPipe","transform","map","args","from","values","Pipe","name","pure","TranslatePipe","translationService","instant","TranslateService","TranslationsConfig","InjectionToken","TranslationsModule","forRoot","translationsConfigs","ngModule","TranslationsModule_1","providers","provide","APP_INITIALIZER","useFactory","factory","deps","Injector","HttpClient","CookieService","multi","useValue","forChild","NgModule","imports","HttpClientModule","TranslateModule","translate","injector","http","cookieService","_this","get","LOCATION_INITIALIZED","locale","array","configs","reduce","item","isArray","userData","JSON","parse","data","keys","user","getUserData","_a","getLocale","console","warn","fallback","defaultsLanguages","setTranslation","setDefaultLang","configTranslate_1","languages","language","replace","find","results","split","getConfigTranslate","translationsPromises","config","domain","service","Error","params","HttpParams","set","_b","HttpHeaders","getAuthHeader","headers","_c","_d","toPromise","res","bundleFiles","languageBundle","bundle","overriden_1","url","overriden","content","err_2","getTranslationsRequest","all","usedFallback","forEach","file","index","fallbackByLocale","setTranslations","use","err_1","FilterType","Scope","platform.filter_service.cancel","platform.filter_service.try","platform.filter_service.actions","platform.filter_service.save","platform.filter_service.filter","platform.filter_service.error_state","platform.filter_service.saved_filters_success","platform.filter_service.saved_filters_error","platform.filter_service.applied_filter_nochange","platform.filter_service.applied_filter_change","platform.filter_service.invalid_pattern","platform.filter_service.error_max_value","platform.filter_service.error_min_value","platform.filter_service.applied_filters_message","platform.filter_service.applied_filter_message","platform.filter_service.find_suggestions_error","platform.filter_service.select","platform.filter_service.filters","platform.filter_service.date_format","platform.filter_service.hour_format","platform.filter_service.clear","platform.filter_service.today","platform.filter_service.name_january","platform.filter_service.name_february","platform.filter_service.name_march","platform.filter_service.name_april","platform.filter_service.name_may","platform.filter_service.name_june","platform.filter_service.name_july","platform.filter_service.name_august","platform.filter_service.name_september","platform.filter_service.name_october","platform.filter_service.name_november","platform.filter_service.name_december","platform.filter_service.short_january","platform.filter_service.short_february","platform.filter_service.short_march","platform.filter_service.short_april","platform.filter_service.short_may","platform.filter_service.short_june","platform.filter_service.short_july","platform.filter_service.short_august","platform.filter_service.short_september","platform.filter_service.short_october","platform.filter_service.short_november","platform.filter_service.short_december","platform.filter_service.name_sunday","platform.filter_service.name_monday","platform.filter_service.name_tuesday","platform.filter_service.name_wednesday","platform.filter_service.name_thursday","platform.filter_service.name_friday","platform.filter_service.name_saturday","platform.filter_service.min_sunday","platform.filter_service.min_monday","platform.filter_service.min_tuesday","platform.filter_service.min_wednesday","platform.filter_service.min_thursday","platform.filter_service.min_friday","platform.filter_service.min_saturday","platform.filter_service.short_sunday","platform.filter_service.short_monday","platform.filter_service.short_tuesday","platform.filter_service.short_wednesday","platform.filter_service.short_thursday","platform.filter_service.short_friday","platform.filter_service.short_saturday","platform.filter_service.yes","platform.filter_service.no","platform.filter_service.search_empty_message","AdvancedFilterService","filtersObservable","Subject","contextsObservable","BehaviorSubject","ticketFilterObservable","destroy$","contextsObserver","asObservable","filtersObserver","ticketFilterObserver","subscribe","contexts","getAndApplyFilters","saveTickedFilters","filters","requestBody","ticketFilter","post","URL_PREFIX","pipe","response","ticket","window","parent","postMessage","message","payload","err","addContexts","_i","currentContexts","getValue","Observable","create","removeContexts","filteredContexts","filter","context","indexOf","saveFilters","searchFieldSuggestions","type","Content-Type","tryAgain","serviceContexts","getFilters","applyFilter","mapFilters","search","basicSearch","output","mapValues","keyFields","displayFields","entitySearch","isMultiple","valueInText","stringify","startsWith","endsWith","ex","maxSelectedItems","mapValue","ids","displays","undefined","join","Injectable","required","scope","services","enumItems","defaultValue","tabIndex","minValue","maxValue","dependsOn","mask","regExp","FormFilter","getOwnPropertySymbols","propertyIsEnumerable","__rest","_valueObserver","valueChanges","_value","TabView","fields","form","FormGroup","ContextTab","_super","activeFilters","__","constructor","__extends","getFilterId","filterName","DATETIME","exports","TIME","parsers","DATE","dateParser","parseFilterValue","parser","format","date","moment","filterOperators","contains","attr","=","!=",">","<",">=","fromJson","isNotMultiple","parsedValue","SEARCH","getSearchType","_a$1","createFormControl","validators","pattern","forms","Validators","min","max","createValidators","formValue","INTEGER","DOUBLE","MONEY","parseFormValue","FormControl","toDate","supportedTypes","STRING","BOOLEAN","ENUMERATION","operation","otherValue","<=","equals","Number","compare","operator","comparator","isValidOperator","isSupportedType","TRANSLATE_PREFIX","CalendarOptionsService","getOptions","clear","dateFormat","dayNames","dayNamesMin","dayNamesShort","firstDayOfWeek","hourFormat","monthNames","monthNamesShort","today","FormFilterComponent","filterService","messageService","calendarOptionsService","changeDetectorRef","formFilters","oldFormFilters","actualFormFilters","general","totalFiltersActive","isMobile","tabViewOrientation","errorMessages","showMessages","isModal","totalFiltersActiveOutput","EventEmitter","errorOutput","showDialogOutput","closeModalOutput","onResizeWindow","event","innerWidth","ngOnInit","subscribeContextsObservable","subscribeFiltersObservable","addEventListener","ngOnDestroy","hasChanges","currentValue","oldValue","onApplyFilters","emit","applyFilters","showToast","counterUpdate","getFiltersValues","severity","life","detail","sendMessage","clone","getDefaultValue","clearFilters","cleanFieldAndSetDefaultValue","sendCloseMessage","modalName","add","parseToUserFilters","countActiveFilters","tabs","tabView","appliedFilters","filterValue","filterId","toUserFormat","toFilterFormat","takeUntil","errorStateAction","errorState","createTabs","setDependencies","createChildArray","names","rxFilter","tap","filterControl","dep","id","formFilter","fieldValue","disable","mergeMap","val","comparation","every","IsEmpty","status","addGeneralField","controlName","fieldControl","tab","control","controls","setValue","emitEvent","newFilter","newField","createField","addControl","containsAllContexts","myContexts","allContexts","contextId","sort","field","filterConfig","DOMAIN","tabId","getTabId","has","contextLabel","updateFilterValue","contextTab","Map","controlOpts","generalFieldControl","childs","child","finalValue","onlySelf","translatedEnumItems","placeholder","TextField","FieldType","String","CurrencyField","Money","createRadioButton","createCalendar","Date","DateTime","Time","SelectField","options","Enum","NumberField","numberLocaleOptions","optionsInteger","Integer","Double","createAutocompleteField","RadioButtonField","Radio","calendar","CalendarField","calendarLocaleOptions","appendTo","suggestionsObservable","queryParam","input","resultDataJsonPath","displayFieldConcatToken","AutocompleteField","onSearch","getDependenciesValues","searchUrl","getEntitySearchUrl","jsonPath","object","path","allPaths","shift","suggestions","addSuggestionFields","detectChanges","messageError","suggestionsError","displayField","dataKey","multiple","size","lg","md","xl","emptyMessage","attributes","domainName","entityName","serviceName","obj","entityAttribute","separator","addValue","acc","token","suggestion","display","invalidValue","findIndex","$$__keyValue__","dependencies","arr","currencySymbol","decimalSeparator","thousandsSeparator","MessageService","ChangeDetectorRef","Input","Output","HostListener","Component","selector","template","AdvancedFilterComponent","router","labelButton","onlyContent","hideButtons","canOpenFilter","showActiveFiltersCountBadge","filterAndSave","subscriptions","showDialog","mobileButtonActions","command","modalComponent","sub","events","NavigationEnd","unsubscribe","totalActiveFilters","onError","close","toggleDialog","updateTotalFiltersActive","Router","ViewChild","encapsulation","ViewEncapsulation","None","AdvancedFilterModule","DialogModule","ButtonModule","PrimeNGButtonModule","TabViewModule","CommonModule","FormsModule","ReactiveFormsModule","DynamicFormModule","ToastModule","EmptyStateModule","TooltipModule","LocaleService","declarations","CyclicJsonInterceptor","intercept","req","Blob","FormData","jc","decycle","handle","HttpResponse","retrocycle","providedIn","CyclicJsonInterceptorModule","HTTP_INTERCEPTORS","useClass","RestUrl","defer","getRestUrl","XServicesUrl","getXServicesUrl","HttpInterceptor","restUrl","xServicesUrl","originalReq","includes","test","forkJoin","xUrl","authHeader","injectBaseUrl","bridgeUrl","baseUrl","authorization","request","HttpInterceptorModule","RESOURCES","ENVIRONMENT","PermissionsService","resources","environment","checkedPermissions","actionUrl","checkAccess","permissions","rec","actions","action","uri","resource","getUriByResourceName","entity","includeFilters","shouldRedirectToForbiddenPage","navigate","throwError","permission","authorized","toLowerCase","resourceFilters","resourceFilter","promise","getPermissions","catchError","summary","of","getPermissionObject","isAuthorized","resourceName","isEntity","resourceUri","permissionOfAction","perm","permRec","uriBase","permissionsDenied","resourcesToCheck","redirectToError","actionsToCheck","some","permissionDenied","getFlatEnvironment","ignorePermissions","getFlatResources","Inject","Environment","PermissionsModule","PermissionsModule_1","endpointFactoryFunction","method","endpoint","ResourceFactory","query","bind","signal","URL","update","remove","UserAction","PLATFORM_FEATURE_TOGGLE","FeatureToggleService","cache","isEnabled","tenant","tenantName","features","shareReplay","FeatureToggleModule","EnumDisplayType","SpotlightService","API_URL","getUser","listSpotlightScreen","listSpotlightUsers","listSpotlightControl","saveSpotlightUser","saveSpotlightControl","notificateSpotlight","EnumSpotlightStatus","SpotlightComponent","spotlightService","datePipe","canAppear","visible","fade","visibleChange","setValues","fetchSpotlight","currentUser","username","spotlightUsersList","spotlightControlsList","setValuesInSpotlight","header","spotlightTitle","imgUrl","bannerUrl","primaryButtonLabel","primaryButtonTooltip","primaryButtonHint","getShowDate","days","currentDate","setDate","getDate","toString","spotlightScreen","contents","screenMenuId","menuId","showSpotlight","spotlight","validateDate","initialDate","validateFinalDate","finalDate","validateSpotlight","getSpotlightControlFromList","canEmitEvent","firstUser","validateControlsList","validateDisplayType","controlsList","totalElements","ACTIVE","spotlightId","IN_PROGRESS","usersList","displayType","ADVERSITING","validateUser","INTEGRATION","NO_STARTED","REFUSED","users","spotlightUsers","userOperation","compatibleUserToValidate","showDate","spotlightUser","onPrimary","notification","buildNotification","CONFIRMED","primaryButtonUrl","open","onSecondary","POSTPONED","daysRememberLate","onTertiary","daysNotInterested","hasThisRegister","hasAnotherRegister","isNewControl","spotlightControl","userAction","clickedButton","spotlightControlId","DatePipe","platform.spotlight.no_interest","platform.spotlight.remember_late","SpotlightModule","fallback$1"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'mapValues', pure: false })\nexport class MapValuesPipe implements PipeTransform {\n transform(map: Map<any, any>, args: any[] = null): any {\n return Array.from(map.values());\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'translate',\n pure: false,\n })\n export class TranslatePipe implements PipeTransform {\n constructor(private translationService: TranslateService) {}\n transform(value: any, args?: any): any {\n return this.translationService.instant(value);\n }\n }\n","import { LOCATION_INITIALIZED } from '@angular/common';\nimport { HttpClient, HttpClientModule, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { ModuleWithProviders } from '@angular/compiler/src/core';\nimport { APP_INITIALIZER, InjectionToken, Injector, NgModule } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { user } from '@seniorsistemas/senior-platform-data';\nimport { CookieService } from 'ngx-cookie-service';\n\nexport const TranslationsConfig = new InjectionToken<ITranslationsConfig[]>('translationConfig');\nexport const USER_INFO = 'com.senior.token';\nexport const LENGTH_DEFAULT = 2;\n@NgModule({\n imports: [HttpClientModule, TranslateModule.forChild()],\n providers: [CookieService]\n})\nexport class TranslationsModule {\n static forRoot(translationsConfigs: ITranslationsConfig[]): ModuleWithProviders {\n return {\n ngModule: TranslationsModule,\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: factory,\n deps: [TranslateService, Injector, HttpClient, CookieService],\n multi: true\n },\n {\n provide: TranslationsConfig,\n useValue: translationsConfigs,\n multi: true\n }\n ]\n };\n }\n\n static forChild(translationsConfigs: ITranslationsConfig[]): ModuleWithProviders {\n return {\n ngModule: TranslationsModule,\n providers: [\n {\n provide: TranslationsConfig,\n useValue: translationsConfigs,\n multi: true\n }\n ]\n };\n }\n}\n\nexport interface ITranslationsConfig {\n domain: string;\n service: string;\n fallback: any;\n defaultsLanguages?: any;\n}\n\nexport function factory(translate: TranslateService, injector: Injector, http: HttpClient, cookieService: CookieService) {\n return () =>\n new Promise((resolve) => {\n const locationInitialized = injector.get(LOCATION_INITIALIZED, Promise.resolve(null));\n\n locationInitialized.then(async () => {\n let locale = 'pt-BR';\n try {\n const configs = getFlatArray(injector.get(TranslationsConfig, Promise.resolve(null)));\n\n try {\n let userData = JSON.parse(cookieService.get(USER_INFO));\n if (userDataIsNull(userData)) {\n userData = await user.getUserData();\n }\n\n locale = getLocale(userData);\n } catch (ex) {\n console.warn('Unable to obtain user locale');\n }\n\n const fallback = configs.reduce((result: any, configs: ITranslationsConfig) => ({ ...result, ...configs.fallback }), {});\n const defaultsLanguages = configs.reduce(\n (result: any, configs: ITranslationsConfig) => ({ ...result, ...configs.defaultsLanguages }),\n {}\n );\n\n translate.setTranslation(locale, fallback);\n translate.setDefaultLang(locale);\n\n let configTranslate: any = {};\n\n if (defaultsLanguages) {\n configTranslate = getConfigTranslate(defaultsLanguages, locale);\n }\n\n const translationsPromises = configs.map((config: any) => getTranslationsRequest(config, locale));\n\n await Promise.all(translationsPromises).then((results) => {\n const usedFallback = translate['overriden'];\n\n results.forEach((file, index) => {\n setTranslations(file['content'], usedFallback, locale, index, configTranslate.fallbackByLocale);\n });\n\n return translate.use(locale).toPromise();\n });\n\n resolve();\n } catch (err) {\n console.warn('Error setting translations. Using local fallback.', err);\n translate\n .use(locale)\n .toPromise()\n .then(() => {\n resolve();\n });\n }\n });\n });\n\n function setTranslations(content: any, usedFallback: any, locale: any, index: any, fallbackByLocale: any) {\n if (usedFallback) {\n content && translate.setTranslation(locale, content, true);\n translate.setTranslation(locale, fallbackByLocale, true);\n } else {\n if (index === 0) {\n translate.setTranslation(locale, fallbackByLocale, true);\n }\n\n content && translate.setTranslation(locale, content, true);\n }\n }\n\n function getTranslationsRequest({ domain, service }: ITranslationsConfig, language: string) {\n return new Promise(async (resolve) => {\n try {\n if (!domain && !service) {\n throw new Error(`domain and service not found`);\n }\n const params = new HttpParams().set('domainName', domain).set('serviceName', service).set('format', 'FLAT_JSON');\n\n const headers = new HttpHeaders().set('Authorization', await user.getAuthHeader());\n const url = 'platform/translation_hub/queries/getTranslationBundle';\n const bundleFiles = await http\n .get(url, { headers, params })\n .toPromise()\n .then((res: any) => res.bundleFiles);\n\n let languageBundle = language && bundleFiles.find((bundle: any) => bundle.language === language);\n let overriden = false;\n\n if (!languageBundle) {\n languageBundle = bundleFiles.find((bundle: any) => bundle.language === 'pt-BR');\n overriden = true;\n }\n\n if (!languageBundle) {\n return resolve({});\n }\n\n await http\n .get(languageBundle.url)\n .toPromise()\n .then((result: any) => {\n const translations = {\n overriden: overriden,\n content: result\n };\n resolve(translations);\n });\n } catch (err) {\n console.warn(`Error getting translation bundle for ${domain}/${service}. Using local fallback.`, err);\n resolve({});\n }\n });\n }\n\n function getFlatArray(array: any[]) {\n return array.reduce((result: any[], item: any) => {\n if (Array.isArray(item)) {\n return [...result, ...item];\n }\n return [...result, item];\n }, []);\n }\n\n function userDataIsNull(data: any) {\n return !data || Object.keys(data).length === 0;\n }\n\n function getConfigTranslate(defaultsLanguages: any, locale: any) {\n const languages: any = Object.keys(defaultsLanguages).map((key) => {\n const language = {};\n language['locale'] = key.replace('_', '-');\n language['translation'] = defaultsLanguages[key];\n return language;\n }, []);\n\n const result: any = { languages };\n result['foundLocaleUser'] = languages.find((results: any) => results.locale === locale);\n if (!result['foundLocaleUser']) {\n result['foundLocaleUser'] = languages.find((results: any) => {\n return results.locale.length === LENGTH_DEFAULT && results.locale === locale.split('-')[0];\n });\n }\n\n if (result['foundLocaleUser']) {\n result['fallbackByLocale'] = result['foundLocaleUser']['translation'];\n }\n\n return result;\n }\n\n function getLocale(userData: any) {\n return userData.locale || 'pt-BR';\n }\n}\n","export enum FilterType {\n STRING = 'STRING',\n BOOLEAN = 'BOOLEAN',\n INTEGER = 'INTEGER',\n DOUBLE = 'DOUBLE',\n DATE = 'DATE',\n DATETIME = 'DATETIME',\n TIME = 'TIME',\n MONEY = 'MONEY',\n ENUMERATION = 'ENUMERATION',\n SEARCH = 'SEARCH'\n}\n","export enum Scope {\n DOMAIN = 'DOMAIN',\n SERVICE = 'SERVICE'\n}\n","export const fallback = {\n 'platform.filter_service.cancel': 'Cancelar',\n 'platform.filter_service.try': 'Tentar Novamente',\n 'platform.filter_service.actions': 'Ações',\n 'platform.filter_service.save': 'Salvar',\n 'platform.filter_service.filter': 'Filtrar',\n 'platform.filter_service.error_state':\n 'O serviço de filtro está indisponÃvel no momento e as informações apresentadas não são as mais recentes. Tente novamente mais tarde.',\n 'platform.filter_service.saved_filters_success': 'Filtros salvos com sucesso! Clique em \"Filtrar\" para visualizar o resultado.',\n 'platform.filter_service.saved_filters_error':\n 'Ocorreu um erro ao tentar salvar os filtros. Verifique os valores e tente novamente.',\n 'platform.filter_service.applied_filter_nochange': 'Não houve alterações no filtro.',\n 'platform.filter_service.applied_filter_change': 'Filtros aplicados com sucesso!',\n 'platform.filter_service.invalid_pattern': 'O valor não atende ao padrão especificado.',\n 'platform.filter_service.error_max_value': 'O valor excede o tamanho máximo especificado.',\n 'platform.filter_service.error_min_value': 'O valor é menor que o minÃmo especificado.',\n 'platform.filter_service.applied_filters_message': '{{totalActiveFilters}} filtros aplicados',\n 'platform.filter_service.applied_filter_message': '{{totalActiveFilters}} filtro aplicado',\n 'platform.filter_service.find_suggestions_error': 'Erro ao encontrar sugestões!',\n 'platform.filter_service.select': 'Selecionar',\n 'platform.filter_service.filters': 'Filtros',\n 'platform.filter_service.date_format' : 'dd/mm/yy',\n 'platform.filter_service.hour_format' : '24',\n 'platform.filter_service.clear': 'Limpar',\n 'platform.filter_service.today' : 'Hoje',\n 'platform.filter_service.name_january' : 'Janeiro',\n 'platform.filter_service.name_february' : 'Fevereiro',\n 'platform.filter_service.name_march' : 'Março',\n 'platform.filter_service.name_april' : 'Abril',\n 'platform.filter_service.name_may' : 'Maio',\n 'platform.filter_service.name_june' : 'Junho',\n 'platform.filter_service.name_july' : 'Julho',\n 'platform.filter_service.name_august' : 'Agosto',\n 'platform.filter_service.name_september' : 'Setembro',\n 'platform.filter_service.name_october' : 'Outubro',\n 'platform.filter_service.name_november' : 'Novembro',\n 'platform.filter_service.name_december' : 'Dezembro',\n 'platform.filter_service.short_january' : 'Jan',\n 'platform.filter_service.short_february' : 'Fev',\n 'platform.filter_service.short_march' : 'Mar',\n 'platform.filter_service.short_april' : 'Abr',\n 'platform.filter_service.short_may' : 'Mai',\n 'platform.filter_service.short_june' : 'Jun',\n 'platform.filter_service.short_july' : 'Jul',\n 'platform.filter_service.short_august' : 'Ago',\n 'platform.filter_service.short_september' : 'Set',\n 'platform.filter_service.short_october' : 'Out',\n 'platform.filter_service.short_november' : 'Nov',\n 'platform.filter_service.short_december' : 'Dez',\n 'platform.filter_service.name_sunday': 'Domingo',\n 'platform.filter_service.name_monday': 'Segunda',\n 'platform.filter_service.name_tuesday': 'Terça',\n 'platform.filter_service.name_wednesday': 'Quarta',\n 'platform.filter_service.name_thursday': 'Quinta',\n 'platform.filter_service.name_friday': 'Sexta',\n 'platform.filter_service.name_saturday': 'Sábado',\n 'platform.filter_service.min_sunday': 'D',\n 'platform.filter_service.min_monday': 'S',\n 'platform.filter_service.min_tuesday': 'T',\n 'platform.filter_service.min_wednesday': 'Q',\n 'platform.filter_service.min_thursday': 'Q',\n 'platform.filter_service.min_friday': 'S',\n 'platform.filter_service.min_saturday': 'S',\n 'platform.filter_service.short_sunday': 'Dom',\n 'platform.filter_service.short_monday': 'Seg',\n 'platform.filter_service.short_tuesday': 'Ter',\n 'platform.filter_service.short_wednesday': 'Qua',\n 'platform.filter_service.short_thursday': 'Qui',\n 'platform.filter_service.short_friday': 'Sex',\n 'platform.filter_service.short_saturday': 'Sab',\n 'platform.filter_service.yes': 'Sim',\n 'platform.filter_service.no': 'Não',\n 'platform.filter_service.search_empty_message': 'Nenhum resultado encontrado'\n};\n","import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs/BehaviorSubject';\n\nimport { GET_FILTERS_URL, SAVE_FILTERS_URL, SAVE_TICKED_FILTER_URL } from './constants';\nimport { Subject, Observable } from 'rxjs';\nimport { Filter } from '../models/filter';\nimport { FilterValue } from '../models/filter-value';\nimport { Context } from '../models/context';\nimport { map } from 'rxjs/operators';\nimport { TickedFilter } from '../models/ticked-filter';\nimport { searchDisplayName, searchKeyName } from '../shared/constants';\n\nexport interface TickedFilterResponse {\n ticket: string;\n}\n\nexport interface ContextsFiltersResponse {\n filters: Filter[];\n}\n\nexport interface IGetFiltersResponse {\n error?: boolean;\n message?: HttpErrorResponse;\n filters?: Filter[];\n applyFilter?: boolean;\n}\n\nexport interface ITickerFilterResponse {\n ticketFilter?: string;\n error?: boolean;\n message?: string;\n}\n\n@Injectable()\nexport class AdvancedFilterService {\n private filtersObservable = new Subject<IGetFiltersResponse>();\n private contextsObservable = new BehaviorSubject<Context[]>([]);\n private ticketFilterObservable = new Subject<ITickerFilterResponse>();\n destroy$ = new Subject();\n public ticketFilter: string;\n public visible: boolean;\n contextsObserver = this.contextsObservable.asObservable();\n filtersObserver = this.filtersObservable.asObservable();\n ticketFilterObserver = this.ticketFilterObservable.asObservable();\n\n constructor(private http: HttpClient) {\n this.contextsObservable.subscribe(contexts => contexts.length && this.getAndApplyFilters(contexts));\n }\n\n saveTickedFilters(filters: TickedFilter[]) {\n const requestBody = this.ticketFilter ? { filters, ticketFilter: this.ticketFilter } : { filters };\n this.http\n .post<TickedFilterResponse>(SAVE_TICKED_FILTER_URL, requestBody)\n .pipe(map(response => response.ticket))\n .subscribe(\n ticketFilter => {\n this.ticketFilter = ticketFilter;\n this.ticketFilterObservable.next({ ticketFilter });\n window.parent.postMessage({ message: 'advanced-filter:success', payload: ticketFilter }, '*');\n },\n err => {\n this.ticketFilterObservable.next({ error: true, message: err });\n window.parent.postMessage({ message: 'advanced-filter:error', payload: err }, '*');\n }\n );\n }\n\n addContexts(...contexts: Context[]): Observable<Context[]> {\n const currentContexts = this.contextsObservable.getValue();\n this.contextsObservable.next([...currentContexts, ...contexts]);\n return Observable.create(() => () => this.removeContexts(contexts));\n }\n\n private removeContexts(contexts: Context[]) {\n const allContexts = this.contextsObservable.getValue();\n const filteredContexts = allContexts.filter(context => contexts.indexOf(context) === -1);\n this.contextsObservable.next(filteredContexts);\n }\n\n saveFilters(filters: FilterValue[]) {\n return this.http.post(SAVE_FILTERS_URL, { filters });\n }\n\n searchFieldSuggestions(url: string, params: any, type: any) {\n const headers = new HttpHeaders({ 'Content-Type': 'application/json; charset=utf-8' });\n if (type === 'ENTITY') {\n return this.http.get(url, { headers });\n }\n return this.http.post(url, params, { headers });\n }\n\n public tryAgain(serviceContexts: Context[]) {\n this.getFilters(serviceContexts);\n }\n\n private getAndApplyFilters(serviceContexts: Context[]) {\n this.getFilters(serviceContexts, true);\n }\n\n private getFilters(serviceContexts: Context[], applyFilter?: boolean) {\n this.http\n .post<ContextsFiltersResponse>(GET_FILTERS_URL, { serviceContexts })\n .pipe(map(response => this.mapFilters(response.filters)))\n .subscribe(\n filters => this.filtersObservable.next({ filters, applyFilter }), //\n err => this.filtersObservable.next({ error: true, message: err })\n );\n }\n\n private mapFilters(filters: Filter[]): Filter[] {\n return filters.map(filter => {\n try {\n const value = filter.value && JSON.parse(filter.value);\n\n if (value && filter.search && filter.search.basicSearch && filter.search.basicSearch.output) {\n this.mapValues(value, filter.search.basicSearch.output.keyFields, filter.search.basicSearch.output.displayFields);\n } else if (value && filter.search && filter.search.entitySearch && filter.search.entitySearch.output) {\n this.mapValues(value, filter.search.entitySearch.output.keyFields, filter.search.entitySearch.output.displayFields);\n }\n\n if (value) {\n if (this.isMultiple(filter)) {\n const valueInText = JSON.stringify(value);\n\n if ((valueInText.startsWith('[{') && valueInText.endsWith('}]')) || valueInText.length <= 4) {\n filter.value = valueInText;\n } else {\n filter.value = JSON.stringify('');\n }\n } else {\n filter.value = JSON.stringify(value);\n }\n }\n } catch (ex) {\n console.error(`Global: filter ${filter.name} has value error. `, ex);\n filter.value = JSON.stringify('');\n }\n\n return filter;\n });\n }\n\n private isMultiple(filter: Filter): boolean {\n return (\n filter.type === 'SEARCH' &&\n filter.search &&\n ((filter.search.basicSearch && filter.search.basicSearch.output && filter.search.basicSearch.output.maxSelectedItems > 1) ||\n (filter.search.entitySearch && filter.search.entitySearch.output && filter.search.entitySearch.output.maxSelectedItems > 1))\n );\n }\n\n private mapValues(value: any, keyFields: string[], displayFields: string[]) {\n if (Array.isArray(value)) {\n value.forEach(e => {\n this.mapValue(e, keyFields, displayFields);\n });\n } else {\n this.mapValue(value, keyFields, displayFields);\n }\n }\n\n private mapValue(value: any, keyFields: string[], displayFields: string[]) {\n if (!value) {\n return;\n }\n\n const ids = [] as string[];\n const displays = [] as string[];\n\n keyFields.filter(e => value[e] !== undefined).forEach(e => ids.push(value[e]));\n displayFields.filter(e => value[e] !== undefined).forEach(e => displays.push(value[e]));\n\n if (ids.length > 0 && displays.length > 0) {\n value[searchKeyName] = ids.join(', ');\n value[searchDisplayName] = displays.join(', ');\n } else {\n value = [''];\n }\n }\n}\n","const URL_PREFIX = 'platform/filter_service';\nexport const GET_FILTERS_URL = `${URL_PREFIX}/queries/getFilters`;\nexport const SAVE_FILTERS_URL = `${URL_PREFIX}/actions/saveUserFilters`;\nexport const SAVE_TICKED_FILTER_URL = `${URL_PREFIX}/actions/setTicketFilters`;\n","import { FilterType } from './filter-type';\nimport { Scope } from './scope';\nimport { EnumItem } from './enum-item';\nimport { DependsOn } from './depends-on';\nimport { Search } from './search';\n\nexport class Filter {\n constructor(\n public type: FilterType,\n public required: boolean,\n public label: string,\n public domain: string,\n public scope: Scope,\n public name: string,\n public contexts: string[],\n public services: string[],\n public value?: string,\n public enumItems?: EnumItem[],\n public defaultValue?: string,\n public search?: Search,\n public tabIndex?: number,\n public minValue?: number,\n public maxValue?: number,\n public dependsOn?: DependsOn[],\n public mask?: string,\n public regExp?: string\n ) {}\n}\n","import { DependsOn } from './depends-on';\nimport { Observable, Subject } from 'rxjs';\nimport { FormControl } from '@angular/forms';\nimport { FilterType } from './filter-type';\n\nexport interface FormFilterConfig {\n name: string;\n domain: string;\n services: string[];\n value: any;\n defaultValue: any;\n dependsOn: DependsOn[];\n isMultiple: boolean;\n}\n\nexport class FormFilter {\n private _value: any;\n private _valueObserver = new Subject<any>();\n valueChanges: Observable<any> = this._valueObserver.asObservable();\n name: string;\n domain: string;\n contexts: string[];\n services: string[];\n childs: string[];\n dependsOn: DependsOn[];\n filterControl: FormControl;\n type: FilterType;\n isMultiple: boolean;\n defaultValue: any;\n\n constructor({ value, ...config }: FormFilterConfig) {\n this._value = value;\n Object.assign(this, config);\n }\n\n set value(value: any) {\n this._value = value;\n this._valueObserver.next(value);\n }\n\n get value() {\n return this._value;\n }\n}\n","import { FormGroup } from '@angular/forms';\nimport { Field } from '@seniorsistemas/angular-components';\n\nexport class TabView {\n fields: Field[] = [];\n form: FormGroup;\n name?: string;\n\n constructor(config: any) {\n this.form = new FormGroup({});\n Object.assign(this, config);\n }\n}\nexport class ContextTab extends TabView {\n activeFilters = 0;\n domain: string;\n\n get label() {\n return `${this.name} (${this.activeFilters})`;\n }\n}\n","export const FILTER_ID_SEPARATOR = ':';\n\nexport function getFilterId(domain: string, filterName: string) {\n return `${domain}${FILTER_ID_SEPARATOR}${filterName}`;\n}\n\nexport function getTabId(domain: string, contextId: string) {\n return `${domain}${FILTER_ID_SEPARATOR}${contextId}`;\n}\n","import { FilterType } from '../../models';\nconst moment = require('moment');\n\n/**\n *@description Necessary because of https://github.com/rollup/rollup/issues/670\n *\n * */\n\nconst { DATETIME, TIME, DATE } = FilterType;\n\nconst parsers = {\n [DATE]: (value: any) => dateParser(value, 'YYYY-MM-DD'),\n [TIME]: (value: any) => dateParser(value, 'HH:mm:ss'),\n [DATETIME]: (value: any) => dateParser(value)\n};\n\nexport function parseFilterValue(value: any, type: FilterType) {\n const parser = parsers[type];\n if (value !== undefined && value !== null && value !== '') {\n return parser ? parser(value) : value;\n }\n\n return value;\n}\n\nfunction dateParser(value: string, format?: string) {\n const date = moment(value);\n return format ? date.format(format) : date.format();\n}\n","export const filterOperators = {\n 'contains': (attr: string, value: string) => `containing(${attr}, '${value}')`,\n '=': (attr: string, value: string) => `${attr} eq ${value}`,\n '!=': (attr: string, value: string) => `${attr} ne ${value}`,\n '>': (attr: string, value: string) => `${attr} gt ${value}`,\n '<': (attr: string, value: string) => `${attr} lt ${value}`,\n '>=': (attr: string, value: string) => `${attr} ge ${value}`\n};\n","import { FilterType, Search } from '../models';\nimport { searchKeyName } from '../shared/constants';\n\nexport * from './filter-id/index';\nexport * from './filter-value/index';\nexport * from './json-path';\nexport * from './filterOperators';\n\nexport function toUserFormat(value: any, type: FilterType) {\n let parsedValue;\n if (type !== FilterType.SEARCH || !Array.isArray(value)) {\n parsedValue = [(value === null || value === undefined) ? '' : value];\n } else if (Array.isArray(value)) {\n if (value.length) {\n parsedValue = value[0] === null ? [''] : value;\n } else {\n parsedValue = [''];\n }\n } else {\n parsedValue = value ? value : [''];\n }\n\n return JSON.stringify(parsedValue);\n}\n\nexport function toFilterFormat(value: any, type: FilterType) {\n let parsedValue;\n if (type !== FilterType.SEARCH) {\n parsedValue = [(value === null || value === undefined) ? '' : value];\n } else if (Array.isArray(value)) {\n /*\n Deve enviar para o backend o valor contido no keyValue em array.\n\n Exemplo:\n Quando tenho dois objetos selecionados [{1,'Base'},{2,'Other'}] deve enviar no padrão: [1,'Base'], [2,'Other']\n */\n parsedValue = [''];\n if (value !== null && value.length > 0 && value[0] !== '') {\n parsedValue = value.map(v => v[searchKeyName]);\n }\n } else {\n parsedValue = [value === null ? '' : value[searchKeyName]];\n }\n\n return JSON.stringify(parsedValue);\n}\n\nexport function fromJson(value: any, type: FilterType, isNotMultiple: boolean) {\n const parsedValue = JSON.parse(value);\n if (type !== FilterType.SEARCH || isNotMultiple) {\n return parsedValue[0];\n }\n\n return parsedValue;\n}\n\nexport function getSearchType(search: Search): any {\n return search.basicSearch ? search.basicSearch : search.entitySearch;\n}\n","const moment = require('moment');\nimport { FilterType, Filter, Search } from '../../models';\nimport { FormControl, Validators } from '@angular/forms';\nimport { getSearchType } from '..';\n\n/**\n *@description Necessary because of https://github.com/rollup/rollup/issues/670\n *\n * */\n\nconst { DATE, DATETIME, TIME } = FilterType;\n\nconst parsers = {\n [DATE]: (v: string) => dateParser(v),\n [DATETIME]: (v: string) => dateParser(v),\n [TIME]: (v: string) => dateParser(v, 'HH:mm:ss')\n};\n\nexport function parseFormValue(value: string, type: FilterType, search?: Search) {\n const parser = parsers[type];\n const parsedValue = JSON.parse(value);\n const isNotMultiple = search && getSearchType(search).output.maxSelectedItems === 1;\n\n let formValue;\n if ((type === FilterType.INTEGER || type === FilterType.DOUBLE || type === FilterType.MONEY) && parsedValue[0] === '') {\n formValue = null;\n } else if (type !== FilterType.SEARCH || isNotMultiple) {\n formValue = parsedValue[0];\n } else {\n formValue = parsedValue[0] ? parsedValue : [];\n }\n\n if (parser) {\n return parser(formValue);\n }\n\n return formValue;\n}\n\nexport function createFormControl({ minValue, maxValue, regExp, value, type, search }: Filter) {\n const validators = createValidators(minValue, maxValue, regExp);\n const formValue = parseFormValue(value, type, search);\n\n return new FormControl(formValue, { validators });\n}\n\nfunction createValidators(minValue: number, maxValue: number, regExp: string) {\n const { pattern, min, max } = Validators;\n const validators = [];\n\n regExp && validators.push(pattern(regExp));\n minValue !== undefined && validators.push(min(minValue));\n maxValue !== undefined && validators.push(max(maxValue));\n\n return validators;\n}\n\nfunction dateParser(value: string, format?: string): Date | string {\n return value !== null && value !== '' ? moment(value, format).toDate() : '';\n}\n","import { contains, equals } from 'ramda';\nimport { FilterType } from '../models';\nconst supportedTypes = [\n FilterType.STRING,\n FilterType.BOOLEAN,\n FilterType.INTEGER,\n FilterType.ENUMERATION,\n FilterType.TIME,\n FilterType.MONEY,\n FilterType.DATETIME,\n FilterType.DATE,\n FilterType.DOUBLE\n];\n\nconst operation = {\n '>': (value: number, otherValue: number) => {\n return value > otherValue;\n },\n '<': (value: number, otherValue: number) => {\n return value < otherValue;\n },\n '>=': (value: number, otherValue: number) => {\n return value >= otherValue;\n },\n '<=': (value: number, otherValue: number) => {\n return value <= otherValue;\n },\n 'contains': (value: any, otherValue: any[]) => {\n return contains(value, otherValue);\n },\n '=': (value: any, otherValue: any) => {\n if (typeof otherValue === 'number') {\n return equals(Number(value), otherValue);\n }\n return equals(value, otherValue);\n },\n '!=': (value: any, otherValue: any) => {\n if (typeof otherValue === 'number') {\n return !equals(Number(value), otherValue);\n }\n return !equals(value, otherValue);\n }\n};\n\nexport function compare(operator: string, value: any, otherValue: any) {\n const comparator = operation[operator];\n return comparator(value, otherValue);\n}\n\nexport function isValidOperator(operator: string) {\n return !!operation[operator];\n}\n\nexport function isSupportedType(type: FilterType) {\n return contains(type, supportedTypes);\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst TRANSLATE_PREFIX = 'platform.filter_service';\n\n@Injectable()\nexport class CalendarOptionsService {\n constructor(private translate: TranslateService) {\n }\n public getOptions() {\n return {\n clear: this.translate.instant(`${TRANSLATE_PREFIX}.clear`),\n dateFormat: this.translate.instant(`${TRANSLATE_PREFIX}.date_format`),\n dayNames: [\n this.translate.instant(`${TRANSLATE_PREFIX}.name_sunday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_monday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_tuesday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_wednesday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_thursday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_friday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_saturday`)\n ],\n dayNamesMin: [\n this.translate.instant(`${TRANSLATE_PREFIX}.min_sunday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.min_monday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.min_tuesday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.min_wednesday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.min_thursday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.min_friday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.min_saturday`)\n ],\n dayNamesShort: [\n this.translate.instant(`${TRANSLATE_PREFIX}.short_sunday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_monday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_tuesday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_wednesday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_thursday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_friday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_saturday`)\n ],\n firstDayOfWeek: 0,\n hourFormat: this.translate.instant(`${TRANSLATE_PREFIX}.hour_format`),\n monthNames: [\n this.translate.instant(`${TRANSLATE_PREFIX}.name_january`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_february`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_march`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_april`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_may`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_june`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_july`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_august`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_september`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_october`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_november`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_december`),\n ],\n monthNamesShort: [\n this.translate.instant(`${TRANSLATE_PREFIX}.short_january`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_february`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_march`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_april`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_may`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_june`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_july`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_august`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_september`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_october`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_november`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_december`),\n ],\n today: this.translate.instant(`${TRANSLATE_PREFIX}.today`)\n };\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { MessageService } from \"primeng/api\";\nimport { ChangeDetectorRef, Component, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { BehaviorSubject, from, Subject } from 'rxjs';\nimport { filter as rxFilter, map, mergeMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { Context, DependsOn, EntitySearchInput, EnumItem, Filter, FilterType, Scope } from '../../models';\nimport { ContextTab, TabView } from '../../models/tab-view';\nimport { AdvancedFilterService } from '../../services/advanced-filter.service';\nimport { FormFilter } from '../../models/form-filter';\nimport {\n filterOperators,\n fromJson,\n getFilterId,\n getSearchType,\n getTabId,\n jsonPath,\n parseFilterValue,\n toFilterFormat,\n toUserFormat\n} from '../../utils/index';\nimport { createFormControl } from '../../utils/form-field';\nimport { clone, equals } from 'ramda';\nimport { compare, isSupportedType, isValidOperator } from '../../utils/comparator';\n\nimport {\n AutocompleteField,\n CalendarField,\n RadioButtonField,\n CurrencyField,\n Field,\n FieldConfig,\n FieldType,\n NumberField,\n SelectField,\n TextField,\n RationButtonOption,\n CalendarFieldConfig\n} from '@seniorsistemas/angular-components';\n\nimport { searchDisplayName, searchKeyName } from '../../shared/constants';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Message } from 'primeng/api';\nimport { CalendarOptionsService } from '../../services/calendar-options.service';\n\nconst TRANSLATE_PREFIX = 'platform.filter_service';\nconst TOAST_LIFE = 5000;\n\n@Component({\n selector: 's-app-form-filter',\n templateUrl: './form-filter.component.html',\n styleUrls: ['./form-filter.component.scss']\n})\nexport class FormFilterComponent implements OnInit, OnDestroy {\n destroy$ = new Subject();\n errorState: HttpErrorResponse;\n tabs: Map<string, ContextTab>;\n contexts: Context[] = [];\n formFilters: FormFilter[] = [];\n oldFormFilters: any[] = [];\n actualFormFilters: any[] = [];\n general = new TabView({ name: 'Geral' });\n totalFiltersActive = 0;\n isMobile = false;\n tabViewOrientation = 'left';\n error = false;\n\n errorMessages = {\n min: this.translate.instant(`${TRANSLATE_PREFIX}.error_min_value`),\n max: this.translate.instant(`${TRANSLATE_PREFIX}.error_max_value`),\n pattern: this.translate.instant(`${TRANSLATE_PREFIX}.invalid_pattern`)\n };\n\n @Input() showMessages = true;\n @Input() isModal = false;\n @Output() totalFiltersActiveOutput = new EventEmitter<number>();\n @Output() errorOutput = new EventEmitter<boolean>();\n @Output() showDialogOutput = new EventEmitter<boolean>();\n @Output() closeModalOutput = new EventEmitter();\n\n constructor(\n private filterService: AdvancedFilterService,\n public translate: TranslateService,\n private messageService: MessageService,\n private calendarOptionsService: CalendarOptionsService,\n private changeDetectorRef: ChangeDetectorRef\n ) { }\n\n @HostListener('window:resize', ['$event'])\n onResizeWindow(event: any) {\n const { innerWidth } = event.target;\n this.isMobile = innerWidth <= 640;\n this.tabViewOrientation = this.isMobile ? 'top' : 'left';\n }\n\n ngOnInit() {\n this.isMobile = innerWidth <= 640;\n this.tabViewOrientation = this.isMobile ? 'top' : 'left';\n this.subscribeContextsObservable();\n this.subscribeFiltersObservable();\n\n window.addEventListener('message', event => {\n const data = event.data;\n const message = data.message && data.message.split(':')[1];\n if (message === 'addContext') {\n this.filterService.addContexts(...data.payload);\n }\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next(true);\n }\n\n hasChanges() {\n const keys = Object.keys(this.formFilters);\n const oldKeys = Object.keys(this.oldFormFilters);\n if (!oldKeys.length) {\n return true;\n }\n const filtered = keys.filter(key => {\n const currentValue = this.formFilters[key].value;\n const oldValue = this.oldFormFilters[key] && this.oldFormFilters[key].value;\n return !equals(currentValue, oldValue);\n });\n return filtered.length > 0;\n }\n\n onApplyFilters() {\n this.hasChanges() && this.closeModalOutput.emit();\n }\n\n public getFilters() {\n this.hasChanges() && this.filterService.tryAgain(this.contexts);\n }\n\n applyFilters(showToast = false) {\n if (this.hasChanges()) {\n this.showDialogOutput.emit(false);\n this.counterUpdate();\n const filters = this.getFiltersValues(this.formFilters);\n this.filterService.saveTickedFilters(filters);\n } else if (showToast) {\n const message = {\n key: 'filterServiceToastKey',\n severity: 'info',\n life: TOAST_LIFE,\n detail: this.translate.instant(`${TRANSLATE_PREFIX}.applied_filter_nochange`, { activeFilters: this.totalFiltersActive })\n };\n this.sendMessage(message);\n }\n this.oldFormFilters = clone(this.formFilters);\n }\n\n getDefaultValue(defaultValue: any, isMultiple: boolean) {\n if (defaultValue === undefined || (isMultiple && defaultValue[0] === '')) {\n return [];\n }\n\n return defaultValue;\n }\n\n clearFilters() {\n const keys = Object.keys(this.formFilters);\n keys.forEach(key => this.cleanFieldAndSetDefaultValue(key));\n }\n\n sendCloseMessage() {\n window.parent.postMessage(\n {\n message: 'dashboard:close-modal',\n payload: {\n modalName: 'advanced-filter-1'\n }\n },\n '*'\n );\n }\n\n sendMessage(message: Message) {\n if (this.showMessages) {\n this.messageService.add(message);\n } else {\n window.parent.postMessage(\n {\n message: 'dashboard:toastr',\n payload: {\n type: 'success',\n message: message.detail\n }\n },\n '*'\n );\n }\n }\n\n saveFilters() {\n const filters = this.parseToUserFilters(this.formFilters);\n const savedFilterSuccess = () => {\n const message = {\n key: 'filterServiceToastKey',\n severity: 'info',\n life: TOAST_LIFE,\n detail: this.translate.instant(`${TRANSLATE_PREFIX}.saved_filters_success`, { activeFilters: this.totalFiltersActive })\n };\n this.sendMessage(message);\n this.counterUpdate();\n };\n\n const savedFiltersError = () => {\n const message = {\n key: 'filterServiceToastKey',\n severity: 'error',\n life: TOAST_LIFE,\n detail: this.translate.instant(`${TRANSLATE_PREFIX}.saved_filters_error`, { activeFilters: this.totalFiltersActive })\n };\n this.sendMessage(message);\n };\n this.filterService\n .saveFilters(filters) //\n .subscribe(savedFilterSuccess, savedFiltersError);\n }\n\n private counterUpdate() {\n this.totalFiltersActive = this.countActiveFilters(this.tabs);\n this.totalFiltersActiveOutput.emit(this.totalFiltersActive);\n }\n\n private countActiveFilters(tabs: Map<string, ContextTab>) {\n let totalFiltersActive = 0;\n\n tabs.forEach(tabView => {\n const { value } = tabView.form;\n tabView.activeFilters = Object.keys(value).reduce((appliedFilters, key) => {\n const filterValue = value[key];\n const isArray = Array.isArray(filterValue);\n const isValidArray = isArray && filterValue.length > 0;\n\n if (isValidArray || (!isArray && filterValue)) {\n appliedFilters++;\n }\n\n return appliedFilters;\n }, 0);\n totalFiltersActive += tabView.activeFilters;\n });\n\n return totalFiltersActive;\n }\n\n private parseToUserFilters(filters: FormFilter[]) {\n const ids = Object.keys(filters);\n\n return ids.reduce((all, filterId) => {\n const { type, services, name, value, domain, contexts } = filters[filterId] as Filter;\n const filterValue = toUserFormat(value, type);\n\n const values = services.map(service => ({ name, service, value: filterValue, domain, contexts }));\n\n return [...all, ...values];\n }, []);\n }\n\n private getFiltersValues(filters: FormFilter[]) {\n const ids = Object.keys(filters);\n\n return ids.reduce((all, filterId) => {\n const { type, services, name, value, domain } = filters[filterId] as Filter;\n const filterValue = toFilterFormat(value, type);\n const values = services.map(service => ({ name, service, value: filterValue, domain }));\n\n return [...all, ...values];\n }, []);\n }\n\n private subscribeContextsObservable() {\n const { contextsObserver } = this.filterService;\n contextsObserver.pipe(takeUntil(this.destroy$)).subscribe((contexts: Context[]) => (this.contexts = contexts));\n }\n\n errorStateAction() {\n this.filterService.tryAgain(this.contexts);\n }\n\n private subscribeFiltersObservable() {\n const { filtersObserver } = this.filterService;\n\n filtersObserver\n .pipe(takeUntil(this.destroy$)) //\n .subscribe(({ filters, applyFilter, error, message }) => {\n this.errorOutput.emit(error);\n this.error = error;\n this.errorState = message;\n if (!error) {\n this.tabs = this.createTabs(filters);\n this.counterUpdate();\n this.setDependencies(this.formFilters);\n this.createChildArray();\n if (filters.length > 0 && applyFilter) {\n this.applyFilters();\n }\n }\n });\n }\n\n private setDependencies(filters: FormFilter[]) {\n const names = Object.keys(filters);\n const dependencies = from(names).pipe(\n map(key => filters[key] as FormFilter),\n rxFilter(({ dependsOn }) => dependsOn && dependsOn.length > 0),\n tap(({ dependsOn, domain, filterControl }) => {\n const invalidFilters = dependsOn\n .filter(dep => dep.required)\n .filter(dep => {\n const id = getFilterId(domain, dep.filterName);\n const formFilter = filters[id];\n const { value, type } = formFilter;\n const { comparator } = dep;\n if (comparator && isValidOperator(comparator.operator) && isSupportedType(type)) {\n const fieldValue = parseFilterValue(value, type);\n return !compare(comparator.operator, comparator.value, fieldValue);\n }\n return dep.required ? !formFilter.value : formFilter.value;\n });\n\n if (invalidFilters.length > 0) {\n filterControl.disable();\n }\n }),\n map(({ domain, dependsOn, filterControl }) => ({ domain, dependsOn, filterControl }))\n );\n\n dependencies.subscribe(({ dependsOn, domain, filterControl }) =>\n from(dependsOn)\n .pipe(\n rxFilter(dep => dep.required),\n map(({ filterName }) => getFilterId(domain, filterName)),\n map(filterId => filters[filterId] as FormFilter),\n mergeMap(formFilter => from(formFilter.valueChanges)),\n map(val => {\n const comparation = dependsOn.every(dep => {\n const filterId = getFilterId(domain, dep.filterName);\n if (this.formFilters[filterId]) {\n const type = this.formFilters[filterId].type;\n const { comparator } = dep;\n if (comparator && isValidOperator(comparator.operator) && isSupportedType(type)) {\n const value = parseFilterValue(val, type);\n return compare(comparator.operator, comparator.value, value);\n }\n return true;\n }\n });\n return !this.IsEmpty(val) && comparation ? 'enable' : 'disable';\n })\n )\n .subscribe(status => filterControl[status]())\n );\n }\n\n private addGeneralField(filter: Filter) {\n const { name, domain, type } = filter;\n const controlName = getFilterId(domain, name);\n const fieldControl = createFormControl(filter);\n\n fieldControl.valueChanges\n .pipe(\n takeUntil(this.destroy$),\n map(v => parseFilterValue(v, type)),\n tap(value => (this.formFilters[controlName].value = value))\n ) //\n .subscribe(val =>\n this.tabs.forEach(tab => {\n const control = tab.form.controls[name];\n if (control && tab.domain === domain) {\n control.setValue(val, { emitEvent: false });\n }\n })\n );\n\n const newFilter = { ...filter, ...{ name: controlName } };\n const newField = this.createField(newFilter);\n this.general.form.addControl(controlName, fieldControl);\n this.general.fields.push(newField);\n }\n\n /*\n * Verifica os contextos de cada filtro, caso todos os contextos foram informados:\n * @return true\n * Caso não tenha nenhum contexto, considera-se por padrão que é todos:\n * @return true\n */\n private containsAllContexts(myContexts: string[]) {\n if (!myContexts.length) {\n return true;\n }\n const allContexts = this.contexts.map(data => data.contextId);\n return equals(myContexts.sort(), allContexts.sort());\n }\n\n /**\n *\n * @todo Refatorar. O método possui muitas responsabilidades\n */\n private createTabs(filters: Filter[]) {\n return filters.reduce((tabs, filter) => {\n const { domain, services, name, type, scope, contexts, dependsOn, value, search, defaultValue } = filter;\n const isNotMultiple = search && getSearchType(search).output.maxSelectedItems === 1;\n const field = this.createField(filter);\n const filterId = getFilterId(domain, name);\n const filterConfig = {\n domain,\n contexts,\n services,\n name,\n dependsOn,\n value: fromJson(value, type, isNotMultiple),\n type,\n isMultiple: !isNotMultiple,\n defaultValue: fromJson(defaultValue, type, isNotMultiple)\n };\n this.formFilters[filterId] = new FormFilter(filterConfig);\n const formFilter = this.formFilters[filterId];\n if (scope === Scope.DOMAIN && this.containsAllContexts(contexts)) {\n this.addGeneralField(filter);\n }\n\n contexts.forEach(contextId => {\n const tabId = getTabId(domain, contextId);\n const fieldControl = createFormControl(filter);\n\n if (!tabs.has(tabId)) {\n const { contextLabel } = this.contexts.find(context => context.contextId === contextId);\n const tab = new ContextTab({ domain, name: contextLabel });\n tabs.set(tabId, tab);\n }\n\n fieldControl.valueChanges\n .pipe(takeUntil(this.destroy$)) //\n .subscribe((val: any) => this.updateFilterValue(tabId, name, val, domain, type));\n\n const contextTab = tabs.get(tabId);\n\n contextTab.fields.push(field);\n contextTab.form.addControl(filter.name, fieldControl);\n\n if (!formFilter.filterControl) {\n formFilter.filterControl = fieldControl;\n }\n });\n\n return tabs;\n }, new Map<string, ContextTab>());\n }\n\n private updateFilterValue(tabId: string, filterName: string, value: any, domain: string, type: FilterType) {\n const controlOpts = { emitEvent: false };\n const fieldValue = parseFilterValue(value, type);\n const filterId = getFilterId(domain, filterName);\n const generalFieldControl = this.general.form.controls[filterId];\n\n this.tabs.forEach(({ form }, key) => {\n const control = form.controls[filterName];\n\n if (tabId !== key && control) {\n control.setValue(value, controlOpts);\n }\n });\n const { childs } = this.formFilters[filterId];\n childs && childs.forEach((child: any) => this.cleanFieldAndSetDefaultValue(child.filter.key));\n generalFieldControl && generalFieldControl.setValue(value, controlOpts);\n this.formFilters[filterId].value = fieldValue;\n }\n\n private cleanFieldAndSetDefaultValue(key: string) {\n const { isMultiple, defaultValue, filterControl, type } = this.formFilters[key] as FormFilter;\n const finalValue = this.getDefaultValue(defaultValue, isMultiple);\n\n if (filterControl) {\n if (type === 'DATE' || (type === 'SEARCH' && isMultiple)) {\n filterControl.setValue(finalValue);\n }\n if (type === 'INTEGER' || type === 'DOUBLE' || type === 'MONEY') {\n finalValue === '' ? filterControl.setValue(null) : filterControl.setValue(finalValue);\n } else {\n filterControl.setValue(finalValue, { onlySelf: true });\n }\n }\n }\n\n private createChildArray() {\n const keys = Object.keys(this.formFilters);\n keys.forEach(key => {\n const { dependsOn, domain } = this.formFilters[key];\n dependsOn.forEach((field: any) => {\n const filterId = getFilterId(domain, field.filterName);\n if (this.formFilters[filterId]) {\n if (!this.formFilters[filterId].childs) {\n this.formFilters[filterId].childs = [];\n }\n this.formFilters[filterId].childs.push({ filter: { key, required: field.required } });\n }\n });\n });\n }\n\n private createField(filter: Filter): Field {\n const { name, label, enumItems, type, mask } = filter;\n const translatedEnumItems =\n enumItems && enumItems.map((item: EnumItem) => ({ label: this.translate.instant(item.label), value: item.value }));\n const field = { name, label: this.translate.instant(label), placeholder: '' };\n\n const creators = {\n [FilterType.STRING]: () => new TextField({ ...field, mask: mask ? () => mask : null, type: FieldType.String }),\n [FilterType.MONEY]: () => new CurrencyField({ ...field, type: FieldType.Money }),\n [FilterType.BOOLEAN]: () => this.createRadioButton({ ...field }),\n [FilterType.DATE]: () => this.createCalendar({ ...field, type: FieldType.Date }),\n [FilterType.DATETIME]: () => this.createCalendar({ ...field, type: FieldType.DateTime }),\n [FilterType.TIME]: () => this.createCalendar({ ...field, type: FieldType.Time }),\n [FilterType.ENUMERATION]: () =>\n new SelectField({\n ...field,\n placeholder: this.translate.instant('platform.filter_service.select'),\n options: [...translatedEnumItems] as any,\n type: FieldType.Enum\n }),\n [FilterType.INTEGER]: () =>\n new NumberField({\n ...field,\n numberLocaleOptions: this.optionsInteger(),\n mask: mask ? () => mask : null,\n type: FieldType.Integer\n }),\n [FilterType.DOUBLE]: () => new CurrencyField({ ...field, type: FieldType.Double }),\n [FilterType.SEARCH]: () => this.createAutocompleteField(field, filter)\n };\n\n return creators[type]();\n }\n\n private createRadioButton(field: FieldConfig) {\n const options = [\n { label: this.translate.instant(`${TRANSLATE_PREFIX}.yes`), value: true },\n { label: this.translate.instant(`${TRANSLATE_PREFIX}.no`), value: false }\n ] as RationButtonOption[];\n\n return new RadioButtonField({ ...field, type: FieldType.Radio, options });\n }\n\n private createCalendar(config: CalendarFieldConfig) {\n const calendar = new CalendarField(config);\n calendar.calendarLocaleOptions = this.calendarOptionsService.getOptions();\n if (!this.isModal) calendar.appendTo = 'body';\n return calendar;\n }\n\n private createAutocompleteField(field: FieldConfig, { dependsOn, search, domain, name }: Filter) {\n const suggestionsObservable = new BehaviorSubject<any[]>([]);\n const { queryParam } = getSearchType(search).input;\n const { displayFields, keyFields, resultDataJsonPath, displayFieldConcatToken, maxSelectedItems } = getSearchType(search).output;\n const filterId = getFilterId(domain, name);\n const suggestionsError = (messageError?: string) => {\n const messageDetail = messageError ? messageError : this.translate.instant(`${TRANSLATE_PREFIX}.find_suggestions_error`, { activeFilters: this.totalFiltersActive })\n const message = {\n key: 'filterServiceToastKey',\n severity: 'error',\n life: TOAST_LIFE,\n detail: messageDetail\n };\n this.sendMessage(message);\n };\n const onSearch = (val: string) => {\n const params = { [queryParam]: val };\n dependsOn && Object.assign(params, this.getDependenciesValues(dependsOn, domain));\n\n const searchUrl =\n search && search.type === 'ENTITY'\n ? this.getEntitySearchUrl(search.entitySearch.input, val, dependsOn)\n : getSearchType(search).input.url;\n\n this.filterService\n .searchFieldSuggestions(searchUrl, params, search.type)\n .pipe(\n map(response => jsonPath(response, resultDataJsonPath)),\n map((suggestions: any[]) => this.addSuggestionFields(suggestions, displayFields, keyFields, displayFieldConcatToken, filterId))\n )\n .subscribe(result => {\n suggestionsObservable.next(result);\n this.changeDetectorRef.detectChanges();\n }, (error) => {\n let messageError = undefined\n if (error && error.error.message) messageError = error.error.message\n suggestionsError(messageError)\n });\n };\n\n return new AutocompleteField({\n ...field,\n onSearch,\n appendTo: 'body',\n suggestionsObservable,\n displayField: searchDisplayName,\n dataKey: searchKeyName,\n multiple: maxSelectedItems > 1,\n size: { lg: 12, md: 12, xl: 12 },\n emptyMessage: this.translate.instant(`${TRANSLATE_PREFIX}.search_empty_message`)\n });\n }\n\n private getEntitySearchUrl(search: EntitySearchInput, value: string, dependsOn: DependsOn[]) {\n const { attributes, domainName, entityName, serviceName } = search;\n const url = `${domainName}/${serviceName}/entities/${entityName}/?filter=`;\n const filters: any = attributes.map(attr => filterOperators[attr.comparator](attr.name, value));\n\n dependsOn &&\n dependsOn.forEach(obj => {\n const filterId = getFilterId(domainName, obj.filterName);\n const fieldValue = this.formFilters[filterId].value[searchKeyName];\n filters.push(`${obj.entityAttribute} eq '${fieldValue}'`);\n });\n\n // O regex apenas seleciona as virgulas ignorando as que estiverem dentro do ()\n return url.concat(filters).replace(/[,]+(?![^(]*[)])/g, ` ${search.operator} `);\n }\n\n private addSuggestionFields(suggestions: any[], displayFields: string[], keyFields: string[], separator: string, filterId: string) {\n const addValue = (acc: string, value: any, token: string) => (acc ? `${acc}${token}${value}` : value);\n\n const result = suggestions.map(suggestion => ({\n ...suggestion,\n [searchDisplayName]: displayFields.reduce((value, display) => {\n return addValue(value, this.translate.instant(suggestion[display]), separator);\n }, ''),\n [searchKeyName]: keyFields.reduce((value, key) => addValue(value, suggestion[key], ', '), '')\n }));\n this.formFilters[filterId].invalidValue = result.length === 0;\n\n return result.filter(item => {\n const { value } = this.formFilters[filterId];\n if (Array.isArray(value)) {\n const index = value.findIndex((i: any) => i.$$__keyValue__ === item.$$__keyValue__);\n if (index === -1) {\n return item;\n }\n } else {\n return item;\n }\n });\n }\n\n private getDependenciesValues(dependencies: DependsOn[], domain: string) {\n return dependencies.reduce((params, { filterName }) => {\n const filterId = getFilterId(domain, filterName);\n if (this.formFilters[filterId]) {\n const { value, type } = this.formFilters[filterId];\n if (type === 'ENUMERATION') {\n params[filterName] = value;\n } else {\n if (Array.isArray(value)) {\n params[filterName] = value.map(arr => arr[searchKeyName]);\n } else {\n params[filterName] = value ? value[searchKeyName] : [''];\n }\n }\n this.IsEmpty(params[filterName]) && delete params[filterName];\n return params;\n }\n }, {});\n }\n\n /*\n * Verifica se o valor informado é falso, em arrays, é verificado cada item\n */\n private IsEmpty(value: any) {\n return Array.isArray(value) ? value.every(data => !data) : !value;\n }\n\n /**\n * Return format to specify for integer type field\n */\n private optionsInteger() {\n return { currencySymbol: '', decimalSeparator: '', thousandsSeparator: '' };\n }\n}\n","export function jsonPath(object: Object, path: string): any {\n path = path.replace('$.', '');\n const allPaths = path.split('.');\n const currentPath = allPaths[0];\n const value = object[currentPath];\n allPaths.shift();\n\n if (allPaths.length) {\n return jsonPath(value, allPaths.join('.'));\n }\n return value;\n}\n","export const searchDisplayName = '$$__displayValue__';\nexport const searchKeyName = '$$__keyValue__';\n","import { Component, HostListener, Input, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { FormFilterComponent } from '../form-filter/form-filter.component';\n\nconst TRANSLATE_PREFIX = 'platform.filter_service';\n\n@Component({\n selector: 's-advanced-filter',\n templateUrl: './advanced-filter.component.html',\n styleUrls: ['./advanced-filter.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class AdvancedFilterComponent implements OnInit, OnDestroy {\n @Input() labelButton = 'Filters';\n @Input() onlyContent = false;\n @Input() hideButtons = false;\n @Input() canOpenFilter = true;\n @Input() showActiveFiltersCountBadge = true;\n @Input() filterAndSave = false;\n\n subscriptions: Subscription[] = [];\n\n isMobile = false;\n tabViewOrientation = 'left';\n totalFiltersActive = 0;\n showDialog = false;\n error = false;\n\n @ViewChild(FormFilterComponent)\n modalComponent: FormFilterComponent;\n\n mobileButtonActions = [\n { id: 'save', label: this.translate.instant('save'), command: () => this.modalComponent.saveFilters() },\n { id: 'clear', label: this.translate.instant('clear'), command: () => this.modalComponent.clearFilters() }\n ];\n\n constructor(public translate: TranslateService, private router: Router) {}\n\n ngOnInit() {\n this.isMobile = innerWidth <= 640;\n this.tabViewOrientation = this.isMobile ? 'top' : 'left';\n\n const sub = this.router.events.subscribe(e => {\n if (e instanceof NavigationEnd) {\n this.modalComponent.getFilters();\n }\n });\n\n this.subscriptions.push(sub);\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(v => v.unsubscribe());\n }\n\n @HostListener('window:resize', ['$event'])\n onResizeWindow(event: any) {\n const { innerWidth } = event.target;\n this.isMobile = innerWidth <= 640;\n this.tabViewOrientation = this.isMobile ? 'top' : 'left';\n }\n\n get appliedFiltersTooltip() {\n return this.totalFiltersActive > 1\n ? this.translate.instant(`${TRANSLATE_PREFIX}.applied_filters_message`, { totalActiveFilters: this.totalFiltersActive })\n : this.translate.instant(`${TRANSLATE_PREFIX}.applied_filter_message`, { totalActiveFilters: this.totalFiltersActive });\n }\n\n onError(event: boolean) {\n this.error = event;\n }\n\n saveFilters() {\n this.modalComponent.saveFilters();\n }\n\n clearFilters() {\n this.modalComponent.clearFilters();\n }\n\n close() {\n this.modalComponent.getFilters();\n window.parent.postMessage(\n {\n message: 'dashboard:close-modal',\n payload: {\n modalName: 'advanced-filter-1'\n }\n },\n '*'\n );\n }\n\n applyFilters() {\n if (this.modalComponent.hasChanges()) {\n this.showDialog = false;\n }\n\n if (this.filterAndSave) {\n this.modalComponent.saveFilters();\n }\n\n this.modalComponent.applyFilters(true);\n }\n\n onApplyFilters() {\n if (this.filterAndSave) {\n this.modalComponent.saveFilters();\n }\n\n this.modalComponent.onApplyFilters();\n }\n\n toggleDialog() {\n this.showDialog = !this.showDialog;\n }\n\n updateTotalFiltersActive(event: number) {\n this.totalFiltersActive = event;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { ButtonModule as PrimeNGButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { TabViewModule } from 'primeng/tabview';\nimport { ToastModule } from 'primeng/toast';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { MessageService } from \"primeng/api\";\nimport { DynamicFormModule, ButtonModule, EmptyStateModule, LocaleService } from '@seniorsistemas/angular-components';\n\nimport { MapValuesPipe } from './pipes/map-values.pipe';\nimport { TranslatePipe } from './pipes/translate.pipe';\nimport { TranslationsModule } from './../translations/translations.module';\nimport { fallback } from './locale/fallback';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AdvancedFilterService } from './services/advanced-filter.service';\nimport { AdvancedFilterComponent } from './components/advanced-filter/advanced-filter.component';\nimport { FormFilterComponent } from './components/form-filter/form-filter.component';\nimport { CalendarOptionsService } from './services/calendar-options.service';\n\nexport class AppRoutingModule {}\n@NgModule({\n imports: [\n DialogModule,\n ButtonModule,\n PrimeNGButtonModule,\n TabViewModule,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n DynamicFormModule,\n ToastModule,\n EmptyStateModule,\n TooltipModule,\n TranslationsModule.forChild([{domain: 'platform', service: 'filter_service', fallback}]),\n ],\n providers: [AdvancedFilterService, LocaleService, MessageService, TranslateService, CalendarOptionsService],\n declarations: [AdvancedFilterComponent, FormFilterComponent, MapValuesPipe, TranslatePipe],\n exports: [AdvancedFilterComponent, FormFilterComponent]\n})\nexport class AdvancedFilterModule {}\n","import { Injectable } from '@angular/core';\nimport { HttpInterceptor, HttpHandler, HttpRequest, HttpEvent, HttpResponse } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nconst jc = require('json-cycle');\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CyclicJsonInterceptor implements HttpInterceptor {\n public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (req.body instanceof Blob === false && req.body instanceof FormData === false) {\n req = req.clone({ body: jc.decycle(req.body) });\n }\n return next.handle(req).pipe(\n map((event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n event = event.clone({ body: jc.retrocycle(event.body) });\n }\n return event;\n })\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { CyclicJsonInterceptor } from './cyclic-json-interceptor.service';\n\n@NgModule({\n imports: [HttpClientModule],\n providers: [{ provide: HTTP_INTERCEPTORS, useClass: CyclicJsonInterceptor, multi: true }]\n})\nexport class CyclicJsonInterceptorModule {}\n","import { service } from '@seniorsistemas/senior-platform-data';\nimport { Injectable } from '@angular/core';\nimport { Observable, defer, from } from 'rxjs';\n\n@Injectable()\nexport class RestUrl {\n get(): Observable<string> {\n return defer(() => from(service.getRestUrl()));\n }\n}\n","import { service } from '@seniorsistemas/senior-platform-data';\nimport { Injectable } from '@angular/core';\nimport { Observable, defer, from } from 'rxjs';\n\n@Injectable()\nexport class XServicesUrl {\n\n get(): Observable<string> {\n return defer(() => {\n const url = service.getXServicesUrl();\n return from(url);\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpInterceptor as AngularHttpInterceptor, HttpHandler, HttpRequest, HttpEvent } from '@angular/common/http';\nimport { user } from '@seniorsistemas/senior-platform-data';\nimport { Observable, forkJoin, defer, from } from 'rxjs';\nimport { mergeMap } from 'rxjs/operators';\n\nimport { RestUrl } from './rest-url.service';\nimport { XServicesUrl } from './x-services-url.service';\n\n@Injectable()\nexport class HttpInterceptor implements AngularHttpInterceptor {\n\n constructor(private readonly restUrl: RestUrl, private readonly xServicesUrl: XServicesUrl) {}\n\n public intercept(originalReq: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!originalReq.url.includes(`://`)) {\n const getAuthHeader = defer(() => from(user.getAuthHeader()));\n if (/^\\/?[^\\/]+\\/[^\\/]+\\/api\\/(?:latest|v\\d+)\\/.+$/g.test(originalReq.url)) {\n const getXServicesUrl = this.xServicesUrl.get();\n return forkJoin([getXServicesUrl, getAuthHeader]).pipe(\n mergeMap((values: any) => {\n const [xUrl, authHeader] = values;\n return this.injectBaseUrl(originalReq, next, xUrl, authHeader);\n })\n );\n }\n const getRestUrl = this.restUrl.get();\n return forkJoin([getRestUrl, getAuthHeader]).pipe(\n mergeMap((values: any) => {\n const [bridgeUrl, authHeader] = values;\n return this.injectBaseUrl(originalReq, next, bridgeUrl, authHeader);\n })\n );\n }\n return next.handle(originalReq);\n }\n\n private injectBaseUrl(originalReq: HttpRequest<any>, next: HttpHandler,\n baseUrl: string, authorization: string): Observable<HttpEvent<any>> {\n const request = originalReq.clone({\n url: baseUrl + originalReq.url,\n headers: originalReq.headers.set(`Authorization`, authorization)\n });\n return next.handle(request);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\n\nimport { RestUrl } from './rest-url.service';\nimport { XServicesUrl } from './x-services-url.service';\nimport { HttpInterceptor } from './http-interceptor.service';\n\n@NgModule({\n imports: [HttpClientModule],\n providers: [RestUrl, XServicesUrl, { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptor, multi: true }]\n})\nexport class HttpInterceptorModule {}\n","import { InjectionToken } from '@angular/core';\n\nexport const RESOURCES = new InjectionToken<Resources>('RESOURCES');\nexport const ENVIRONMENT = new InjectionToken<Environment>('ENVIRONMENT');\nexport type Resources = Resource[];\n\nexport interface Permission {\n resource: string;\n action: string;\n authorized: boolean;\n owner: boolean;\n resourceFilters: string[];\n}\n\nexport interface Result {\n permissions: Permission[];\n authorized: boolean;\n}\n\nexport class Resource {\n name: string;\n actions: string[];\n uri?: string;\n redirectToError ? = false;\n actionsToCheck?: string[];\n entity?: boolean;\n}\n\nexport class Environment {\n domain?: string;\n service?: string;\n ignorePermissions: boolean;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MessageService } from \"primeng/api\";\nimport { from, Observable, of, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { Environment, ENVIRONMENT, Permission, Resource, Resources, RESOURCES, Result } from './permissions.config';\n\nexport let promise: Promise<any>;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PermissionsService {\n private checkedPermissions: Permission[] = [];\n private actionUrl = 'platform/authorization/queries';\n\n constructor(\n @Inject(RESOURCES) private readonly resources: Resources,\n @Inject(ENVIRONMENT) private readonly environment: Environment,\n private readonly http: HttpClient,\n private readonly router: Router,\n private readonly messageService: MessageService,\n private readonly translate: TranslateService\n ) {}\n\n // v2\n checkAccess(resources: Resource[]): Observable<any> {\n const permissions: any[] = [];\n\n resources.forEach(rec => {\n rec.actions.forEach(action => {\n if (!rec.uri) {\n const resource = this.getUriByResourceName(rec.name, rec.entity);\n rec.uri = resource;\n }\n permissions.push({ action, resource: rec.uri });\n });\n });\n\n return this.http.post(`${this.actionUrl}/checkAccess`, { includeFilters: true, permissions }).pipe(\n map(({ permissions: checkedPermissions }: Result) => {\n this.checkedPermissions = [...this.checkedPermissions, ...checkedPermissions];\n\n const values = {};\n\n if (this.shouldRedirectToForbiddenPage(resources, checkedPermissions)) {\n this.router.navigate(['error', 403]);\n return throwError('forbidden');\n }\n\n checkedPermissions.forEach(permission => {\n const resource = resources.find(res => res.uri === permission.resource);\n const { name } = resource;\n\n values[name] = values[name] || {};\n values[name][permission.action] = permission.authorized;\n values[name][permission.action.toLowerCase()] = permission.authorized;\n\n if (permission.resourceFilters && permission.resourceFilters.length) {\n if (!values[name]['resourceFilters']) {\n values[name]['resourceFilters'] = [];\n }\n\n permission.resourceFilters.forEach((resourceFilter) => {\n values[name]['resourceFilters'].push(resourceFilter);\n });\n }\n });\n\n return values;\n })\n );\n }\n\n // v1\n get(resource: string = '') {\n if (!promise) {\n promise = this.getPermissions();\n }\n return from(promise).pipe(\n map((permissions: Permission[]) => {\n this.checkedPermissions = permissions;\n\n if (resource) {\n const resourceKey = Object.keys(permissions).find(key => key.toLowerCase() === resource.toLowerCase());\n return permissions[resourceKey];\n }\n return permissions;\n }),\n catchError((err: any) => {\n promise = undefined;\n this.messageService.add({\n severity: 'error',\n summary: this.translate.instant('permission_error_summary'),\n detail: this.translate.instant('permission_error_detail')\n });\n\n return of(this.getPermissionObject(false));\n })\n );\n }\n\n isAuthorized(resourceName: string, action: string, isEntity?: boolean): boolean {\n if (!this.checkedPermissions.length) {\n throwError('\\'Permissions\\' are not defined. You should call \\'get\\' or \\'checkAccess\\' method first.');\n }\n\n const resourceUri = this.getUriByResourceName(resourceName, isEntity);\n\n const permissionsOfResource = this.checkedPermissions.filter(perm => perm.resource === resourceUri);\n const permissionOfAction = permissionsOfResource.find(permRec => permRec.action.toLowerCase() === action.toLowerCase());\n\n return permissionOfAction && permissionOfAction.authorized;\n }\n\n private getUriByResourceName(resourceName: string, isEntity?: boolean): string {\n const { domain, service } = this.environment;\n\n if (!domain || !service) {\n throwError('You must inform domain and service name');\n }\n\n const uriBase = `res://senior.com.br/${domain}/${service}`;\n\n if (isEntity) {\n return `${uriBase}/entities/${resourceName}`;\n } else {\n return `${uriBase}/${resourceName}`;\n }\n }\n\n /**\n * Valida com base nas propriedade redirectToError e actionsToCheck\n * se a ação de um recurso deve enviar para a página de erro caso não tenha autorização\n */\n private shouldRedirectToForbiddenPage(resources: Resource[] = [], permissions: Permission[]): boolean {\n const permissionsDenied = permissions.filter(perm => !perm.authorized);\n\n if (permissionsDenied && permissionsDenied.length) {\n const resourcesToCheck = resources.filter(resource => resource.redirectToError);\n\n if (resourcesToCheck && resourcesToCheck.length) {\n return resourcesToCheck.every(resource => {\n const actionsToCheck = resource.actionsToCheck && resource.actionsToCheck.length ? resource.actionsToCheck : resource.actions;\n\n return actionsToCheck.every(action =>\n permissionsDenied.some(permissionDenied => permissionDenied.resource === resource.uri && permissionDenied.action === action)\n );\n });\n }\n\n return false;\n }\n\n return false;\n }\n\n private getFlatEnvironment() {\n return this.environment.ignorePermissions;\n }\n\n private getFlatResources() {\n return this.resources.reduce((result: Resource[], item: any) => {\n if (!item) {\n return result;\n }\n\n if (Array.isArray(item)) {\n return [...result, ...item];\n }\n\n return [...result, item];\n }, []);\n }\n\n private getPermissionObject(defaultValue: boolean) {\n return this.getFlatResources().reduce((resources: object, resource: Resource) => {\n resources[resource.name] = resource.actions.reduce((actions: any, action: any) => {\n actions[action] = defaultValue;\n actions[action.toLowerCase()] = defaultValue;\n return actions;\n }, {});\n return resources;\n }, {});\n }\n\n private async getPermissions() {\n if (this.getFlatEnvironment()) {\n return this.getPermissionObject(true);\n }\n const resources = this.getFlatResources();\n const perm = resources\n .map(resource => resource.actions.map((action: any) => ({ action: action, resource: resource.uri })))\n .reduce((acc: any, val: any) => [...acc, ...val]);\n\n const permissions: any[] = await this.http\n .post<any>(`${this.actionUrl}/checkAccess`, {\n includeFilters: false,\n permissions: perm\n })\n .toPromise()\n .then(response => response.permissions);\n\n const values = {};\n\n permissions.forEach((permission: any) => {\n const resource = resources.find((res: any) => res.uri === permission.resource);\n const { name } = resource;\n values[name] = values[name] ? values[name] : {};\n values[name][permission.action] = permission.authorized;\n values[name][permission.action.toLowerCase()] = permission.authorized;\n });\n return values;\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { Resource, RESOURCES, ENVIRONMENT, Environment } from './permissions.config';\nimport { PermissionsService } from './permissions.service';\n\n@NgModule()\nexport class PermissionsModule {\n public static forRoot(resources: Resource[], environment: Environment): ModuleWithProviders<PermissionsModule> {\n return {\n ngModule: PermissionsModule,\n providers: [\n PermissionsService,\n {\n provide: RESOURCES,\n multi: true,\n useValue: resources\n },\n {\n provide: ENVIRONMENT,\n multi: false,\n useValue: environment\n }\n ]\n };\n }\n\n public static forChild(resources: Resource[]): ModuleWithProviders<PermissionsModule> {\n return {\n ngModule: PermissionsModule,\n providers: [\n {\n provide: RESOURCES,\n multi: true,\n useValue: resources\n }\n ]\n };\n }\n}\n","export function ResourceFactory({ domain, service, resource }: { domain: string; service: string; resource: string }) {\n return `res://senior.com.br/${domain}/${service}/${resource}`;\n}\nfunction endpointFactoryFunction(domain: string, service: string) {\n // The @seniorsistemas/platform-components http interceptor is handling the base url portion of the final URL\n const create = (method: string, endpoint: string) => `${domain}/${service}/${method}/${endpoint}`;\n const resource = (resource: string) => ResourceFactory({ domain, service, resource });\n return {\n resource,\n query: create.bind(null, 'queries'),\n action: create.bind(null, 'actions'),\n signal: create.bind(null, 'signals'),\n entity(entity: string) {\n const URL = create('entities', entity);\n return {\n create: () => URL,\n update: (id: string) => URL + '/' + id,\n remove: (id: string) => URL + '/' + id\n };\n }\n };\n}\n\nexport const endpointFactory = endpointFactoryFunction;\n// ADD HERE YOUR NEW ENDPOINT\nexport const PLATFORM_FEATURE_TOGGLE = endpointFactoryFunction('platform', 'feature_toggle');\n","export enum UserAction {\n CONFIRMED = 'CONFIRMED',\n POSTPONED = 'POSTPONED',\n REFUSED = 'REFUSED'\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, from, of } from 'rxjs';\nimport { Feature, GetEnabledFeaturesOutput } from './models/feature';\nimport { map, shareReplay, catchError, mergeMap } from 'rxjs/operators';\nimport { user } from '@seniorsistemas/senior-platform-data';\nimport { PLATFORM_FEATURE_TOGGLE } from './constants/endpoint.constant';\n\n@Injectable({ providedIn: 'root' })\nexport class FeatureToggleService {\n constructor(private http: HttpClient) {}\n\n cache: { [key: string]: Observable<Feature[]> } = {};\n\n isEnabled({ domain, service, name }: Feature, tenant?: string): Observable<boolean> {\n let tenantObs;\n if (tenant) {\n tenantObs = of(tenant);\n } else {\n tenantObs = from(user.getUserData()).pipe(map(userData => userData.tenantName));\n }\n return tenantObs.pipe(\n mergeMap(tenant => {\n const key = JSON.stringify({ tenant, domain, service });\n if (!this.cache[key]) {\n this.cache[key] = this.http\n .post<GetEnabledFeaturesOutput>(PLATFORM_FEATURE_TOGGLE.query('getEnabledFeatures'), { tenant, domain, service })\n .pipe(\n map(output => output.features),\n shareReplay(1),\n catchError(err => {\n console.error(err);\n delete this.cache[key];\n return of([]);\n })\n );\n }\n return this.cache[key];\n }),\n map((features: Feature[]) => {\n return features.findIndex(f => f.name === name) !== -1;\n })\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FeatureToggleService } from './feature-toggle.service';\nimport { HttpInterceptorModule } from '../http-interceptor/http-interceptor.module';\n\n@NgModule({\n imports: [HttpClientModule, HttpInterceptorModule],\n providers: [FeatureToggleService]\n})\nexport class FeatureToggleModule {}\n","export enum EnumDisplayType {\n ADVERSITING = 'ADVERSITING',\n INTEGRATION = 'INTEGRATION'\n}\n","import { SpotlightNotification } from './../models/spotlight-notification.interface';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n SpotlightScreenList,\n SpotlightUsersList,\n SpotlightControlList,\n SpotlightUser,\n SpotlightControl\n} from '../models/index';\n\n@Injectable()\nexport class SpotlightService {\n constructor(private http: HttpClient) {}\n\n private API_URL = 'platform/spotlight/';\n\n public getUser(): Promise<any> {\n return this.http.post<any>('platform/user/queries/getUser', {}).toPromise();\n }\n\n public listSpotlightScreen(): Observable<SpotlightScreenList> {\n return this.http.get<SpotlightScreenList>(this.API_URL + 'queries/listSpotlightScreen');\n }\n\n public listSpotlightUsers(): Promise<SpotlightUsersList> {\n return this.http.get<SpotlightUsersList>(this.API_URL + 'queries/listSpotlightUsers').toPromise();\n }\n\n public listSpotlightControl(): Promise<SpotlightControlList> {\n return this.http.get<SpotlightControlList>(this.API_URL + 'queries/listSpotlightControl').toPromise();\n }\n\n public saveSpotlightUser(content: SpotlightUser) {\n return this.http.post<SpotlightUser>(this.API_URL + 'actions/saveSpotlightUsers', { content });\n }\n\n public saveSpotlightControl(content: SpotlightControl) {\n return this.http.post<SpotlightControl>(this.API_URL + 'actions/saveSpotlightControl', { content });\n }\n\n public notificateSpotlight(content: SpotlightNotification) {\n return this.http.post<SpotlightNotification>(this.API_URL + 'actions/notificateSpotlight', content);\n }\n}\n","import { EnumSpotlightStatus } from './spotlight-status.enum';\n\nexport class SpotlightControl {\n id?: string;\n spotlightId: string;\n status: EnumSpotlightStatus;\n firstUser?: string;\n createdBy?: string;\n createdDate?: string;\n lastModifiedBy?: string;\n lastModifiedDate?: string;\n}","export enum EnumSpotlightStatus {\n ACTIVE = 'ACTIVE',\n IN_PROGRESS = 'IN_PROGRESS',\n NO_STARTED = 'NO_STARTED',\n REFUSED = 'REFUSED'\n}\n","import { UserAction } from './../models/user-action.enum';\nimport { SpotlightNotification } from './../models/spotlight-notification.interface';\nimport {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { SpotlightService } from '../service/spotlight.service';\nimport {\n Spotlight,\n SpotlightScreen,\n EnumDisplayType,\n EnumSpotlightStatus,\n SpotlightControlList,\n SpotlightUsersList,\n SpotlightUser,\n SpotlightControl\n} from '../models/index';\nimport { DatePipe } from '@angular/common';\nimport { CookieService } from 'ngx-cookie-service';\n\n@Component({\n selector: 's-spotlight',\n templateUrl: './spotlight.component.html',\n styleUrls: ['./spotlight.component.scss']\n})\nexport class SpotlightComponent implements OnInit {\n\n constructor(\n private spotlightService: SpotlightService,\n private cookieService: CookieService,\n private datePipe: DatePipe\n ) {}\n\n public header: string;\n public imgUrl: string;\n public primaryButtonLabel: string;\n public primaryButtonTooltip: string;\n public canAppear = false;\n\n private currentUser: string;\n private spotlightUsersList: SpotlightUsersList;\n private spotlightControlsList: SpotlightControlList;\n private spotlightScreen: SpotlightScreen;\n private canEmitEvent: boolean;\n\n @Input()\n public visible = false;\n\n @Input()\n public menuId: string;\n\n @Input()\n public fade = false;\n\n @Output()\n public visibleChange = new EventEmitter<boolean>();\n\n async ngOnInit() {\n await this.setValues();\n this.fetchSpotlight();\n }\n\n private async setValues() {\n const userData: any = JSON.parse(this.cookieService.get('com.senior.token'));\n this.currentUser = userData.username;\n this.spotlightUsersList = await this.spotlightService.listSpotlightUsers();\n this.spotlightControlsList = await this.spotlightService.listSpotlightControl();\n }\n\n private setValuesInSpotlight(values: Spotlight): void {\n this.header = values.spotlightTitle;\n this.imgUrl = values.bannerUrl;\n this.primaryButtonLabel = values.primaryButtonLabel;\n this.primaryButtonTooltip = values.primaryButtonHint;\n }\n\n private getShowDate(days: number): string {\n const currentDate = new Date();\n return this.datePipe.transform(currentDate.setDate(currentDate.getDate() + days).toString(), 'yyyy-MM-dd');\n }\n\n private fetchSpotlight(): void {\n this.spotlightService.listSpotlightScreen().subscribe(value => {\n this.spotlightScreen = value.contents.filter(val => val.screenMenuId === this.menuId)[0];\n if (this.spotlightScreen) {\n this.showSpotlight(this.spotlightScreen.spotlight);\n }\n });\n }\n\n private showSpotlight(spotlight: Spotlight): void {\n if (this.validateDate(spotlight.initialDate) && this.validateFinalDate(spotlight.finalDate) && this.validateSpotlight(spotlight)) {\n this.setValuesInSpotlight(spotlight);\n this.canAppear = true;\n const control = this.getSpotlightControlFromList(this.spotlightScreen.spotlight.id);\n this.canEmitEvent = !control || this.currentUser !== control.firstUser;\n }\n }\n\n private validateDate(date: string): boolean {\n if (date) {\n const currentDate = this.datePipe.transform(new Date().toString(), 'yyyy-MM-dd');\n const initialDate = this.datePipe.transform(date, 'yyyy-MM-dd');\n\n return currentDate >= initialDate;\n }\n return false;\n }\n\n private validateFinalDate(date: string): boolean {\n if (date) {\n const currentDate = this.datePipe.transform(new Date().toString(), 'yyyy-MM-dd');\n const finalDate = this.datePipe.transform(date, 'yyyy-MM-dd');\n\n return currentDate <= finalDate;\n }\n return true;\n }\n\n private validateSpotlight(spotlight: Spotlight): boolean {\n if (!this.validateControlsList(this.spotlightControlsList, spotlight, this.currentUser)) {\n return false;\n }\n if (!this.validateDisplayType(spotlight, this.spotlightUsersList, this.spotlightControlsList, this.currentUser)) {\n return false;\n }\n return true;\n }\n\n private validateControlsList(controlsList: SpotlightControlList, spotlight: Spotlight, currentUser: string): boolean {\n if (controlsList.totalElements) {\n\n const notCompatibleControls = controlsList.contents.filter(control => {\n if (control.status === EnumSpotlightStatus.ACTIVE) {\n return control.spotlightId === spotlight.id;\n\n } else if (control.status === EnumSpotlightStatus.IN_PROGRESS) {\n return control.spotlightId === spotlight.id && control.firstUser !== currentUser;\n }\n });\n\n if (notCompatibleControls.length > 0) {\n return false;\n }\n }\n return true;\n }\n\n private validateDisplayType(\n spotlight: Spotlight,\n usersList: SpotlightUsersList,\n controlsList: SpotlightControlList,\n currentUser: string\n ): boolean {\n\n switch (spotlight.displayType) {\n case EnumDisplayType.ADVERSITING:\n return usersList.totalElements ? this.validateUser(usersList.contents, spotlight) : true;\n\n case EnumDisplayType.INTEGRATION:\n\n if (controlsList.totalElements) {\n const compatibleControls = controlsList.contents.filter(control => {\n\n switch (control.status) {\n\n case EnumSpotlightStatus.NO_STARTED:\n return control.spotlightId === spotlight.id;\n\n case EnumSpotlightStatus.REFUSED:\n return usersList.totalElements ? this.validateUser(usersList.contents, spotlight) : true;\n\n case EnumSpotlightStatus.IN_PROGRESS:\n return control.firstUser === currentUser\n && control.spotlightId === spotlight.id;\n }\n });\n if (compatibleControls.length === 0) {\n return false;\n }\n }\n return true;\n }\n }\n\n private validateUser(users: SpotlightUser[], spotlight: Spotlight): boolean {\n let spotlightUsers = users.filter(user => user.spotlightId === spotlight.id);\n\n if (!spotlightUsers.length) {\n spotlightUsers = users.filter(user => user.userOperation === this.currentUser);\n\n return spotlightUsers.length === 0;\n }\n\n const compatibleUserToValidate = spotlightUsers.filter(user => user.userOperation === this.currentUser)[0];\n\n return compatibleUserToValidate ? this.validateDate(compatibleUserToValidate.showDate) : true;\n }\n\n private saveSpotlightUser(days?: number): void {\n\n const spotlight = this.spotlightScreen.spotlight;\n\n const user = this.spotlightUsersList.contents.filter(val => {\n return val.spotlightId === spotlight.id\n && val.userOperation === this.currentUser;\n })[0];\n\n let spotlightUser: SpotlightUser = {\n spotlightId: spotlight.id,\n showDate: days ? this.getShowDate(days) : null,\n userOperation: this.currentUser\n };\n\n if (user) {\n spotlightUser = {\n id: user.id,\n ...spotlightUser\n };\n }\n this.spotlightService.saveSpotlightUser(spotlightUser).subscribe();\n }\n\n public onPrimary() {\n const spotlight = this.spotlightScreen.spotlight;\n const notification = this.buildNotification(UserAction.CONFIRMED);\n\n this.saveSpotlightControl();\n this.saveSpotlightUser();\n\n if (this.canEmitEvent) {\n this.spotlightService.notificateSpotlight(notification).subscribe();\n }\n\n if (spotlight.primaryButtonUrl) {\n window.open(spotlight.primaryButtonUrl);\n }\n\n this.close();\n }\n\n public onSecondary(): void {\n const notification = this.buildNotification(UserAction.POSTPONED);\n\n this.saveSpotlightControl(EnumSpotlightStatus.REFUSED);\n this.saveSpotlightUser(this.spotlightScreen.spotlight.daysRememberLate);\n this.spotlightService.notificateSpotlight(notification).subscribe();\n\n this.close();\n }\n\n public onTertiary(): void {\n const notification = this.buildNotification(UserAction.REFUSED);\n\n this.saveSpotlightControl(EnumSpotlightStatus.REFUSED);\n this.saveSpotlightUser(this.spotlightScreen.spotlight.daysNotInterested);\n this.spotlightService.notificateSpotlight(notification).subscribe();\n\n this.close();\n }\n\n /**\n * Verifica se um registro de usuário pertence ao usuário logado e corresponde ao spotlight atual\n * @param user SpotlightUser Objeto representando o registro do usuário para uma spotlight\n * @param spotlight Spotlight Spotlight\n * @returns boolean true se corresponder ao spotlight atual, false caso contrário\n */\n private hasThisRegister(user: SpotlightUser, spotlight: Spotlight): boolean {\n return (user.spotlightId === spotlight.id && user.userOperation === this.currentUser);\n }\n\n /**\n * Verifica se um registro de usuário pertece ao usuário logado, mas não corresponde ao spotlight atual\n * @param user SpotlightUser Objeto representando o registro do usuário para uma spotlight\n * @param spotlight Spotlight Spotlight\n * @returns boolean true se corresponder ao spotlight atual, false caso contrário\n */\n private hasAnotherRegister(user: SpotlightUser, spotlight: Spotlight): boolean {\n return user.spotlightId !== spotlight.id && user.userOperation === this.currentUser;\n }\n\n /**\n * Persiste um novo registro de controle para o spotlight atual se\n * não for encontrado nenhum na lista de controles carregada inicialmente\n * @param status EnumSpotlightStatus Status do controle do spotlight. Se nenhum for informado, IN_PROGRESS será aplicado\n * @returns SpotlightControl Controle do spotlight recuperado/pesistido\n */\n private saveSpotlightControl(status = EnumSpotlightStatus.IN_PROGRESS): SpotlightControl {\n const spotlight = this.spotlightScreen.spotlight;\n let control: SpotlightControl = this.getSpotlightControlFromList(spotlight.id);\n\n if (!control) {\n control = {\n spotlightId: spotlight.id,\n status: status,\n firstUser: this.currentUser\n };\n }\n\n if (this.isNewControl(control) || control.status !== EnumSpotlightStatus.IN_PROGRESS) {\n control.status = status;\n control.firstUser = status === EnumSpotlightStatus.IN_PROGRESS ? this.currentUser : '';\n this.spotlightService.saveSpotlightControl(control).subscribe();\n }\n\n return control;\n }\n\n /**\n * Retorna o controle de spotlight correspondente ao identificador\n * informado na lista de controles carregada na inicialização do componente\n * @param id string Identificador do controle de spotlight\n */\n private getSpotlightControlFromList(id: string): SpotlightControl {\n return this.spotlightControlsList.contents.filter(val => val.spotlightId === id)[0];\n }\n\n /**\n * Verifica se o controle de spotlight informado não foi registrado ainda\n * @param spotlightControl SpotlightControl Controle do spotlight\n * @returns boolean true se ainda não foi registrado na base, false caso contrário\n */\n private isNewControl(spotlightControl: SpotlightControl): boolean {\n return !this.spotlightControlsList.contents.includes(spotlightControl);\n }\n\n /**\n * Retorna um objeto de notificação referente ao botão clicado pelo usuário.\n * @param userAction UserAction Ação realizada pelo usuário ao clicar nos botões da modal\n * @returns SpotlightNotification Objeto de notificação\n */\n private buildNotification(userAction: UserAction): SpotlightNotification {\n const spotlight = this.spotlightScreen.spotlight;\n\n return {\n clickedButton: userAction,\n spotlightControlId: spotlight.id,\n primaryButtonUrl: spotlight.primaryButtonUrl\n };\n }\n\n public close(): void {\n this.visibleChange.emit(false);\n }\n}\n","export const fallback: any = {\n\n 'platform.spotlight.no_interest' : 'Não tenho interesse',\n 'platform.spotlight.remember_late' : 'Lembrar mais tarde'\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'translate',\n pure: false,\n })\n export class TranslatePipe implements PipeTransform {\n constructor(private translationService: TranslateService) {}\n transform(value: any): any {\n return this.translationService.instant(value);\n }\n }\n","import { NgModule } from '@angular/core';\nimport { CommonModule, DatePipe } from '@angular/common';\n\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { HttpInterceptorModule } from '../http-interceptor/http-interceptor.module';\nimport { TranslationsModule } from '../translations/translations.module';\nimport { SpotlightComponent } from './component/spotlight.component';\nimport { SpotlightService } from './service/spotlight.service';\nimport { fallback } from './locale/fallback';\nimport { TranslatePipe } from './pipes/translate.pipe';\nimport { CookieService } from 'ngx-cookie-service';\n\n@NgModule({\n imports: [\n ButtonModule,\n TooltipModule,\n CommonModule,\n HttpInterceptorModule,\n TranslationsModule.forChild([{domain: 'platform', service: 'spotlight', fallback}]),\n ],\n providers: [\n SpotlightService,\n DatePipe,\n CookieService\n ],\n declarations: [\n SpotlightComponent,\n TranslatePipe],\n exports: [SpotlightComponent]\n})\nexport class SpotlightModule {}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","ng://@seniorsistemas/platform-components/modules/advanced-filter/pipes/map-values.pipe.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/pipes/translate.pipe.ts","ng://@seniorsistemas/platform-components/modules/translations/translations.module.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/models/filter-type.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/models/scope.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/locale/fallback.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/services/advanced-filter.service.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/services/constants.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/models/filter.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/models/form-filter.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/models/tab-view.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/filter-id/index.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/filter-value/index.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/filterOperators.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/index.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/form-field/index.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/comparator.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/services/calendar-options.service.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/components/form-filter/form-filter.component.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/utils/json-path.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/shared/constants.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/components/advanced-filter/advanced-filter.component.ts","ng://@seniorsistemas/platform-components/modules/advanced-filter/advanced-filter.module.ts","ng://@seniorsistemas/platform-components/modules/cyclic-json-interceptor/cyclic-json-interceptor.service.ts","ng://@seniorsistemas/platform-components/modules/cyclic-json-interceptor/cyclic-json-interceptor.module.ts","ng://@seniorsistemas/platform-components/modules/http-interceptor/rest-url.service.ts","ng://@seniorsistemas/platform-components/modules/http-interceptor/x-services-url.service.ts","ng://@seniorsistemas/platform-components/modules/http-interceptor/http-interceptor.service.ts","ng://@seniorsistemas/platform-components/modules/http-interceptor/http-interceptor.module.ts","ng://@seniorsistemas/platform-components/modules/permissions/permissions.config.ts","ng://@seniorsistemas/platform-components/modules/permissions/permissions.service.ts","ng://@seniorsistemas/platform-components/modules/permissions/permissions.module.ts","ng://@seniorsistemas/platform-components/modules/feature-toggle/constants/endpoint.constant.ts","ng://@seniorsistemas/platform-components/modules/spotlight/models/user-action.enum.ts","ng://@seniorsistemas/platform-components/modules/feature-toggle/feature-toggle.service.ts","ng://@seniorsistemas/platform-components/modules/feature-toggle/feature-toggle.module.ts","ng://@seniorsistemas/platform-components/modules/spotlight/models/display-type.enum.ts","ng://@seniorsistemas/platform-components/modules/spotlight/service/spotlight.service.ts","ng://@seniorsistemas/platform-components/modules/spotlight/models/spotlight-control.interface.ts","ng://@seniorsistemas/platform-components/modules/spotlight/models/spotlight-status.enum.ts","ng://@seniorsistemas/platform-components/modules/spotlight/component/spotlight.component.ts","ng://@seniorsistemas/platform-components/modules/spotlight/locale/fallback.ts","ng://@seniorsistemas/platform-components/modules/spotlight/pipes/translate.pipe.ts","ng://@seniorsistemas/platform-components/modules/spotlight/spotlight.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__assign","assign","t","s","i","n","arguments","length","prototype","call","apply","this","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","decorator","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__read","o","m","ar","error","__spread","concat","MapValuesPipe","transform","map","args","from","values","Pipe","name","pure","TranslatePipe","translationService","instant","TranslateService","TranslationsConfig","InjectionToken","TranslationsModule","forRoot","translationsConfigs","ngModule","TranslationsModule_1","providers","provide","APP_INITIALIZER","useFactory","factory","deps","Injector","HttpClient","CookieService","multi","useValue","forChild","NgModule","imports","HttpClientModule","TranslateModule","translate","injector","http","cookieService","_this","get","LOCATION_INITIALIZED","locale","array","configs","reduce","item","isArray","userData","JSON","parse","data","keys","user","getUserData","_a","getLocale","console","warn","fallback","defaultsLanguages","setTranslation","setDefaultLang","configTranslate_1","languages","language","replace","find","results","split","getConfigTranslate","translationsPromises","config","domain","service","Error","params","HttpParams","set","_b","HttpHeaders","getAuthHeader","headers","_c","_d","toPromise","res","bundleFiles","languageBundle","bundle","overriden_1","url","overriden","content","err_2","getTranslationsRequest","all","usedFallback","forEach","file","index","fallbackByLocale","setTranslations","use","err_1","FilterType","Scope","platform.filter_service.cancel","platform.filter_service.try","platform.filter_service.actions","platform.filter_service.save","platform.filter_service.filter","platform.filter_service.error_state","platform.filter_service.saved_filters_success","platform.filter_service.saved_filters_error","platform.filter_service.applied_filter_nochange","platform.filter_service.applied_filter_change","platform.filter_service.invalid_pattern","platform.filter_service.error_max_value","platform.filter_service.error_min_value","platform.filter_service.applied_filters_message","platform.filter_service.applied_filter_message","platform.filter_service.find_suggestions_error","platform.filter_service.select","platform.filter_service.filters","platform.filter_service.date_format","platform.filter_service.hour_format","platform.filter_service.clear","platform.filter_service.today","platform.filter_service.name_january","platform.filter_service.name_february","platform.filter_service.name_march","platform.filter_service.name_april","platform.filter_service.name_may","platform.filter_service.name_june","platform.filter_service.name_july","platform.filter_service.name_august","platform.filter_service.name_september","platform.filter_service.name_october","platform.filter_service.name_november","platform.filter_service.name_december","platform.filter_service.short_january","platform.filter_service.short_february","platform.filter_service.short_march","platform.filter_service.short_april","platform.filter_service.short_may","platform.filter_service.short_june","platform.filter_service.short_july","platform.filter_service.short_august","platform.filter_service.short_september","platform.filter_service.short_october","platform.filter_service.short_november","platform.filter_service.short_december","platform.filter_service.name_sunday","platform.filter_service.name_monday","platform.filter_service.name_tuesday","platform.filter_service.name_wednesday","platform.filter_service.name_thursday","platform.filter_service.name_friday","platform.filter_service.name_saturday","platform.filter_service.min_sunday","platform.filter_service.min_monday","platform.filter_service.min_tuesday","platform.filter_service.min_wednesday","platform.filter_service.min_thursday","platform.filter_service.min_friday","platform.filter_service.min_saturday","platform.filter_service.short_sunday","platform.filter_service.short_monday","platform.filter_service.short_tuesday","platform.filter_service.short_wednesday","platform.filter_service.short_thursday","platform.filter_service.short_friday","platform.filter_service.short_saturday","platform.filter_service.yes","platform.filter_service.no","platform.filter_service.search_empty_message","AdvancedFilterService","filtersObservable","Subject","contextsObservable","BehaviorSubject","ticketFilterObservable","destroy$","contextsObserver","asObservable","filtersObserver","ticketFilterObserver","subscribe","contexts","getAndApplyFilters","saveTickedFilters","filters","requestBody","ticketFilter","post","URL_PREFIX","pipe","response","ticket","window","parent","postMessage","message","payload","err","addContexts","_i","currentContexts","getValue","Observable","create","removeContexts","filteredContexts","filter","context","indexOf","saveFilters","searchFieldSuggestions","type","Content-Type","tryAgain","serviceContexts","getFilters","applyFilter","mapFilters","search","basicSearch","output","mapValues","keyFields","displayFields","entitySearch","isMultiple","valueInText","stringify","startsWith","endsWith","ex","maxSelectedItems","mapValue","ids","displays","undefined","join","Injectable","required","scope","services","enumItems","defaultValue","tabIndex","minValue","maxValue","dependsOn","mask","regExp","FormFilter","getOwnPropertySymbols","propertyIsEnumerable","__rest","_valueObserver","valueChanges","_value","TabView","fields","form","FormGroup","ContextTab","_super","activeFilters","__","constructor","__extends","getFilterId","filterName","DATETIME","exports","TIME","parsers","DATE","dateParser","parseFilterValue","parser","format","date","moment","filterOperators","contains","attr","=","!=",">","<",">=","fromJson","isNotMultiple","parsedValue","SEARCH","getSearchType","_a$1","createFormControl","validators","pattern","forms","Validators","min","max","createValidators","formValue","INTEGER","DOUBLE","MONEY","parseFormValue","FormControl","toDate","supportedTypes","STRING","BOOLEAN","ENUMERATION","operation","otherValue","<=","equals","Number","compare","operator","comparator","isValidOperator","isSupportedType","TRANSLATE_PREFIX","CalendarOptionsService","getOptions","clear","dateFormat","dayNames","dayNamesMin","dayNamesShort","firstDayOfWeek","hourFormat","monthNames","monthNamesShort","today","FormFilterComponent","filterService","messageService","calendarOptionsService","changeDetectorRef","formFilters","oldFormFilters","actualFormFilters","general","totalFiltersActive","isMobile","tabViewOrientation","errorMessages","showMessages","isModal","contextId","totalFiltersActiveOutput","EventEmitter","errorOutput","showDialogOutput","closeModalOutput","onResizeWindow","event","innerWidth","ngOnInit","subscribeContextsObservable","subscribeFiltersObservable","addEventListener","ngOnDestroy","hasChanges","currentValue","oldValue","onApplyFilters","emit","applyFilters","showToast","counterUpdate","getFiltersValues","severity","life","detail","sendMessage","clone","getDefaultValue","clearFilters","cleanFieldAndSetDefaultValue","sendCloseMessage","modalName","add","forceSave","parseToUserFilters","saveFiltersWithCallbackFunction","callbackFunction","countActiveFilters","tabs","tabView","appliedFilters","filterValue","filterId","toUserFormat","toFilterFormat","takeUntil","errorStateAction","errorState","createForm","createTabs","setDependencies","createChildArray","names","rxFilter","tap","filterControl","dep","id","formFilter","fieldValue","disable","mergeMap","val","comparation","every","IsEmpty","status","addGeneralField","controlName","fieldControl","tab","control","controls","setValue","emitEvent","newFilter","newField","createField","addControl","containsAllContexts","myContexts","allContexts","sort","field","filterConfig","DOMAIN","tabId_1","getTabId","has","contextLabel","updateFilterValue","contextTab","Map","tabId","controlOpts","generalFieldControl","childs","child","finalValue","onlySelf","translatedEnumItems","placeholder","TextField","FieldType","String","CurrencyField","Money","createRadioButton","createCalendar","Date","DateTime","Time","SelectField","options","Enum","NumberField","numberLocaleOptions","optionsInteger","Integer","Double","createAutocompleteField","RadioButtonField","Radio","calendar","CalendarField","calendarLocaleOptions","appendTo","suggestionsObservable","queryParam","input","resultDataJsonPath","displayFieldConcatToken","AutocompleteField","onSearch","getDependenciesValues","searchUrl","getEntitySearchUrl","jsonPath","object","path","allPaths","shift","suggestions","addSuggestionFields","detectChanges","messageError","suggestionsError","displayField","dataKey","multiple","size","lg","md","xl","emptyMessage","attributes","domainName","entityName","serviceName","obj","entityAttribute","separator","addValue","acc","token","suggestion","display","invalidValue","findIndex","$$__keyValue__","dependencies","arr","currencySymbol","decimalSeparator","thousandsSeparator","MessageService","ChangeDetectorRef","Input","Output","HostListener","Component","selector","template","AdvancedFilterComponent","router","labelButton","onlyContent","hideButtons","canOpenFilter","showActiveFiltersCountBadge","filterAndSave","subscriptions","showDialog","currentTicket","mobileButtonActions","command","modalComponent","sub","events","NavigationEnd","unsubscribe","totalActiveFilters","onError","close","toggleDialog","updateTotalFiltersActive","Router","ViewChild","encapsulation","ViewEncapsulation","None","AdvancedFilterModule","DialogModule","ButtonModule","PrimeNGButtonModule","TabViewModule","CommonModule","FormsModule","ReactiveFormsModule","DynamicFormModule","ToastModule","EmptyStateModule","TooltipModule","LocaleService","declarations","CyclicJsonInterceptor","intercept","req","Blob","FormData","jc","decycle","handle","HttpResponse","retrocycle","providedIn","CyclicJsonInterceptorModule","HTTP_INTERCEPTORS","useClass","RestUrl","defer","getRestUrl","XServicesUrl","getXServicesUrl","HttpInterceptor","restUrl","xServicesUrl","originalReq","includes","test","forkJoin","xUrl","authHeader","injectBaseUrl","bridgeUrl","baseUrl","authorization","request","HttpInterceptorModule","RESOURCES","ENVIRONMENT","PermissionsService","resources","environment","checkedPermissions","actionUrl","checkAccess","permissions","rec","actions","action","uri","resource","getUriByResourceName","entity","includeFilters","shouldRedirectToForbiddenPage","navigate","throwError","permission","authorized","toLowerCase","resourceFilters","resourceFilter","promise","getPermissions","catchError","summary","of","getPermissionObject","isAuthorized","resourceName","isEntity","resourceUri","permissionOfAction","perm","permRec","uriBase","permissionsDenied","resourcesToCheck","redirectToError","actionsToCheck","some","permissionDenied","getFlatEnvironment","ignorePermissions","getFlatResources","Inject","Environment","PermissionsModule","PermissionsModule_1","endpointFactoryFunction","method","endpoint","ResourceFactory","query","bind","signal","URL","update","remove","UserAction","PLATFORM_FEATURE_TOGGLE","FeatureToggleService","cache","isEnabled","tenant","tenantName","features","shareReplay","FeatureToggleModule","EnumDisplayType","SpotlightService","API_URL","getUser","listSpotlightScreen","listSpotlightUsers","listSpotlightControl","saveSpotlightUser","saveSpotlightControl","notificateSpotlight","EnumSpotlightStatus","SpotlightComponent","spotlightService","datePipe","canAppear","visible","fade","visibleChange","setValues","fetchSpotlight","currentUser","username","spotlightUsersList","spotlightControlsList","setValuesInSpotlight","header","spotlightTitle","imgUrl","bannerUrl","primaryButtonLabel","primaryButtonTooltip","primaryButtonHint","getShowDate","days","currentDate","setDate","getDate","toString","spotlightScreen","contents","screenMenuId","menuId","showSpotlight","spotlight","validateDate","initialDate","validateFinalDate","finalDate","validateSpotlight","getSpotlightControlFromList","canEmitEvent","firstUser","validateControlsList","validateDisplayType","controlsList","totalElements","ACTIVE","spotlightId","IN_PROGRESS","usersList","displayType","ADVERSITING","validateUser","INTEGRATION","NO_STARTED","REFUSED","users","spotlightUsers","userOperation","compatibleUserToValidate","showDate","spotlightUser","onPrimary","notification","buildNotification","CONFIRMED","primaryButtonUrl","open","onSecondary","POSTPONED","daysRememberLate","onTertiary","daysNotInterested","hasThisRegister","hasAnotherRegister","isNewControl","spotlightControl","userAction","clickedButton","spotlightControlId","DatePipe","platform.spotlight.no_interest","platform.spotlight.remember_late","SpotlightModule","fallback$1"],"mappings":";;;;;;;;;;;;;;;AAgBA,IAAIA,EAAgB,SAASC,EAAGC,GAI5B,OAHAF,EAAgBG,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,IASrB,IAAIO,EAAW,WAQlB,OAPAA,EAAWN,OAAOO,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAIN,KADTK,EAAIG,UAAUF,GACOV,OAAOc,UAAUT,eAAeU,KAAKN,EAAGL,KAAII,EAAEJ,GAAKK,EAAEL,IAE9E,OAAOI,IAEKQ,MAAMC,KAAML,YAezB,SAASM,EAAWC,EAAYC,EAAQC,EAAKC,GAChD,IAA2HxB,EAAvHyB,EAAIX,UAAUC,OAAQW,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOtB,OAAOyB,yBAAyBL,EAAQC,GAAOC,EACrH,GAAuB,iBAAZI,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIZ,EAAIS,EAAWN,OAAS,EAAGH,GAAK,EAAGA,KAASZ,EAAIqB,EAAWT,MAAIc,GAAKD,EAAI,EAAIzB,EAAE0B,GAAKD,EAAI,EAAIzB,EAAEsB,EAAQC,EAAKG,GAAK1B,EAAEsB,EAAQC,KAASG,GAChJ,OAAOD,EAAI,GAAKC,GAAKxB,OAAO4B,eAAeR,EAAQC,EAAKG,GAAIA,EAGzD,SAASK,EAAQC,EAAYC,GAChC,OAAO,SAAUX,EAAQC,GAAOU,EAAUX,EAAQC,EAAKS,IAOpD,SAASE,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,IAAW,MAAOG,GAAKL,EAAOK,IACpF,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,IAAW,MAAOG,GAAKL,EAAOK,IACvF,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,OAITO,KAAKR,EAAWK,GAClGH,GAAMN,EAAYA,EAAUpB,MAAMiB,EAASC,GAAc,KAAKS,WAI/D,SAASM,EAAYhB,EAASiB,GACjC,IAAsGC,EAAGC,EAAG5C,EAAG6C,EAA3GC,EAAI,CAAEC,MAAO,EAAGC,KAAM,WAAa,GAAW,EAAPhD,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,IAAOiD,KAAM,GAAIC,IAAK,IAChG,OAAOL,EAAI,CAAEV,KAAMgB,EAAK,GAAIC,MAASD,EAAK,GAAIE,OAAUF,EAAK,IAAwB,mBAAXG,SAA0BT,EAAES,OAAOC,UAAY,WAAa,OAAO9C,OAAUoC,EACvJ,SAASM,EAAKhD,GAAK,OAAO,SAAUqD,GAAK,OACzC,SAAcC,GACV,GAAId,EAAG,MAAM,IAAIe,UAAU,mCAC3B,KAAOZ,GAAG,IACN,GAAIH,EAAI,EAAGC,IAAM5C,EAAY,EAARyD,EAAG,GAASb,EAAU,OAAIa,EAAG,GAAKb,EAAS,SAAO5C,EAAI4C,EAAU,SAAM5C,EAAEO,KAAKqC,GAAI,GAAKA,EAAET,SAAWnC,EAAIA,EAAEO,KAAKqC,EAAGa,EAAG,KAAKlB,KAAM,OAAOvC,EAE3J,OADI4C,EAAI,EAAG5C,IAAGyD,EAAK,CAAS,EAARA,EAAG,GAAQzD,EAAEiC,QACzBwB,EAAG,IACP,KAAK,EAAG,KAAK,EAAGzD,EAAIyD,EAAI,MACxB,KAAK,EAAc,OAAXX,EAAEC,QAAgB,CAAEd,MAAOwB,EAAG,GAAIlB,MAAM,GAChD,KAAK,EAAGO,EAAEC,QAASH,EAAIa,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKX,EAAEI,IAAIS,MAAOb,EAAEG,KAAKU,MAAO,SACxC,QACI,KAAM3D,EAAI8C,EAAEG,MAAMjD,EAAIA,EAAEK,OAAS,GAAKL,EAAEA,EAAEK,OAAS,KAAkB,IAAVoD,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEX,EAAI,EAAG,SACjG,GAAc,IAAVW,EAAG,MAAczD,GAAMyD,EAAG,GAAKzD,EAAE,IAAMyD,EAAG,GAAKzD,EAAE,IAAM,CAAE8C,EAAEC,MAAQU,EAAG,GAAI,MAC9E,GAAc,IAAVA,EAAG,IAAYX,EAAEC,MAAQ/C,EAAE,GAAI,CAAE8C,EAAEC,MAAQ/C,EAAE,GAAIA,EAAIyD,EAAI,MAC7D,GAAIzD,GAAK8C,EAAEC,MAAQ/C,EAAE,GAAI,CAAE8C,EAAEC,MAAQ/C,EAAE,GAAI8C,EAAEI,IAAIU,KAAKH,GAAK,MACvDzD,EAAE,IAAI8C,EAAEI,IAAIS,MAChBb,EAAEG,KAAKU,MAAO,SAEtBF,EAAKf,EAAKnC,KAAKkB,EAASqB,GAC1B,MAAOV,GAAKqB,EAAK,CAAC,EAAGrB,GAAIQ,EAAI,EAAI,QAAWD,EAAI3C,EAAI,EACtD,GAAY,EAARyD,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAExB,MAAOwB,EAAG,GAAKA,EAAG,QAAK,EAAQlB,MAAM,GArB9BL,CAAK,CAAC/B,EAAGqD,MA8CtD,SAASK,EAAOC,EAAG3D,GACtB,IAAI4D,EAAsB,mBAAXT,QAAyBQ,EAAER,OAAOC,UACjD,IAAKQ,EAAG,OAAOD,EACf,IAAmB9C,EAAYoB,EAA3BlC,EAAI6D,EAAExD,KAAKuD,GAAOE,EAAK,GAC3B,IACI,WAAc,IAAN7D,GAAgBA,KAAM,MAAQa,EAAId,EAAEiC,QAAQI,MAAMyB,EAAGJ,KAAK5C,EAAEiB,OAExE,MAAOgC,GAAS7B,EAAI,CAAE6B,MAAOA,GACjC,QACQ,IACQjD,IAAMA,EAAEuB,OAASwB,EAAI7D,EAAU,SAAI6D,EAAExD,KAAKL,GAE1D,QAAkB,GAAIkC,EAAG,MAAMA,EAAE6B,OAE7B,OAAOD,EAGJ,SAASE,IACZ,IAAK,IAAIF,EAAK,GAAI9D,EAAI,EAAGA,EAAIE,UAAUC,OAAQH,IAC3C8D,EAAKA,EAAGG,OAAON,EAAOzD,UAAUF,KACpC,OAAO8D,mBC/IX,SAAAI,KAIA,OAHEA,EAAA9D,UAAA+D,UAAA,SAAUC,EAAoBC,GAC5B,YAD4B,IAAAA,IAAAA,EAAA,MACrB5E,MAAM6E,KAAKF,EAAIG,WAFbL,EAAa1D,EAAA,CADzBgE,EAAAA,KAAK,CAAEC,KAAM,YAAaC,MAAM,KACpBR,mBCKT,SAAAS,EAAoBC,GAAArE,KAAAqE,mBAAAA,EAItB,OAHED,EAAAvE,UAAA+D,UAAA,SAAUpC,EAAYsC,GACpB,OAAO9D,KAAKqE,mBAAmBC,QAAQ9C,6CAFD+C,EAAAA,oBAD7BH,EAAanE,EAAA,CAJ3BgE,EAAAA,KAAK,CACFC,KAAM,YACNC,MAAM,KAEKC,MCCFI,EAAqB,IAAIC,EAAAA,eAAsC,kCAO5E,SAAAC,WAgCA,SAhCaA,EACJA,EAAAC,QAAP,SAAeC,GACb,MAAO,CACLC,SAAUC,EACVC,UAAW,CACT,CACEC,QAASC,EAAAA,gBACTC,WAAYC,EACZC,KAAM,CAACb,EAAAA,iBAAkBc,EAAAA,SAAUC,EAAAA,WAAYC,EAAAA,eAC/CC,OAAO,GAET,CACER,QAASR,EACTiB,SAAUb,EACVY,OAAO,MAMRd,EAAAgB,SAAP,SAAgBd,GACd,MAAO,CACLC,SAAUC,EACVC,UAAW,CACT,CACEC,QAASR,EACTiB,SAAUb,EACVY,OAAO,MA3BJd,EAAkBI,EAAA7E,EAAA,CAJ9B0F,EAAAA,SAAS,CACRC,QAAS,CAACC,EAAAA,iBAAkBC,EAAAA,gBAAgBJ,YAC5CX,UAAW,CAACQ,EAAAA,kBAEDb,eAyCGS,EAAQY,EAA6BC,EAAoBC,EAAkBC,GAA3F,IAAAC,EAAAnG,KACE,OAAO,WACL,OAAA,IAAIoB,SAAQ,SAACC,GACiB2E,EAASI,IAAIC,EAAAA,qBAAsBjF,QAAQC,QAAQ,OAE3DU,MAAK,WAAA,OAAAhB,EAAAoF,OAAA,OAAA,GAAA,iFACnBG,EAAS,+CAgHGC,EA9GeP,EAASI,IAAI5B,EAAoBpD,QAAQC,QAAQ,OAAxEmF,EA+GLD,EAAME,QAAO,SAAC5E,EAAe6E,GAClC,OAAIxH,MAAMyH,QAAQD,GAChBjD,EAAW5B,EAAW6E,GAExBjD,EAAW5B,EAAM,CAAE6E,MAClB,kDAjHSE,EAAWC,KAAKC,MAAMZ,EAAcE,IA1D3B,sBA8KCW,EAnHKH,IAoHkB,IAA7B7H,OAAOiI,KAAKD,GAAMnH,OApHtB,CAAA,EAAA,GACS,CAAA,EAAMqH,EAAAA,KAAKC,sBAAtBN,EAAWO,EAAA5E,+BAGb+D,EA0IV,SAAmBM,GACjB,OAAOA,EAASN,QAAU,QA3ITc,CAAUR,gCAEnBS,QAAQC,KAAK,6CAoBf,OAjBMC,EAAWf,EAAQC,QAAO,SAAC5E,EAAa2E,GAAiC,OAAAnH,EAAAA,EAAA,GAAMwC,GAAW2E,EAAQe,YAAa,IAC/GC,EAAoBhB,EAAQC,QAChC,SAAC5E,EAAa2E,GAAiC,OAAAnH,EAAAA,EAAA,GAAMwC,GAAW2E,EAAQgB,qBACxE,IAGFzB,EAAU0B,eAAenB,EAAQiB,GACjCxB,EAAU2B,eAAepB,GAErBqB,EAAuB,GAEvBH,IACFG,EAkGV,SAA4BH,EAAwBlB,GAClD,IAAMsB,EAAiB7I,OAAOiI,KAAKQ,GAAmB3D,KAAI,SAACzD,GACzD,IAAMyH,EAAW,GAGjB,OAFAA,EAAiB,OAAIzH,EAAI0H,QAAQ,IAAK,KACtCD,EAAsB,YAAIL,EAAkBpH,GACrCyH,IACN,IAEGhG,EAAc,CAAE+F,UAASA,GAC/B/F,EAAwB,gBAAI+F,EAAUG,MAAK,SAACC,GAAiB,OAAAA,EAAQ1B,SAAWA,KAC3EzE,EAAwB,kBAC3BA,EAAwB,gBAAI+F,EAAUG,MAAK,SAACC,GAC1C,OA7LsB,IA6LfA,EAAQ1B,OAAO1G,QAA6BoI,EAAQ1B,SAAWA,EAAO2B,MAAM,KAAK,OAIxFpG,EAAwB,kBAC1BA,EAAyB,iBAAIA,EAAwB,gBAAe,aAGtE,OAAOA,EAtHmBqG,CAAmBV,EAAmBlB,IAGpD6B,EAAuB3B,EAAQ3C,KAAI,SAACuE,GAAgB,OAsClE,SAAgCjB,EAA0CU,GAA1E,IAAA1B,EAAAnG,KAAkCqI,EAAAlB,EAAAkB,OAAQC,EAAAnB,EAAAmB,QACxC,OAAO,IAAIlH,SAAQ,SAAOC,GAAO,OAAAN,EAAAoF,OAAA,OAAA,GAAA,mFAE7B,0BAAKkC,IAAWC,EACd,MAAM,IAAIC,MAAM,gCAIqC,OAFjDC,GAAS,IAAIC,EAAAA,YAAaC,IAAI,aAAcL,GAAQK,IAAI,cAAeJ,GAASI,IAAI,SAAU,aAEpFC,GAAAxB,EAAA,IAAIyB,EAAAA,aAAcF,OAAI,iBAAiB,CAAA,EAAMzB,EAAAA,KAAK4B,wBAE9C,OAFdC,EAAUH,EAAA5I,MAAAoH,EAAA4B,EAAArF,OAAA,CAAuCsF,EAAAzG,UAC3C,wDACQ,CAAA,EAAM0D,EACvBG,IAFS,wDAEA,CAAE0C,QAAOA,EAAEN,OAAMA,IAC1BS,YACAlH,MAAK,SAACmH,GAAa,OAAAA,EAAIC,uBAU1B,OAbMA,EAAcH,EAAAzG,OAKhB6G,EAAiBvB,GAAYsB,EAAYpB,MAAK,SAACsB,GAAgB,OAAAA,EAAOxB,WAAaA,KACnFyB,GAAY,EAEXF,IACHA,EAAiBD,EAAYpB,MAAK,SAACsB,GAAgB,MAAoB,UAApBA,EAAOxB,YAC1DyB,GAAY,GAGTF,EAIL,CAAA,EAAMnD,EACHG,IAAIgD,EAAeG,KACnBN,YACAlH,MAAK,SAACF,GAKLR,EAJqB,CACnBmI,UAAWF,EACXG,QAAS5H,QATb,CAAA,EAAOR,EAAQ,mBAGjB2H,EAAAzG,sCAWA8E,QAAQC,KAAK,wCAAwCe,EAAM,IAAIC,EAAO,0BAA2BoB,GACjGrI,EAAQ,qCA7EoDsI,CAAuBvB,EAAQ9B,MAEzF,CAAA,EAAMlF,QAAQwI,IAAIzB,GAAsBpG,MAAK,SAACiG,GAC5C,IAAM6B,EAAe9D,EAAqB,UAM1C,OAJAiC,EAAQ8B,SAAQ,SAACC,EAAMC,IAoBjC,SAAyBP,EAAcI,EAAmBvD,EAAa0D,EAAYC,GAC7EJ,GACFJ,GAAW1D,EAAU0B,eAAenB,EAAQmD,GAAS,GACrD1D,EAAU0B,eAAenB,EAAQ2D,GAAkB,KAErC,IAAVD,GACFjE,EAAU0B,eAAenB,EAAQ2D,GAAkB,GAGrDR,GAAW1D,EAAU0B,eAAenB,EAAQmD,GAAS,IA5B7CS,CAAgBH,EAAc,QAAGF,EAAcvD,EAAQ0D,EAAOrC,EAAgBsC,qBAGzElE,EAAUoE,IAAI7D,GAAQ2C,8BAP/B9B,EAAA5E,OAUAlB,mCAEAgG,QAAQC,KAAK,oDAAqD8C,GAClErE,EACGoE,IAAI7D,GACJ2C,YACAlH,MAAK,WACJV,8BAwEZ,IAAwB0F,EATFR,mBC9KZ8D,ECAAC,ECAC/C,EAAW,CACtBgD,iCAAkC,WAClCC,8BAA+B,mBAC/BC,kCAAmC,QACnCC,+BAAgC,SAChCC,iCAAkC,UAClCC,sCACE,uIACFC,gDAAiD,+EACjDC,8CACE,uFACFC,kDAAmD,kCACnDC,gDAAiD,iCACjDC,0CAA2C,6CAC3CC,0CAA2C,gDAC3CC,0CAA2C,6CAC3CC,kDAAmD,2CACnDC,iDAAkD,yCAClDC,iDAAkD,+BAClDC,iCAAkC,aAClCC,kCAAmC,UACnCC,sCAAwC,WACxCC,sCAAwC,KACxCC,gCAAiC,SACjCC,gCAAkC,OAClCC,uCAAyC,UACzCC,wCAA0C,YAC1CC,qCAAuC,QACvCC,qCAAuC,QACvCC,mCAAqC,OACrCC,oCAAsC,QACtCC,oCAAsC,QACtCC,sCAAwC,SACxCC,yCAA2C,WAC3CC,uCAAyC,UACzCC,wCAA0C,WAC1CC,wCAA0C,WAC1CC,wCAA0C,MAC1CC,yCAA2C,MAC3CC,sCAAwC,MACxCC,sCAAwC,MACxCC,oCAAsC,MACtCC,qCAAuC,MACvCC,qCAAuC,MACvCC,uCAAyC,MACzCC,0CAA4C,MAC5CC,wCAA0C,MAC1CC,yCAA2C,MAC3CC,yCAA2C,MAC3CC,sCAAuC,UACvCC,sCAAuC,UACvCC,uCAAwC,QACxCC,yCAA0C,SAC1CC,wCAAyC,SACzCC,sCAAuC,QACvCC,wCAAyC,SACzCC,qCAAsC,IACtCC,qCAAsC,IACtCC,sCAAuC,IACvCC,wCAAyC,IACzCC,uCAAwC,IACxCC,qCAAsC,IACtCC,uCAAwC,IACxCC,uCAAwC,MACxCC,uCAAwC,MACxCC,wCAAyC,MACzCC,0CAA2C,MAC3CC,yCAA0C,MAC1CC,uCAAwC,MACxCC,yCAA0C,MAC1CC,8BAA+B,MAC/BC,6BAA8B,MAC9BC,+CAAgD,4CC1BhD,SAAAC,EAAoB5I,GAApB,IAAAE,EAAAnG,KAAoBA,KAAAiG,KAAAA,EAVZjG,KAAA8O,kBAAoB,IAAIC,EAAAA,QACxB/O,KAAAgP,mBAAqB,IAAIC,EAAAA,gBAA2B,IACpDjP,KAAAkP,uBAAyB,IAAIH,EAAAA,QACrC/O,KAAAmP,SAAW,IAAIJ,EAAAA,QAGf/O,KAAAoP,iBAAmBpP,KAAKgP,mBAAmBK,eAC3CrP,KAAAsP,gBAAkBtP,KAAK8O,kBAAkBO,eACzCrP,KAAAuP,qBAAuBvP,KAAKkP,uBAAuBG,eAGjDrP,KAAKgP,mBAAmBQ,WAAU,SAAAC,GAAY,OAAAA,EAAS7P,QAAUuG,EAAKuJ,mBAAmBD,MAqI7F,OAlIEZ,EAAAhP,UAAA8P,kBAAA,SAAkBC,GAAlB,IAAAzJ,EAAAnG,KACQ6P,EAAc7P,KAAK8P,aAAe,CAAEF,QAAOA,EAAEE,aAAc9P,KAAK8P,cAAiB,CAAEF,QAAOA,GAChG5P,KAAKiG,KACF8J,KClDkCC,mDDkDiBH,GACnDI,KAAKpM,EAAAA,KAAI,SAAAqM,GAAY,OAAAA,EAASC,WAC9BX,WACC,SAAAM,GACE3J,EAAK2J,aAAeA,EACpB3J,EAAK+I,uBAAuBxN,KAAK,CAAEoO,aAAYA,IAC/CM,OAAOC,OAAOC,YAAY,CAAEC,QAAS,0BAA2BC,QAASV,GAAgB,QAE3F,SAAAW,GACEtK,EAAK+I,uBAAuBxN,KAAK,CAAE8B,OAAO,EAAM+M,QAASE,IACzDL,OAAOC,OAAOC,YAAY,CAAEC,QAAS,wBAAyBC,QAASC,GAAO,SAKtF5B,EAAAhP,UAAA6Q,YAAA,eAAA,IAAAvK,EAAAnG,KAAYyP,EAAA,GAAAkB,EAAA,EAAAA,EAAAhR,UAAAC,OAAA+Q,IAAAlB,EAAAkB,GAAAhR,UAAAgR,GACV,IAAMC,EAAkB5Q,KAAKgP,mBAAmB6B,WAEhD,OADA7Q,KAAKgP,mBAAmBtN,KAAI+B,EAAKmN,EAAoBnB,IAC9CqB,EAAAA,WAAWC,QAAO,WAAM,OAAA,WAAM,OAAA5K,EAAK6K,eAAevB,QAGnDZ,EAAAhP,UAAAmR,eAAR,SAAuBvB,GACrB,IACMwB,EADcjR,KAAKgP,mBAAmB6B,WACPK,QAAO,SAAAC,GAAW,OAA+B,IAA/B1B,EAAS2B,QAAQD,MACxEnR,KAAKgP,mBAAmBtN,KAAKuP,IAG/BpC,EAAAhP,UAAAwR,YAAA,SAAYzB,GACV,OAAO5P,KAAKiG,KAAK8J,KC/EcC,kDD+ES,CAAEJ,QAAOA,KAGnDf,EAAAhP,UAAAyR,uBAAA,SAAuB/H,EAAaf,EAAa+I,GAC/C,IAAMzI,EAAU,IAAIF,EAAAA,YAAY,CAAE4I,eAAgB,oCAClD,MAAa,WAATD,EACKvR,KAAKiG,KAAKG,IAAImD,EAAK,CAAET,QAAOA,IAE9B9I,KAAKiG,KAAK8J,KAAKxG,EAAKf,EAAQ,CAAEM,QAAOA,KAGvC+F,EAAAhP,UAAA4R,SAAP,SAAgBC,GACd1R,KAAK2R,WAAWD,IAGV7C,EAAAhP,UAAA6P,mBAAR,SAA2BgC,GACzB1R,KAAK2R,WAAWD,GAAiB,IAG3B7C,EAAAhP,UAAA8R,WAAR,SAAmBD,EAA4BE,GAA/C,IAAAzL,EAAAnG,KACEA,KAAKiG,KACF8J,KCrG2BC,6CDqGoB,CAAE0B,gBAAeA,IAChEzB,KAAKpM,EAAAA,KAAI,SAAAqM,GAAY,OAAA/J,EAAK0L,WAAW3B,EAASN,aAC9CJ,WACC,SAAAI,GAAW,OAAAzJ,EAAK2I,kBAAkBpN,KAAK,CAAEkO,QAAOA,EAAEgC,YAAWA,OAC7D,SAAAnB,GAAO,OAAAtK,EAAK2I,kBAAkBpN,KAAK,CAAE8B,OAAO,EAAM+M,QAASE,QAIzD5B,EAAAhP,UAAAgS,WAAR,SAAmBjC,GAAnB,IAAAzJ,EAAAnG,KACE,OAAO4P,EAAQ/L,KAAI,SAAAqN,GACjB,IACE,IAAM1P,EAAQ0P,EAAO1P,OAASqF,KAAKC,MAAMoK,EAAO1P,OAQhD,GANIA,GAAS0P,EAAOY,QAAUZ,EAAOY,OAAOC,aAAeb,EAAOY,OAAOC,YAAYC,OACnF7L,EAAK8L,UAAUzQ,EAAO0P,EAAOY,OAAOC,YAAYC,OAAOE,UAAWhB,EAAOY,OAAOC,YAAYC,OAAOG,eAC1F3Q,GAAS0P,EAAOY,QAAUZ,EAAOY,OAAOM,cAAgBlB,EAAOY,OAAOM,aAAaJ,QAC5F7L,EAAK8L,UAAUzQ,EAAO0P,EAAOY,OAAOM,aAAaJ,OAAOE,UAAWhB,EAAOY,OAAOM,aAAaJ,OAAOG,eAGnG3Q,EACF,GAAI2E,EAAKkM,WAAWnB,GAAS,CAC3B,IAAMoB,EAAczL,KAAK0L,UAAU/Q,GAE9B8Q,EAAYE,WAAW,OAASF,EAAYG,SAAS,OAAUH,EAAY1S,QAAU,EACxFsR,EAAO1P,MAAQ8Q,EAEfpB,EAAO1P,MAAQqF,KAAK0L,UAAU,SAGhCrB,EAAO1P,MAAQqF,KAAK0L,UAAU/Q,GAGlC,MAAOkR,GACPrL,QAAQ7D,MAAM,kBAAkB0N,EAAOhN,KAAI,qBAAsBwO,GACjExB,EAAO1P,MAAQqF,KAAK0L,UAAU,IAGhC,OAAOrB,MAIHrC,EAAAhP,UAAAwS,WAAR,SAAmBnB,GACjB,MACkB,WAAhBA,EAAOK,MACPL,EAAOY,SACLZ,EAAOY,OAAOC,aAAeb,EAAOY,OAAOC,YAAYC,QAAUd,EAAOY,OAAOC,YAAYC,OAAOW,iBAAmB,GACpHzB,EAAOY,OAAOM,cAAgBlB,EAAOY,OAAOM,aAAaJ,QAAUd,EAAOY,OAAOM,aAAaJ,OAAOW,iBAAmB,IAIvH9D,EAAAhP,UAAAoS,UAAR,SAAkBzQ,EAAY0Q,EAAqBC,GAAnD,IAAAhM,EAAAnG,KACMd,MAAMyH,QAAQnF,GAChBA,EAAMsI,SAAQ,SAAAnI,GACZwE,EAAKyM,SAASjR,EAAGuQ,EAAWC,MAG9BnS,KAAK4S,SAASpR,EAAO0Q,EAAWC,IAI5BtD,EAAAhP,UAAA+S,SAAR,SAAiBpR,EAAY0Q,EAAqBC,GAChD,GAAK3Q,EAAL,CAIA,IAAMqR,EAAM,GACNC,EAAW,GAEjBZ,EAAUhB,QAAO,SAAAvP,GAAK,YAAaoR,IAAbvR,EAAMG,MAAkBmI,SAAQ,SAAAnI,GAAK,OAAAkR,EAAI1P,KAAK3B,EAAMG,OAC1EwQ,EAAcjB,QAAO,SAAAvP,GAAK,YAAaoR,IAAbvR,EAAMG,MAAkBmI,SAAQ,SAAAnI,GAAK,OAAAmR,EAAS3P,KAAK3B,EAAMG,OAE/EkR,EAAIjT,OAAS,GAAKkT,EAASlT,OAAS,GACtC4B,EAAmB,eAAIqR,EAAIG,KAAK,MAChCxR,EAAuB,mBAAIsR,EAASE,KAAK,OAEzCxR,EAAQ,CAAC,+CAnIa8D,EAAAA,cAXfuJ,EAAqB5O,EAAA,CADjCgT,EAAAA,cACYpE,QE5BX,SACS0C,EACA2B,EACA5Q,EACA+F,EACA8K,EACAjP,EACAuL,EACA2D,EACA5R,EACA6R,EACAC,EACAxB,EACAyB,EACAC,EACAC,EACAC,EACAC,EACAC,GAjBA5T,KAAAuR,KAAAA,EACAvR,KAAAkT,SAAAA,EACAlT,KAAAsC,MAAAA,EACAtC,KAAAqI,OAAAA,EACArI,KAAAmT,MAAAA,EACAnT,KAAAkE,KAAAA,EACAlE,KAAAyP,SAAAA,EACAzP,KAAAoT,SAAAA,EACApT,KAAAwB,MAAAA,EACAxB,KAAAqT,UAAAA,EACArT,KAAAsT,aAAAA,EACAtT,KAAA8R,OAAAA,EACA9R,KAAAuT,SAAAA,EACAvT,KAAAwT,SAAAA,EACAxT,KAAAyT,SAAAA,EACAzT,KAAA0T,UAAAA,EACA1T,KAAA2T,KAAAA,EACA3T,KAAA4T,OAAAA,ILzBCvJ,EAAAA,EAAAA,aAAAA,EAAAA,WAAU,KACpB,OAAA,SACAA,EAAA,QAAA,UACAA,EAAA,QAAA,UACAA,EAAA,OAAA,SACAA,EAAA,KAAA,OACAA,EAAA,SAAA,WACAA,EAAA,KAAA,OACAA,EAAA,MAAA,QACAA,EAAA,YAAA,cACAA,EAAA,OAAA,UCVUC,EAAAA,EAAAA,QAAAA,EAAAA,MAAK,KACf,OAAA,SACAA,EAAA,QAAA,6BK4BA,SAAAuJ,EAAY1M,GAAE,IAAA3F,EAAA2F,EAAA3F,MAAO4G,EVUhB,SAAgB5I,EAAGmC,GACtB,IAAIpC,EAAI,GACR,IAAK,IAAIJ,KAAKK,EAAOT,OAAOc,UAAUT,eAAeU,KAAKN,EAAGL,IAAMwC,EAAEyP,QAAQjS,GAAK,IAC9EI,EAAEJ,GAAKK,EAAEL,IACb,GAAS,MAALK,GAAqD,mBAAjCT,OAAO+U,sBACtB,CAAA,IAAIrU,EAAI,EAAb,IAAgBN,EAAIJ,OAAO+U,sBAAsBtU,GAAIC,EAAIN,EAAES,OAAQH,IAC3DkC,EAAEyP,QAAQjS,EAAEM,IAAM,GAAKV,OAAOc,UAAUkU,qBAAqBjU,KAAKN,EAAGL,EAAEM,MACvEF,EAAEJ,EAAEM,IAAMD,EAAEL,EAAEM,KAE1B,OAAOF,EUnBYyU,CAAA7M,EAAA,CAAA,UAbbnH,KAAAiU,eAAiB,IAAIlF,EAAAA,QAC7B/O,KAAAkU,aAAgClU,KAAKiU,eAAe5E,eAalDrP,KAAKmU,OAAS3S,EACdzC,OAAOO,OAAOU,KAAMoI,GAWxB,OARErJ,OAAA4B,eAAIkT,EAAAhU,UAAA,QAAK,KAKT,WACE,OAAOG,KAAKmU,YANd,SAAU3S,GACRxB,KAAKmU,OAAS3S,EACdxB,KAAKiU,eAAevS,KAAKF,oCAM7BqS,KCxCAO,EAKE,SAAYhM,GAJZpI,KAAAqU,OAAkB,GAKhBrU,KAAKsU,KAAO,IAAIC,EAAAA,UAAU,IAC1BxV,OAAOO,OAAOU,KAAMoI,IAGxBoM,EAAA,SAAAC,GAAA,SAAAD,IAAA,IAAArO,EAAA,OAAAsO,GAAAA,EAAA1U,MAAAC,KAAAL,YAAAK,YACEmG,EAAAuO,cAAgB,IAMlB,OXGO,SAAmB7V,EAAGC,GAEzB,SAAS6V,IAAO3U,KAAK4U,YAAc/V,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEgB,UAAkB,OAANf,EAAaC,OAAOgS,OAAOjS,IAAM6V,EAAG9U,UAAYf,EAAEe,UAAW,IAAI8U,GWbnDE,CAAAL,EAAAC,GAI9B1V,OAAA4B,eAAI6T,EAAA3U,UAAA,QAAK,KAAT,WACE,OAAUG,KAAKkE,KAAI,KAAKlE,KAAK0U,cAAa,qCAE9CF,EAPA,CAAgCJ,YCXhBU,EAAYzM,EAAgB0M,GAC1C,OAAU1M,EAHuB,IAGQ0M,ECKnC,IAAAC,EAAAC,EAAA5K,WAAA2K,SAAUE,EAAAD,EAAA5K,WAAA6K,KAEZC,IAAOhO,EAAA,IAFW8N,EAAA5K,WAAA+K,MAGd,SAAC5T,GAAe,OAAA6T,EAAW7T,EAAO,eAC1C2F,EAAC+N,GAAO,SAAC1T,GAAe,OAAA6T,EAAW7T,EAAO,aAC1C2F,EAAC6N,GAAW,SAACxT,GAAe,OAAA6T,EAAW7T,gBAGzB8T,EAAiB9T,EAAY+P,GAC3C,IAAMgE,EAASJ,EAAQ5D,GACvB,OAAI/P,MAAAA,GAAmD,KAAVA,GACpC+T,EAASA,EAAO/T,GAGlBA,EAGT,SAAS6T,EAAW7T,EAAegU,GACjC,IAAMC,EAAOC,EAAOlU,GACpB,OAAOgU,EAASC,EAAKD,OAAOA,GAAUC,EAAKD,eC3BhCG,EAAkB,CAC7BC,SAAY,SAACC,EAAcrU,GAAkB,MAAA,cAAcqU,EAAI,MAAMrU,EAAK,MAC1EsU,IAAK,SAACD,EAAcrU,GAAkB,OAAGqU,EAAI,OAAOrU,GACpDuU,KAAM,SAACF,EAAcrU,GAAkB,OAAGqU,EAAI,OAAOrU,GACrDwU,IAAK,SAACH,EAAcrU,GAAkB,OAAGqU,EAAI,OAAOrU,GACpDyU,IAAK,SAACJ,EAAcrU,GAAkB,OAAGqU,EAAI,OAAOrU,GACpD0U,KAAM,SAACL,EAAcrU,GAAkB,OAAGqU,EAAI,OAAOrU,aCyCvC2U,EAAS3U,EAAY+P,EAAkB6E,GACrD,IAAMC,EAAcxP,KAAKC,MAAMtF,GAC/B,OAAI+P,IAASlH,EAAAA,WAAWiM,QAAUF,EACzBC,EAAY,GAGdA,WAGOE,EAAczE,GAC5B,OAAOA,EAAOC,YAAcD,EAAOC,YAAcD,EAAOM,aC/ClD,IAAAgD,GAAAA,EAAAA,WAAAA,KAAMJ,GAAAA,EAAAA,WAAAA,SAAUE,GAAAA,EAAAA,WAAAA,KAElBC,KAAOqB,EAAA,IACVpB,IAAO,SAACrS,GAAc,OAAAsS,GAAWtS,IAClCoE,EAAC6N,IAAW,SAACjS,GAAc,OAAAsS,GAAWtS,IACtCoE,EAAC+N,IAAO,SAACnS,GAAc,OAAAsS,GAAWtS,EAAG,yBAwBvB0T,GAAkBtP,OAAEqM,EAAArM,EAAAqM,SAAUC,EAAAtM,EAAAsM,SAAUG,EAAAzM,EAAAyM,OAAQpS,EAAA2F,EAAA3F,MAAO+P,EAAApK,EAAAoK,KAAMO,EAAA3K,EAAA2K,OACrE4E,EAMR,SAA0BlD,EAAkBC,EAAkBG,GACpD,IAAA+C,EAAAC,EAAAC,WAAAF,QAASG,EAAAF,EAAAC,WAAAC,IAAKC,EAAAH,EAAAC,WAAAE,IAChBL,EAAa,GAMnB,OAJA9C,GAAU8C,EAAWvT,KAAKwT,EAAQ/C,SACrBb,IAAbS,GAA0BkD,EAAWvT,KAAK2T,EAAItD,SACjCT,IAAbU,GAA0BiD,EAAWvT,KAAK4T,EAAItD,IAEvCiD,EAdYM,CAAiBxD,EAAUC,EAAUG,GAClDqD,WAvBuBzV,EAAe+P,EAAkBO,GAC9D,IAIImF,EAJE1B,EAASJ,GAAQ5D,GACjB8E,EAAcxP,KAAKC,MAAMtF,GACzB4U,EAAgBtE,GAA4D,IAAlDyE,EAAczE,GAAQE,OAAOW,iBAW7D,OALEsE,EAHG1F,IAASlH,EAAAA,WAAW6M,SAAW3F,IAASlH,EAAAA,WAAW8M,QAAU5F,IAASlH,EAAAA,WAAW+M,OAA6B,KAAnBf,EAAY,GAEjG9E,IAASlH,EAAAA,WAAWiM,QAAUF,EAC3BC,EAAY,GAEZA,EAAY,GAAKA,EAAc,GAJ/B,KAOVd,EACKA,EAAO0B,GAGTA,EAKWI,CAAe7V,EAAO+P,EAAMO,GAE9C,OAAO,IAAIwF,EAAAA,YAAYL,EAAW,CAAEP,WAAUA,IAchD,SAASrB,GAAW7T,EAAegU,GACjC,OAAiB,OAAVhU,GAA4B,KAAVA,EAAekU,EAAOlU,EAAOgU,GAAQ+B,SAAW,GCxD3E,IAAMC,GAAiB,CACrBnN,EAAAA,WAAWoN,OACXpN,EAAAA,WAAWqN,QACXrN,EAAAA,WAAW6M,QACX7M,EAAAA,WAAWsN,YACXtN,EAAAA,WAAW6K,KACX7K,EAAAA,WAAW+M,MACX/M,EAAAA,WAAW2K,SACX3K,EAAAA,WAAW+K,KACX/K,EAAAA,WAAW8M,QAGPS,GAAY,CAChB5B,IAAK,SAACxU,EAAeqW,GACnB,OAAOrW,EAAQqW,GAEjB5B,IAAK,SAACzU,EAAeqW,GACnB,OAAOrW,EAAQqW,GAEjB3B,KAAM,SAAC1U,EAAeqW,GACpB,OAAOrW,GAASqW,GAElBC,KAAM,SAACtW,EAAeqW,GACpB,OAAOrW,GAASqW,GAElBjC,SAAY,SAACpU,EAAYqW,GACvB,OAAOjC,EAAAA,SAASpU,EAAOqW,IAEzB/B,IAAK,SAACtU,EAAYqW,GAChB,MAA0B,iBAAfA,EACFE,EAAAA,OAAOC,OAAOxW,GAAQqW,GAExBE,EAAAA,OAAOvW,EAAOqW,IAEvB9B,KAAM,SAACvU,EAAYqW,GACjB,MAA0B,iBAAfA,GACDE,EAAAA,OAAOC,OAAOxW,GAAQqW,IAExBE,EAAAA,OAAOvW,EAAOqW,cAIVI,GAAQC,EAAkB1W,EAAYqW,GAEpD,OAAOM,EADYP,GAAUM,IACX1W,EAAOqW,YAGXO,GAAgBF,GAC9B,QAASN,GAAUM,YAGLG,GAAgB9G,GAC9B,OAAOqE,EAAAA,SAASrE,EAAMiG,ICnDxB,IAAMc,GAAmB,wCAIrB,SAAAC,EAAoBxS,GAAA/F,KAAA+F,UAAAA,EAkExB,OAhEWwS,EAAA1Y,UAAA2Y,WAAP,WACI,MAAO,CACHC,MAAOzY,KAAK+F,UAAUzB,QAAWgU,GAAgB,UACjDI,WAAY1Y,KAAK+F,UAAUzB,QAAWgU,GAAgB,gBACtDK,SAAU,CACN3Y,KAAK+F,UAAUzB,QAAWgU,GAAgB,gBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,gBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,iBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,mBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,kBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,gBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,mBAE9CM,YAAa,CACT5Y,KAAK+F,UAAUzB,QAAWgU,GAAgB,eAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,eAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,gBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,kBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,iBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,eAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,kBAE9CO,cAAe,CACX7Y,KAAK+F,UAAUzB,QAAWgU,GAAgB,iBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,iBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,kBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,oBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,mBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,iBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,oBAE9CQ,eAAgB,EAChBC,WAAY/Y,KAAK+F,UAAUzB,QAAWgU,GAAgB,gBACtDU,WAAY,CACRhZ,KAAK+F,UAAUzB,QAAWgU,GAAgB,iBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,kBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,eAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,eAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,aAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,cAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,cAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,gBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,mBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,iBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,kBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,mBAE9CW,gBAAiB,CACbjZ,KAAK+F,UAAUzB,QAAWgU,GAAgB,kBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,mBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,gBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,gBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,cAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,eAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,eAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,iBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,oBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,kBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,mBAC1CtY,KAAK+F,UAAUzB,QAAWgU,GAAgB,oBAE9CY,MAAOlZ,KAAK+F,UAAUzB,QAAWgU,GAAgB,qDA/D1B/T,EAAAA,oBADtBgU,EAAsBtY,EAAA,CADlCgT,EAAAA,cACYsF,MCuCPD,GAAmB,wCAsCvB,SAAAa,EACUC,EACDrT,EACCsT,EACAC,EACAC,GAJAvZ,KAAAoZ,cAAAA,EACDpZ,KAAA+F,UAAAA,EACC/F,KAAAqZ,eAAAA,EACArZ,KAAAsZ,uBAAAA,EACAtZ,KAAAuZ,kBAAAA,EAlCVvZ,KAAAmP,SAAW,IAAIJ,EAAAA,QAGf/O,KAAAyP,SAAsB,GACtBzP,KAAAwZ,YAA4B,GAC5BxZ,KAAAyZ,eAAwB,GACxBzZ,KAAA0Z,kBAA2B,GAC3B1Z,KAAA2Z,QAAU,IAAIvF,EAAQ,CAAElQ,KAAM,UAC9BlE,KAAA4Z,mBAAqB,EACrB5Z,KAAA6Z,UAAW,EACX7Z,KAAA8Z,mBAAqB,OACrB9Z,KAAAwD,OAAQ,EAERxD,KAAA+Z,cAAgB,CACdjD,IAAK9W,KAAK+F,UAAUzB,QAAWgU,GAAgB,oBAC/CvB,IAAK/W,KAAK+F,UAAUzB,QAAWgU,GAAgB,oBAC/C3B,QAAS3W,KAAK+F,UAAUzB,QAAWgU,GAAgB,qBAG5CtY,KAAAga,cAAe,EACfha,KAAAia,SAAU,EACVja,KAAAka,UAAY,GAGXla,KAAAma,yBAA2B,IAAIC,EAAAA,aAC/Bpa,KAAAqa,YAAc,IAAID,EAAAA,aAClBpa,KAAAsa,iBAAmB,IAAIF,EAAAA,aACvBpa,KAAAua,iBAAmB,IAAIH,EAAAA,aAinBnC,OAtmBEjB,EAAAtZ,UAAA2a,eAAA,SAAeC,GACL,IAAAC,EAAAD,EAAAta,OAAAua,WACR1a,KAAK6Z,SAAWa,GAAc,IAC9B1a,KAAK8Z,mBAAqB9Z,KAAK6Z,SAAW,MAAQ,QAGpDV,EAAAtZ,UAAA8a,SAAA,WAAA,IAAAxU,EAAAnG,KACEA,KAAK6Z,SAAWa,YAAc,IAC9B1a,KAAK8Z,mBAAqB9Z,KAAK6Z,SAAW,MAAQ,OAClD7Z,KAAK4a,8BACL5a,KAAK6a,6BAELzK,OAAO0K,iBAAiB,WAAW,SAAAL,SAC3B1T,EAAO0T,EAAM1T,KAEH,gBADAA,EAAKwJ,SAAWxJ,EAAKwJ,QAAQtI,MAAM,KAAK,MAEtDd,EAAAhB,EAAKiT,eAAc1I,YAAW3Q,MAAAoH,EAAA1D,EAAIsD,EAAKyJ,cAK7C2I,EAAAtZ,UAAAkb,YAAA,WACE/a,KAAKmP,SAASzN,MAAK,IAGrByX,EAAAtZ,UAAAmb,WAAA,WAAA,IAAA7U,EAAAnG,KACQgH,EAAOjI,OAAOiI,KAAKhH,KAAKwZ,aAE9B,OADgBza,OAAOiI,KAAKhH,KAAKyZ,gBACpB7Z,QAGIoH,EAAKkK,QAAO,SAAA9Q,GAC3B,IAAM6a,EAAe9U,EAAKqT,YAAYpZ,GAAKoB,MACrC0Z,EAAW/U,EAAKsT,eAAerZ,IAAQ+F,EAAKsT,eAAerZ,GAAKoB,MACtE,OAAQuW,EAAAA,OAAOkD,EAAcC,MAEftb,OAAS,GAG3BuZ,EAAAtZ,UAAAsb,eAAA,WACEnb,KAAKgb,cAAgBhb,KAAKua,iBAAiBa,QAGtCjC,EAAAtZ,UAAA8R,WAAP,WACE3R,KAAKgb,cAAgBhb,KAAKoZ,cAAc3H,SAASzR,KAAKyP,WAGxD0J,EAAAtZ,UAAAwb,aAAA,SAAaC,GACX,QADW,IAAAA,IAAAA,GAAA,GACPtb,KAAKgb,aAAc,CACrBhb,KAAKsa,iBAAiBc,MAAK,GAC3Bpb,KAAKub,gBACL,IAAM3L,EAAU5P,KAAKwb,iBAAiBxb,KAAKwZ,aAC3CxZ,KAAKoZ,cAAczJ,kBAAkBC,QAChC,GAAI0L,EAAW,CACpB,IAAM/K,EAAU,CACdnQ,IAAK,wBACLqb,SAAU,OACVC,KAvGW,IAwGXC,OAAQ3b,KAAK+F,UAAUzB,QAAWgU,GAAgB,2BAA4B,CAAE5D,cAAe1U,KAAK4Z,sBAEtG5Z,KAAK4b,YAAYrL,GAEnBvQ,KAAKyZ,eAAiBoC,EAAAA,MAAM7b,KAAKwZ,cAGnCL,EAAAtZ,UAAAic,gBAAA,SAAgBxI,EAAmBjB,GACjC,YAAqBU,IAAjBO,GAA+BjB,GAAkC,KAApBiB,EAAa,GACrD,GAGFA,GAGT6F,EAAAtZ,UAAAkc,aAAA,WAAA,IAAA5V,EAAAnG,KACejB,OAAOiI,KAAKhH,KAAKwZ,aACzB1P,SAAQ,SAAA1J,GAAO,OAAA+F,EAAK6V,6BAA6B5b,OAGxD+Y,EAAAtZ,UAAAoc,iBAAA,WACE7L,OAAOC,OAAOC,YACZ,CACEC,QAAS,wBACTC,QAAS,CACP0L,UAAW,sBAGf,MAIJ/C,EAAAtZ,UAAA+b,YAAA,SAAYrL,GACNvQ,KAAKga,aACPha,KAAKqZ,eAAe8C,IAAI5L,GAExBH,OAAOC,OAAOC,YACZ,CACEC,QAAS,mBACTC,QAAS,CACPe,KAAM,UACNhB,QAASA,EAAQoL,SAGrB,MAKNxC,EAAAtZ,UAAAwR,YAAA,SAAY+K,GAAZ,IAAAjW,EAAAnG,UAAY,IAAAoc,IAAAA,GAAA,GACV,IAAMxM,EAAU5P,KAAKqc,mBAAmBrc,KAAKwZ,aA0B7CxZ,KAAKoZ,cACF/H,YAAYzB,GACZJ,WA3BwB,WACzB,IAAK4M,EAAW,CACd,IAAM7L,EAAU,CACdnQ,IAAK,wBACLqb,SAAU,OACVC,KAhKS,IAiKTC,OAAQxV,EAAKJ,UAAUzB,QAAWgU,GAAgB,yBAA0B,CAAE5D,cAAevO,EAAKyT,sBAEpGzT,EAAKyV,YAAYrL,GAGnBpK,EAAKoV,mBAGmB,WACxB,IAAMhL,EAAU,CACdnQ,IAAK,wBACLqb,SAAU,QACVC,KA7KW,IA8KXC,OAAQxV,EAAKJ,UAAUzB,QAAWgU,GAAgB,uBAAwB,CAAE5D,cAAevO,EAAKyT,sBAGlGzT,EAAKyV,YAAYrL,OAQrB4I,EAAAtZ,UAAAyc,gCAAA,SAAgCC,GAC9B,IAAM3M,EAAU5P,KAAKqc,mBAAmBrc,KAAKwZ,aAE7CxZ,KAAKoZ,cACF/H,YAAYzB,GACZJ,UAAU+M,IAGPpD,EAAAtZ,UAAA0b,cAAR,WACEvb,KAAK4Z,mBAAqB5Z,KAAKwc,mBAAmBxc,KAAKyc,MACvDzc,KAAKma,yBAAyBiB,KAAKpb,KAAK4Z,qBAGlCT,EAAAtZ,UAAA2c,mBAAR,SAA2BC,GACzB,IAAI7C,EAAqB,EAkBzB,OAhBA6C,EAAK3S,SAAQ,SAAA4S,GACH,IAAAlb,EAAAkb,EAAApI,KAAA9S,MACRkb,EAAQhI,cAAgB3V,OAAOiI,KAAKxF,GAAOiF,QAAO,SAACkW,EAAgBvc,GACjE,IAAMwc,EAAcpb,EAAMpB,GACpBuG,EAAUzH,MAAMyH,QAAQiW,GAO9B,OANqBjW,GAAWiW,EAAYhd,OAAS,IAE/B+G,GAAWiW,IAC/BD,IAGKA,IACN,GACH/C,GAAsB8C,EAAQhI,iBAGzBkF,GAGDT,EAAAtZ,UAAAwc,mBAAR,SAA2BzM,GAGzB,OAFY7Q,OAAOiI,KAAK4I,GAEbnJ,QAAO,SAACmD,EAAKiT,GAChB,IAAA1V,EAAAyI,EAAAiN,GAAEtL,EAAApK,EAAAoK,KAAM6B,EAAAjM,EAAAiM,SAAUlP,EAAAiD,EAAAjD,KAAM1C,EAAA2F,EAAA3F,MAAO6G,EAAAlB,EAAAkB,OAAQoH,EAAAtI,EAAAsI,SACvCmN,WJvQiBpb,EAAY+P,GACvC,IAAI8E,EAaJ,OARIA,EAJA9E,IAASlH,EAAAA,WAAWiM,QAAWpX,MAAMyH,QAAQnF,GAEtCtC,MAAMyH,QAAQnF,GACnBA,EAAM5B,OACmB,OAAb4B,EAAM,GAAc,CAAC,IAAMA,EAE3B,CAAC,IAGHA,GAAgB,CAAC,IARjB,CAAC,MAACA,EAAyC,GAAKA,GAWzDqF,KAAK0L,UAAU8D,GIyPEyG,CAAatb,EAAO+P,GAIxC,OAAA9N,EAAWmG,EAFIwJ,EAASvP,KAAI,SAAAyE,GAAW,MAAA,CAAGpE,KAAIA,EAAEoE,QAAOA,EAAE9G,MAAOob,EAAavU,OAAMA,EAAEoH,SAAQA,SAG5F,KAGG0J,EAAAtZ,UAAA2b,iBAAR,SAAyB5L,GAGvB,OAFY7Q,OAAOiI,KAAK4I,GAEbnJ,QAAO,SAACmD,EAAKiT,GAChB,IAAA1V,EAAAyI,EAAAiN,GAAEtL,EAAApK,EAAAoK,KAAM6B,EAAAjM,EAAAiM,SAAUlP,EAAAiD,EAAAjD,KAAM1C,EAAA2F,EAAA3F,MAAO6G,EAAAlB,EAAAkB,OAC/BuU,WJnQmBpb,EAAY+P,GACzC,IAAI8E,EAkBJ,OAjBI9E,IAASlH,EAAAA,WAAWiM,OACtBD,EAAc,CAAC,MAAC7U,EAAyC,GAAKA,GACrDtC,MAAMyH,QAAQnF,IAOvB6U,EAAc,CAAC,IACD,OAAV7U,GAAkBA,EAAM5B,OAAS,GAAkB,KAAb4B,EAAM,KAC9C6U,EAAc7U,EAAMqC,KAAI,SAAAd,GAAK,OAAAA,EAAe,oBAG9CsT,EAAc,CAAW,OAAV7U,EAAiB,GAAKA,EAAmB,gBAGnDqF,KAAK0L,UAAU8D,GIgPE0G,CAAevb,EAAO+P,GAG1C,OAAA9N,EAAWmG,EAFIwJ,EAASvP,KAAI,SAAAyE,GAAW,MAAA,CAAGpE,KAAIA,EAAEoE,QAAOA,EAAE9G,MAAOob,EAAavU,OAAMA,SAGlF,KAGG8Q,EAAAtZ,UAAA+a,4BAAR,WAAA,IAAAzU,EAAAnG,KACUA,KAAAoZ,cAAAhK,iBACSa,KAAK+M,EAAAA,UAAUhd,KAAKmP,WAAWK,WAAU,SAACC,GAAwB,OAACtJ,EAAKsJ,SAAWA,MAGtG0J,EAAAtZ,UAAAod,iBAAA,WACEjd,KAAKoZ,cAAc3H,SAASzR,KAAKyP,WAG3B0J,EAAAtZ,UAAAgb,2BAAR,WAAA,IAAA1U,EAAAnG,KACUA,KAAAoZ,cAAA9J,gBAGLW,KAAK+M,EAAAA,UAAUhd,KAAKmP,WACpBK,WAAU,SAACrI,OAAEyI,EAAAzI,EAAAyI,QAASgC,EAAAzK,EAAAyK,YAAapO,EAAA2D,EAAA3D,MAAO+M,EAAApJ,EAAAoJ,QACzCpK,EAAKkU,YAAYe,KAAK5X,GACtB2C,EAAK3C,MAAQA,EACb2C,EAAK+W,WAAa3M,EACb/M,GACH2C,EAAKgX,WAAWvN,EAASgC,OAKzBuH,EAAAtZ,UAAAsd,WAAR,SAAmBvN,EAAcgC,GAC/B5R,KAAKyc,KAAOzc,KAAKod,WAAWxN,GAC5B5P,KAAKub,gBACLvb,KAAKqd,gBAAgBrd,KAAKwZ,aAC1BxZ,KAAKsd,mBACD1N,EAAQhQ,OAAS,GAAKgS,GACxB5R,KAAKqb,gBAIDlC,EAAAtZ,UAAAwd,gBAAR,SAAwBzN,GAAxB,IAAAzJ,EAAAnG,KACQud,EAAQxe,OAAOiI,KAAK4I,GACL7L,EAAAA,KAAKwZ,GAAOtN,KAC/BpM,EAAAA,KAAI,SAAAzD,GAAO,OAAAwP,EAAQxP,MACnBod,EAAAA,QAAS,SAACrW,OAAEuM,EAAAvM,EAAAuM,UAAgB,OAAAA,GAAaA,EAAU9T,OAAS,KAC5D6d,EAAAA,KAAI,SAACtW,OAAEuM,EAAAvM,EAAAuM,UAAWrL,EAAAlB,EAAAkB,OAAQqV,EAAAvW,EAAAuW,cACDhK,EACpBxC,QAAO,SAAAyM,GAAO,OAAAA,EAAIzK,YAClBhC,QAAO,SAAAyM,GACN,IAAMC,EAAK9I,EAAYzM,EAAQsV,EAAI5I,YAC7B8I,EAAajO,EAAQgO,GACnBpc,EAAAqc,EAAArc,MAAO+P,EAAAsM,EAAAtM,KACP4G,EAAAwF,EAAAxF,WACR,GAAIA,GAAcC,GAAgBD,EAAWD,WAAaG,GAAgB9G,GAAO,CAC/E,IAAMuM,EAAaxI,EAAiB9T,EAAO+P,GAC3C,OAAQ0G,GAAQE,EAAWD,SAAUC,EAAW3W,MAAOsc,GAEzD,OAAOH,EAAIzK,UAAY2K,EAAWrc,MAAQqc,EAAWrc,SAGtC5B,OAAS,GAC1B8d,EAAcK,aAGlBla,EAAAA,KAAI,SAACsD,GAAyC,MAAA,CAAGkB,OAA1ClB,EAAAkB,OAAkDqL,UAA1CvM,EAAAuM,UAAqDgK,cAA1CvW,EAAAuW,mBAGflO,WAAU,SAACrI,OAAEuM,EAAAvM,EAAAuM,UAAWrL,EAAAlB,EAAAkB,OAAQqV,EAAAvW,EAAAuW,cAC3C,OAAA3Z,EAAAA,KAAK2P,GACFzD,KACCuN,EAAAA,QAAS,SAAAG,GAAO,OAAAA,EAAIzK,YACpBrP,EAAAA,KAAI,SAACsD,OAAE4N,EAAA5N,EAAA4N,WAAiB,OAAAD,EAAYzM,EAAQ0M,MAC5ClR,EAAAA,KAAI,SAAAgZ,GAAY,OAAAjN,EAAQiN,MACxBmB,EAAAA,UAAS,SAAAH,GAAc,OAAA9Z,EAAAA,KAAK8Z,EAAW3J,iBACvCrQ,EAAAA,KAAI,SAAAoa,GACF,IAAMC,EAAcxK,EAAUyK,OAAM,SAAAR,GAClC,IAAMd,EAAW/H,EAAYzM,EAAQsV,EAAI5I,YACzC,GAAI5O,EAAKqT,YAAYqD,GAAW,CAC9B,IAAMtL,EAAOpL,EAAKqT,YAAYqD,GAAUtL,KAChC4G,EAAAwF,EAAAxF,WACR,GAAIA,GAAcC,GAAgBD,EAAWD,WAAaG,GAAgB9G,GAAO,CAC/E,IAAM/P,EAAQ8T,EAAiB2I,EAAK1M,GACpC,OAAO0G,GAAQE,EAAWD,SAAUC,EAAW3W,MAAOA,GAExD,OAAO,MAGX,OAAQ2E,EAAKiY,QAAQH,IAAQC,EAAc,SAAW,cAGzD1O,WAAU,SAAA6O,GAAU,OAAAX,EAAcW,YAIjClF,EAAAtZ,UAAAye,gBAAR,SAAwBpN,GAAxB,IAAA/K,EAAAnG,KACUkE,EAAAgN,EAAAhN,KAAMmE,EAAA6I,EAAA7I,OAAQkJ,EAAAL,EAAAK,KAChBgN,EAAczJ,EAAYzM,EAAQnE,GAClCsa,EAAe/H,GAAkBvF,GAEvCsN,EAAatK,aACVjE,KACC+M,EAAAA,UAAUhd,KAAKmP,UACftL,EAAAA,KAAI,SAAAd,GAAK,OAAAuS,EAAiBvS,EAAGwO,MAC7BkM,EAAAA,KAAI,SAAAjc,GAAS,OAAC2E,EAAKqT,YAAY+E,GAAa/c,MAAQA,MAErDgO,WAAU,SAAAyO,GACT,OAAA9X,EAAKsW,KAAK3S,SAAQ,SAAA2U,GAChB,IAAMC,EAAUD,EAAInK,KAAKqK,SAASza,GAC9Bwa,GAAWD,EAAIpW,SAAWA,GAC5BqW,EAAQE,SAASX,EAAK,CAAEY,WAAW,UAK3C,IAAMC,EAASzf,EAAAA,EAAA,GAAQ6R,GAAW,CAAEhN,KAAMqa,IACpCQ,EAAW/e,KAAKgf,YAAYF,GAClC9e,KAAK2Z,QAAQrF,KAAK2K,WAAWV,EAAaC,GAC1Cxe,KAAK2Z,QAAQtF,OAAOlR,KAAK4b,IASnB5F,EAAAtZ,UAAAqf,oBAAR,SAA4BC,GAC1B,IAAKA,EAAWvf,OACd,OAAO,EAET,IAAMwf,EAAcpf,KAAKyP,SAAS5L,KAAI,SAAAkD,GAAQ,OAAAA,EAAKmT,aACnD,OAAOnC,EAAAA,OAAOoH,EAAWE,OAAQD,EAAYC,SAQvClG,EAAAtZ,UAAAud,WAAR,SAAmBxN,GAAnB,IAAAzJ,EAAAnG,KACE,OAAO4P,EAAQnJ,QAAO,SAACgW,EAAMvL,GACnB,IAAA7I,EAAA6I,EAAA7I,OAAQ+K,EAAAlC,EAAAkC,SAAUlP,EAAAgN,EAAAhN,KAAMqN,EAAAL,EAAAK,KAAM4B,EAAAjC,EAAAiC,MAAO1D,EAAAyB,EAAAzB,SAAUiE,EAAAxC,EAAAwC,UAAWlS,EAAA0P,EAAA1P,MAAOsQ,EAAAZ,EAAAY,OAAQwB,EAAApC,EAAAoC,aAC3E8C,EAAgBtE,GAA4D,IAAlDyE,EAAczE,GAAQE,OAAOW,iBACvD2M,EAAQnZ,EAAK6Y,YAAY9N,GACzB2L,EAAW/H,EAAYzM,EAAQnE,GAC/Bqb,EAAe,CACnBlX,OAAMA,EACNoH,SAAQA,EACR2D,SAAQA,EACRlP,KAAIA,EACJwP,UAASA,EACTlS,MAAO2U,EAAS3U,EAAO+P,EAAM6E,GAC7B7E,KAAIA,EACJc,YAAa+D,EACb9C,aAAc6C,EAAS7C,EAAc/B,EAAM6E,IAE7CjQ,EAAKqT,YAAYqD,GAAY,IAAIhJ,EAAW0L,GAC5C,IAAM1B,EAAa1X,EAAKqT,YAAYqD,GAgCpC,OA/BI1J,IAAU7I,EAAAA,MAAMkV,QAAUrZ,EAAK+Y,oBAAoBzP,IACrDtJ,EAAKmY,gBAAgBpN,GAGvBzB,EAAS3F,SAAQ,SAAAoQ,GACf,GAAKA,IAAc/T,EAAK+T,WAAkC,KAAnB/T,EAAK+T,UAAmB,CAC7D,IAAMuF,WP3bSpX,EAAgB6R,GACvC,OAAU7R,EAPuB,IAOQ6R,EO0bnBwF,CAASrX,EAAQ6R,GACzBsE,EAAe/H,GAAkBvF,GAEvC,IAAKuL,EAAKkD,IAAIF,GAAQ,CACZ,IAAAG,EAAAzZ,EAAAsJ,SAAA1H,MAAA,SAAAoJ,GAAA,OAAAA,EAAA+I,YAAAA,KAAA0F,aACFnB,EAAM,IAAIjK,EAAW,CAAEnM,OAAMA,EAAEnE,KAAM0b,IAC3CnD,EAAK/T,IAAI+W,EAAOhB,GAGlBD,EAAatK,aACVjE,KAAK+M,EAAAA,UAAU7W,EAAKgJ,WACpBK,WAAU,SAACyO,GAAa,OAAA9X,EAAK0Z,kBAAkBJ,EAAOvb,EAAM+Z,EAAK5V,EAAQkJ,MAE5E,IAAMuO,EAAarD,EAAKrW,IAAIqZ,GAE5BK,EAAWzL,OAAOlR,KAAKmc,GACvBQ,EAAWxL,KAAK2K,WAAW/N,EAAOhN,KAAMsa,GAEnCX,EAAWH,gBACdG,EAAWH,cAAgBc,OAM1B/B,IACN,IAAIsD,MAGD5G,EAAAtZ,UAAAggB,kBAAR,SAA0BG,EAAejL,EAAoBvT,EAAY6G,EAAgBkJ,GAAzF,IAAApL,EAAAnG,KACQigB,EAAc,CAAEpB,WAAW,GAC3Bf,EAAaxI,EAAiB9T,EAAO+P,GACrCsL,EAAW/H,EAAYzM,EAAQ0M,GAC/BmL,EAAsBlgB,KAAK2Z,QAAQrF,KAAKqK,SAAS9B,GAEvD7c,KAAKyc,KAAK3S,SAAQ,SAAC3C,EAAU/G,OACrBse,EADavX,EAAAmN,KACEqK,SAAS5J,GAE1BiL,IAAU5f,GAAOse,GACnBA,EAAQE,SAASpd,EAAOye,MAGpB,IAAAE,EAAAngB,KAAAwZ,YAAAqD,GAAAsD,OACRA,GAAUA,EAAOrW,SAAQ,SAACsW,GAAe,OAAAja,EAAK6V,6BAA6BoE,EAAMlP,OAAO9Q,QACxF8f,GAAuBA,EAAoBtB,SAASpd,EAAOye,GAC3DjgB,KAAKwZ,YAAYqD,GAAUrb,MAAQsc,GAG7B3E,EAAAtZ,UAAAmc,6BAAR,SAAqC5b,GAC7B,IAAA+G,EAAAnH,KAAAwZ,YAAApZ,GAAEiS,EAAAlL,EAAAkL,WAAYiB,EAAAnM,EAAAmM,aAAcoK,EAAAvW,EAAAuW,cAAenM,EAAApK,EAAAoK,KAC3C8O,EAAargB,KAAK8b,gBAAgBxI,EAAcjB,GAElDqL,KACW,SAATnM,GAA6B,WAATA,GAAqBc,IAC3CqL,EAAckB,SAASyB,GAEZ,YAAT9O,GAA+B,WAATA,GAA8B,UAATA,EAC9B,KAAf8O,EAAoB3C,EAAckB,SAAS,MAAQlB,EAAckB,SAASyB,GAE1E3C,EAAckB,SAASyB,EAAY,CAAEC,UAAU,MAK7CnH,EAAAtZ,UAAAyd,iBAAR,WAAA,IAAAnX,EAAAnG,KACejB,OAAOiI,KAAKhH,KAAKwZ,aACzB1P,SAAQ,SAAA1J,GACL,IAAA+G,EAAAhB,EAAAqT,YAAApZ,GAAEsT,EAAAvM,EAAAuM,UAAWrL,EAAAlB,EAAAkB,OACnBqL,EAAU5J,SAAQ,SAACwV,GACjB,IAAMzC,EAAW/H,EAAYzM,EAAQiX,EAAMvK,YACvC5O,EAAKqT,YAAYqD,KACd1W,EAAKqT,YAAYqD,GAAUsD,SAC9Bha,EAAKqT,YAAYqD,GAAUsD,OAAS,IAEtCha,EAAKqT,YAAYqD,GAAUsD,OAAOhd,KAAK,CAAE+N,OAAQ,CAAE9Q,IAAGA,EAAE8S,SAAUoM,EAAMpM,oBAMxEiG,EAAAtZ,UAAAmf,YAAR,SAAoB9N,SAApB/K,EAAAnG,KACUkE,EAAAgN,EAAAhN,KAAM5B,EAAA4O,EAAA5O,MAAO+Q,EAAAnC,EAAAmC,UAAW9B,EAAAL,EAAAK,KAAMoC,EAAAzC,EAAAyC,KAChC4M,EACJlN,GAAaA,EAAUxP,KAAI,SAAC6C,GAAmB,MAAA,CAAGpE,MAAO6D,EAAKJ,UAAUzB,QAAQoC,EAAKpE,OAAQd,MAAOkF,EAAKlF,UACrG8d,EAAQ,CAAEpb,KAAIA,EAAE5B,MAAOtC,KAAK+F,UAAUzB,QAAQhC,GAAQke,YAAa,IA2BzE,QAzBcrZ,EAAA,IACXkD,EAAAA,WAAWoN,QAAS,WAAM,OAAA,IAAIgJ,EAAAA,UAASphB,EAAAA,EAAA,GAAMigB,GAAK,CAAE3L,KAAMA,EAAO,WAAM,OAAAA,GAAO,KAAMpC,KAAMmP,EAAAA,UAAUC,WACrGxZ,EAACkD,EAAAA,WAAW+M,OAAQ,WAAM,OAAA,IAAIwJ,EAAAA,cAAavhB,EAAAA,EAAA,GAAMigB,GAAK,CAAE/N,KAAMmP,EAAAA,UAAUG,UACxE1Z,EAACkD,EAAAA,WAAWqN,SAAU,WAAM,OAAAvR,EAAK2a,kBAAiBzhB,EAAA,GAAMigB,KACxDnY,EAACkD,EAAAA,WAAW+K,MAAO,WAAM,OAAAjP,EAAK4a,eAAc1hB,EAAAA,EAAA,GAAMigB,GAAK,CAAE/N,KAAMmP,EAAAA,UAAUM,SACzE7Z,EAACkD,EAAAA,WAAW2K,UAAW,WAAM,OAAA7O,EAAK4a,eAAc1hB,EAAAA,EAAA,GAAMigB,GAAK,CAAE/N,KAAMmP,EAAAA,UAAUO,aAC7E9Z,EAACkD,EAAAA,WAAW6K,MAAO,WAAM,OAAA/O,EAAK4a,eAAc1hB,EAAAA,EAAA,GAAMigB,GAAK,CAAE/N,KAAMmP,EAAAA,UAAUQ,SACzE/Z,EAACkD,EAAAA,WAAWsN,aAAc,WACxB,OAAA,IAAIwJ,EAAAA,YAAW9hB,EAAAA,EAAA,GACVigB,GAAK,CACRkB,YAAara,EAAKJ,UAAUzB,QAAQ,kCACpC8c,QAAS3d,EAAI8c,GACbhP,KAAMmP,EAAAA,UAAUW,SAEpBla,EAACkD,EAAAA,WAAW6M,SAAU,WACpB,OAAA,IAAIoK,EAAAA,YAAWjiB,EAAAA,EAAA,GACVigB,GAAK,CACRiC,oBAAqBpb,EAAKqb,iBAC1B7N,KAAMA,EAAO,WAAM,OAAAA,GAAO,KAC1BpC,KAAMmP,EAAAA,UAAUe,YAEpBta,EAACkD,EAAAA,WAAW8M,QAAS,WAAM,OAAA,IAAIyJ,EAAAA,cAAavhB,EAAAA,EAAA,GAAMigB,GAAK,CAAE/N,KAAMmP,EAAAA,UAAUgB,WACzEva,EAACkD,EAAAA,WAAWiM,QAAS,WAAM,OAAAnQ,EAAKwb,wBAAwBrC,EAAOpO,OAGjDK,MAGV4H,EAAAtZ,UAAAihB,kBAAR,SAA0BxB,GACxB,IAAM8B,EAAU,CACd,CAAE9e,MAAOtC,KAAK+F,UAAUzB,QAAWgU,GAAgB,QAAS9W,OAAO,GACnE,CAAEc,MAAOtC,KAAK+F,UAAUzB,QAAWgU,GAAgB,OAAQ9W,OAAO,IAGpE,OAAO,IAAIogB,EAAAA,iBAAgBviB,EAAAA,EAAA,GAAMigB,GAAK,CAAE/N,KAAMmP,EAAAA,UAAUmB,MAAOT,QAAOA,MAGhEjI,EAAAtZ,UAAAkhB,eAAR,SAAuB3Y,GACrB,IAAM0Z,EAAW,IAAIC,EAAAA,cAAc3Z,GAGnC,OAFA0Z,EAASE,sBAAwBhiB,KAAKsZ,uBAAuBd,aACxDxY,KAAKia,UAAS6H,EAASG,SAAW,QAChCH,GAGD3I,EAAAtZ,UAAA8hB,wBAAR,SAAgCrC,EAAoBnY,GAApD,IAAAhB,EAAAnG,KAAsD0T,EAAAvM,EAAAuM,UAAW5B,EAAA3K,EAAA2K,OAAQzJ,EAAAlB,EAAAkB,OAAQnE,EAAAiD,EAAAjD,KACzEge,EAAwB,IAAIjT,EAAAA,gBAAuB,IACjDkT,EAAA5L,EAAAzE,GAAAsQ,MAAAD,WACFxZ,EAAA4N,EAAAzE,GAAAE,OAAEG,EAAAxJ,EAAAwJ,cAAeD,EAAAvJ,EAAAuJ,UAAWmQ,EAAA1Z,EAAA0Z,mBAAoBC,EAAA3Z,EAAA2Z,wBAAyB3P,EAAAhK,EAAAgK,iBACzEkK,EAAW/H,EAAYzM,EAAQnE,GAoCrC,OAAO,IAAIqe,EAAAA,kBAAiBljB,EAAAA,EAAA,GACvBigB,GAAK,CACRkD,SA3Be,SAACvE,SACVzV,IAAMrB,EAAA,IAAMgb,GAAalE,EAAG9W,GAClCuM,GAAa3U,OAAOO,OAAOkJ,EAAQrC,EAAKsc,sBAAsB/O,EAAWrL,IAEzE,IAAMqa,EACJ5Q,GAA0B,WAAhBA,EAAOP,KACbpL,EAAKwc,mBAAmB7Q,EAAOM,aAAagQ,MAAOnE,EAAKvK,GACxD6C,EAAczE,GAAQsQ,MAAM7Y,IAElCpD,EAAKiT,cACF9H,uBAAuBoR,EAAWla,EAAQsJ,EAAOP,MACjDtB,KACCpM,EAAAA,KAAI,SAAAqM,GAAY,gBC9lBV0S,EAASC,EAAgBC,GAEvC,IAAMC,GADND,EAAOA,EAAKhb,QAAQ,KAAM,KACJG,MAAM,KAEtBzG,EAAQqhB,EADME,EAAS,IAI7B,OAFAA,EAASC,QAELD,EAASnjB,OACJgjB,EAASphB,EAAOuhB,EAAS/P,KAAK,MAEhCxR,EDolBiBohB,CAAS1S,EAAUmS,MACnCxe,EAAAA,KAAI,SAACof,GAAuB,OAAA9c,EAAK+c,oBAAoBD,EAAa9Q,EAAeD,EAAWoQ,EAAyBzF,OAEtHrN,WAAU,SAAA3N,GACTqgB,EAAsBxgB,KAAKG,GAC3BsE,EAAKoT,kBAAkB4J,mBACtB,SAAC3f,GACF,IAAI4f,OAAerQ,EACfvP,GAASA,EAAMA,MAAM+M,UAAS6S,EAAe5f,EAAMA,MAAM+M,SA9B1C,SAAC6S,GACxB,IACM7S,EAAU,CACdnQ,IAAK,wBACLqb,SAAU,QACVC,KA/hBW,IAgiBXC,OALoByH,GAA8Bjd,EAAKJ,UAAUzB,QAAWgU,GAAgB,0BAA2B,CAAE5D,cAAevO,EAAKyT,sBAO/IzT,EAAKyV,YAAYrL,GAuBb8S,CAAiBD,OAOrBnB,SAAU,OACVC,sBAAqBA,EACrBoB,aEhnB2B,qBFinB3BC,QEhnBuB,iBFinBvBC,SAAU7Q,EAAmB,EAC7B8Q,KAAM,CAAEC,GAAI,GAAIC,GAAI,GAAIC,GAAI,IAC5BC,aAAc7jB,KAAK+F,UAAUzB,QAAWgU,GAAgB,6BAIpDa,EAAAtZ,UAAA8iB,mBAAR,SAA2B7Q,EAA2BtQ,EAAekS,GAArE,IAAAvN,EAAAnG,KACU8jB,EAAAhS,EAAAgS,WAAYC,EAAAjS,EAAAiS,WAAYC,EAAAlS,EAAAkS,WAAYC,EAAAnS,EAAAmS,YACtC1a,EAASwa,EAAU,IAAIE,EAAW,aAAaD,EAAU,YACzDpU,EAAekU,EAAWjgB,KAAI,SAAAgS,GAAQ,OAAAF,EAAgBE,EAAKsC,YAAYtC,EAAK3R,KAAM1C,MAUxF,OARAkS,GACEA,EAAU5J,SAAQ,SAAAoa,GAChB,IAAMrH,EAAW/H,EAAYiP,EAAYG,EAAInP,YACvC+I,EAAa3X,EAAKqT,YAAYqD,GAAUrb,MAAmB,eACjEoO,EAAQzM,KAAQ+gB,EAAIC,gBAAe,QAAQrG,EAAU,QAIlDvU,EAAI7F,OAAOkM,GAAS9H,QAAQ,oBAAqB,IAAIgK,EAAOoG,SAAQ,MAGrEiB,EAAAtZ,UAAAqjB,oBAAR,SAA4BD,EAAoB9Q,EAAyBD,EAAqBkS,EAAmBvH,GAAjH,IAAA1W,EAAAnG,KACQqkB,EAAW,SAACC,EAAa9iB,EAAY+iB,GAAkB,OAACD,EAAM,GAAGA,EAAMC,EAAQ/iB,EAAUA,GAEzFK,EAASohB,EAAYpf,KAAI,SAAA2gB,SAAc,OAAAnlB,EAAAA,EAAA,GACxCmlB,KAAUrd,EAAA,IACK,mBAAGgL,EAAc1L,QAAO,SAACjF,EAAOijB,GAChD,OAAOJ,EAAS7iB,EAAO2E,EAAKJ,UAAUzB,QAAQkgB,EAAWC,IAAWL,KACnE,IAAGjd,EACQ,eAAG+K,EAAUzL,QAAO,SAACjF,EAAOpB,GAAQ,OAAAikB,EAAS7iB,EAAOgjB,EAAWpkB,GAAM,QAAO,IAAG+G,OAI/F,OAFAnH,KAAKwZ,YAAYqD,GAAU6H,aAAiC,IAAlB7iB,EAAOjC,OAE1CiC,EAAOqP,QAAO,SAAAxK,GACX,IAAAlF,EAAA2E,EAAAqT,YAAAqD,GAAArb,MACR,OAAItC,MAAMyH,QAAQnF,IAED,IADDA,EAAMmjB,WAAU,SAACllB,GAAW,OAAAA,EAAEmlB,iBAAmBle,EAAKke,kBAE3Dle,OADT,EAIOA,MAKLyS,EAAAtZ,UAAA4iB,sBAAR,SAA8BoC,EAA2Bxc,GAAzD,IAAAlC,EAAAnG,KACE,OAAO6kB,EAAape,QAAO,SAAC+B,EAAQrB,OAAE4N,EAAA5N,EAAA4N,WAC9B8H,EAAW/H,EAAYzM,EAAQ0M,GACrC,GAAI5O,EAAKqT,YAAYqD,GAAW,CACxB,IAAAlU,EAAAxC,EAAAqT,YAAAqD,GAAErb,EAAAmH,EAAAnH,MAWR,MAVa,gBADEmH,EAAA4I,KAEb/I,EAAOuM,GAAcvT,EAEjBtC,MAAMyH,QAAQnF,GAChBgH,EAAOuM,GAAcvT,EAAMqC,KAAI,SAAAihB,GAAO,OAAAA,EAAiB,kBAEvDtc,EAAOuM,GAAcvT,EAAQA,EAAmB,eAAI,CAAC,IAGzD2E,EAAKiY,QAAQ5V,EAAOuM,YAAuBvM,EAAOuM,GAC3CvM,KAER,KAMG2Q,EAAAtZ,UAAAue,QAAR,SAAgB5c,GACd,OAAOtC,MAAMyH,QAAQnF,GAASA,EAAM2c,OAAM,SAAApX,GAAQ,OAACA,MAASvF,GAMtD2X,EAAAtZ,UAAA2hB,eAAR,WACE,MAAO,CAAEuD,eAAgB,GAAIC,iBAAkB,GAAIC,mBAAoB,8CA5mBhDpW,SACLtK,EAAAA,wBACM2gB,EAAAA,sBACQ3M,UACL4M,EAAAA,qBAfpBllB,EAAA,CAARmlB,EAAAA,4CACQnlB,EAAA,CAARmlB,EAAAA,uCACQnlB,EAAA,CAARmlB,EAAAA,yCAGSnlB,EAAA,CAATolB,EAAAA,yDACSplB,EAAA,CAATolB,EAAAA,4CACSplB,EAAA,CAATolB,EAAAA,iDACSplB,EAAA,CAATolB,EAAAA,iDAWDplB,EAAA,CADCqlB,EAAAA,aAAa,gBAAiB,CAAC,+CAtCrBnM,EAAmBlZ,EAAA,CAL/BslB,EAAAA,UAAU,CACTC,SAAU,oBACVC,SAAA,w6DAGWtM,oBGbX,SAAAuM,EAAmB3f,EAAqC4f,GAAxD,IAAAxf,EAAAnG,KAAmBA,KAAA+F,UAAAA,EAAqC/F,KAAA2lB,OAAAA,EAzB/C3lB,KAAA4lB,YAAc,UACd5lB,KAAA6lB,aAAc,EACd7lB,KAAA8lB,aAAc,EACd9lB,KAAA+lB,eAAgB,EAChB/lB,KAAAgmB,6BAA8B,EAC9BhmB,KAAAimB,eAAgB,EAChBjmB,KAAAka,UAAY,GAErBla,KAAAkmB,cAAgC,GAEhClmB,KAAA6Z,UAAW,EACX7Z,KAAA8Z,mBAAqB,OACrB9Z,KAAA4Z,mBAAqB,EACrB5Z,KAAAmmB,YAAa,EACbnmB,KAAAwD,OAAQ,EACRxD,KAAAomB,cAAgB,GAKhBpmB,KAAAqmB,oBAAsB,CACpB,CAAEzI,GAAI,OAAQtb,MAAOtC,KAAK+F,UAAUzB,QAAQ,QAASgiB,QAAS,WAAM,OAAAngB,EAAKogB,eAAelV,gBACxF,CAAEuM,GAAI,QAAStb,MAAOtC,KAAK+F,UAAUzB,QAAQ,SAAUgiB,QAAS,WAAM,OAAAngB,EAAKogB,eAAexK,kBA2F9F,OAtFE2J,EAAA7lB,UAAA8a,SAAA,WAAA,IAAAxU,EAAAnG,KACEA,KAAK6Z,SAAWa,YAAc,IAC9B1a,KAAK8Z,mBAAqB9Z,KAAK6Z,SAAW,MAAQ,OAElD,IAAM2M,EAAMxmB,KAAK2lB,OAAOc,OAAOjX,WAAU,SAAA7N,GACnCA,aAAa+kB,EAAAA,eACfvgB,EAAKogB,eAAe5U,gBAIxB3R,KAAKkmB,cAAc/iB,KAAKqjB,IAG1Bd,EAAA7lB,UAAAkb,YAAA,WACE/a,KAAKkmB,cAAcpc,SAAQ,SAAA/G,GAAK,OAAAA,EAAE4jB,kBAIpCjB,EAAA7lB,UAAA2a,eAAA,SAAeC,GACL,IAAAC,EAAAD,EAAAta,OAAAua,WACR1a,KAAK6Z,SAAWa,GAAc,IAC9B1a,KAAK8Z,mBAAqB9Z,KAAK6Z,SAAW,MAAQ,QAGpD9a,OAAA4B,eAAI+kB,EAAA7lB,UAAA,wBAAqB,KAAzB,WACE,OAAOG,KAAK4Z,mBAAqB,EAC7B5Z,KAAK+F,UAAUzB,QAAWgU,kDAA4C,CAAEsO,mBAAoB5mB,KAAK4Z,qBACjG5Z,KAAK+F,UAAUzB,QAAWgU,iDAA2C,CAAEsO,mBAAoB5mB,KAAK4Z,sDAGtG8L,EAAA7lB,UAAAgnB,QAAA,SAAQpM,GACNza,KAAKwD,MAAQiX,GAGfiL,EAAA7lB,UAAAwR,YAAA,SAAY+K,QAAA,IAAAA,IAAAA,GAAA,GACVpc,KAAKumB,eAAelV,YAAY+K,IAGlCsJ,EAAA7lB,UAAAyc,gCAAA,SAAgCC,GAC9Bvc,KAAKumB,eAAejK,gCAAgCC,IAGtDmJ,EAAA7lB,UAAAkc,aAAA,WACE/b,KAAKumB,eAAexK,gBAGtB2J,EAAA7lB,UAAAinB,MAAA,WACE9mB,KAAKumB,eAAe5U,aACpBvB,OAAOC,OAAOC,YACZ,CACEC,QAAS,wBACTC,QAAS,CACP0L,UAAW,sBAGf,MAIJwJ,EAAA7lB,UAAAwb,aAAA,WACMrb,KAAKumB,eAAevL,eACtBhb,KAAKmmB,YAAa,GAGhBnmB,KAAKimB,eACPjmB,KAAKumB,eAAelV,cAGtBrR,KAAKumB,eAAelL,cAAa,IAGnCqK,EAAA7lB,UAAAsb,eAAA,WACMnb,KAAKimB,eACPjmB,KAAKumB,eAAelV,cAGtBrR,KAAKumB,eAAepL,kBAGtBuK,EAAA7lB,UAAAknB,aAAA,WACE/mB,KAAKmmB,YAAcnmB,KAAKmmB,YAG1BT,EAAA7lB,UAAAmnB,yBAAA,SAAyBvM,GACvBza,KAAK4Z,mBAAqBa,4CAtFElW,EAAAA,wBAAkC0iB,EAAAA,UAzBvDhnB,EAAA,CAARmlB,EAAAA,2CACQnlB,EAAA,CAARmlB,EAAAA,2CACQnlB,EAAA,CAARmlB,EAAAA,2CACQnlB,EAAA,CAARmlB,EAAAA,6CACQnlB,EAAA,CAARmlB,EAAAA,2DACQnlB,EAAA,CAARmlB,EAAAA,6CACQnlB,EAAA,CAARmlB,EAAAA,yCAYDnlB,EAAA,CADCinB,EAAAA,UAAU/N,0CA4BXlZ,EAAA,CADCqlB,EAAAA,aAAa,gBAAiB,CAAC,+CA7CrBI,EAAuBzlB,EAAA,CANnCslB,EAAAA,UAAU,CACTC,SAAU,oBACVC,SAAA,20HAEA0B,cAAeC,EAAAA,kBAAkBC,o+CAEtB3B,SCQb,2BAoBA,SAAA4B,KAAmC,OAAtBA,EAAoBrnB,EAAA,CAnBhC0F,EAAAA,SAAS,CACRC,QAAS,CACP2hB,EAAAA,aACAC,EAAAA,aACAC,EAAAA,aACAC,EAAAA,cACAC,EAAAA,aACAC,EAAAA,YACAC,EAAAA,oBACAC,EAAAA,kBACAC,EAAAA,YACAC,EAAAA,iBACAC,EAAAA,cACAvjB,EAAmBgB,SAAS,CAAC,CAAC2C,OAAQ,WAAYC,QAAS,iBAAkBf,SAAQA,MAEvFxC,UAAW,CAAC8J,EAAuBqZ,EAAAA,cAAehD,EAAAA,eAAgB3gB,EAAAA,iBAAkBgU,IACpF4P,aAAc,CAACzC,GAAyBvM,GAAqBxV,EAAeS,GAC5E6Q,QAAS,CAACyQ,GAAyBvM,OAExBmO,oBCjCb,SAAAc,YACSA,EAAAvoB,UAAAwoB,UAAP,SAAiBC,EAAuB5mB,GAItC,OAHI4mB,EAAIrmB,gBAAgBsmB,OAAS,GAASD,EAAIrmB,gBAAgBumB,WAAa,IACzEF,EAAMA,EAAIzM,MAAM,CAAE5Z,KAAMwmB,EAAGC,QAAQJ,EAAIrmB,SAElCP,EAAKinB,OAAOL,GAAKrY,KACtBpM,EAAAA,KAAI,SAAC4W,GAIH,OAHIA,aAAiBmO,EAAAA,eACnBnO,EAAQA,EAAMoB,MAAM,CAAE5Z,KAAMwmB,EAAGI,WAAWpO,EAAMxY,SAE3CwY,kGAVF2N,EAAqBnoB,EAAA,CAHjCgT,EAAAA,WAAW,CACV6V,WAAY,UAEDV,oBCDb,SAAAW,KAA0C,OAA7BA,EAA2B9oB,EAAA,CAJvC0F,EAAAA,SAAS,CACRC,QAAS,CAACC,EAAAA,kBACVd,UAAW,CAAC,CAAEC,QAASgkB,EAAAA,kBAAmBC,SAAUb,GAAuB5iB,OAAO,OAEvEujB,oBCHb,SAAAG,KAIA,OAHEA,EAAArpB,UAAAuG,IAAA,WACE,OAAO+iB,EAAAA,OAAM,WAAM,OAAAplB,EAAAA,KAAKuE,EAAAA,QAAQ8gB,kBAFvBF,EAAOjpB,EAAA,CADnBgT,EAAAA,cACYiW,oBCAb,SAAAG,KASA,OAPEA,EAAAxpB,UAAAuG,IAAA,WACE,OAAO+iB,EAAAA,OAAM,WACX,IAAM5f,EAAMjB,EAAAA,QAAQghB,kBACpB,OAAOvlB,EAAAA,KAAKwF,OALL8f,EAAYppB,EAAA,CADxBgT,EAAAA,cACYoW,oBCOX,SAAAE,EAA6BC,EAAmCC,GAAnCzpB,KAAAwpB,QAAAA,EAAmCxpB,KAAAypB,aAAAA,EAkClE,OAhCSF,EAAA1pB,UAAAwoB,UAAP,SAAiBqB,EAA+BhoB,GAAhD,IAAAyE,EAAAnG,KACE,IAAK0pB,EAAYngB,IAAIogB,SAAS,OAAQ,CACpC,IAAM9gB,EAAgBsgB,EAAAA,OAAM,WAAM,OAAAplB,EAAAA,KAAKkD,EAAAA,KAAK4B,oBAC5C,GAAI,iDAAiD+gB,KAAKF,EAAYngB,KAAM,CAC1E,IAAM+f,EAAkBtpB,KAAKypB,aAAarjB,MAC1C,OAAOyjB,EAAAA,SAAS,CAACP,EAAiBzgB,IAAgBoH,KAChD+N,EAAAA,UAAS,SAACha,GACF,IAAAmD,EAAA/D,EAAAY,EAAA,GAAC8lB,EAAA3iB,EAAA,GAAM4iB,EAAA5iB,EAAA,GACb,OAAOhB,EAAK6jB,cAAcN,EAAahoB,EAAMooB,EAAMC,OAIzD,IAAMX,EAAappB,KAAKwpB,QAAQpjB,MAChC,OAAOyjB,EAAAA,SAAS,CAACT,EAAYvgB,IAAgBoH,KAC3C+N,EAAAA,UAAS,SAACha,GACF,IAAAmD,EAAA/D,EAAAY,EAAA,GAACimB,EAAA9iB,EAAA,GAAW4iB,EAAA5iB,EAAA,GAClB,OAAOhB,EAAK6jB,cAAcN,EAAahoB,EAAMuoB,EAAWF,OAI9D,OAAOroB,EAAKinB,OAAOe,IAGbH,EAAA1pB,UAAAmqB,cAAR,SAAsBN,EAA+BhoB,EACnDwoB,EAAiBC,GACjB,IAAMC,EAAUV,EAAY7N,MAAM,CAChCtS,IAAK2gB,EAAUR,EAAYngB,IAC3BT,QAAS4gB,EAAY5gB,QAAQJ,IAAI,gBAAiByhB,KAEpD,OAAOzoB,EAAKinB,OAAOyB,6CA/BiBlB,UAAwCG,MAFnEE,EAAetpB,EAAA,CAD3BgT,EAAAA,cACYsW,oBCCb,SAAAc,KAAoC,OAAvBA,EAAqBpqB,EAAA,CAJjC0F,EAAAA,SAAS,CACRC,QAAS,CAACC,EAAAA,kBACVd,UAAW,CAACmkB,GAASG,GAAc,CAAErkB,QAASgkB,EAAAA,kBAAmBC,SAAUM,GAAiB/jB,OAAO,OAExF6kB,MCTAC,GAAY,IAAI7lB,EAAAA,eAA0B,aAC1C8lB,GAAc,IAAI9lB,EAAAA,eAA4B,kBAyB3D,2BCVE,SAAA+lB,EACsCC,EACEC,EACrBzkB,EACA0f,EACAtM,EACAtT,GALmB/F,KAAAyqB,UAAAA,EACEzqB,KAAA0qB,YAAAA,EACrB1qB,KAAAiG,KAAAA,EACAjG,KAAA2lB,OAAAA,EACA3lB,KAAAqZ,eAAAA,EACArZ,KAAA+F,UAAAA,EATX/F,KAAA2qB,mBAAmC,GACnC3qB,KAAA4qB,UAAY,wCAYpBJ,EAAA3qB,UAAAgrB,YAAA,SAAYJ,GAAZ,IAAAtkB,EAAAnG,KACQ8qB,EAAqB,GAY3B,OAVAL,EAAU3gB,SAAQ,SAAAihB,GAChBA,EAAIC,QAAQlhB,SAAQ,SAAAmhB,GAClB,IAAKF,EAAIG,IAAK,CACZ,IAAMC,EAAWhlB,EAAKilB,qBAAqBL,EAAI7mB,KAAM6mB,EAAIM,QACzDN,EAAIG,IAAMC,EAEZL,EAAY3nB,KAAK,CAAE8nB,OAAMA,EAAEE,SAAUJ,EAAIG,YAItClrB,KAAKiG,KAAK8J,KAAQ/P,KAAK4qB,UAAS,eAAgB,CAAEU,gBAAgB,EAAMR,YAAWA,IAAI7a,KAC5FpM,EAAAA,KAAI,SAACsD,OAAEwjB,EAAAxjB,EAAA2jB,YACL3kB,EAAKwkB,mBAAkBlnB,EAAO0C,EAAKwkB,mBAAuBA,GAE1D,IAAM3mB,EAAS,GAEf,OAAImC,EAAKolB,8BAA8Bd,EAAWE,IAChDxkB,EAAKwf,OAAO6F,SAAS,CAAC,QAAS,MACxBC,EAAAA,WAAW,eAGpBd,EAAmB7gB,SAAQ,SAAA4hB,GACzB,IACQxnB,EADSumB,EAAU1iB,MAAK,SAAAmB,GAAO,OAAAA,EAAIgiB,MAAQQ,EAAWP,YACtDjnB,KAERF,EAAOE,GAAQF,EAAOE,IAAS,GAC/BF,EAAOE,GAAMwnB,EAAWT,QAAUS,EAAWC,WAC7C3nB,EAAOE,GAAMwnB,EAAWT,OAAOW,eAAiBF,EAAWC,WAEvDD,EAAWG,iBAAmBH,EAAWG,gBAAgBjsB,SACtDoE,EAAOE,GAAuB,kBACjCF,EAAOE,GAAuB,gBAAI,IAGpCwnB,EAAWG,gBAAgB/hB,SAAQ,SAACgiB,GAClC9nB,EAAOE,GAAuB,gBAAEf,KAAK2oB,UAKpC9nB,QAMbwmB,EAAA3qB,UAAAuG,IAAA,SAAI+kB,GAAJ,IAAAhlB,EAAAnG,KAIE,YAJE,IAAAmrB,IAAAA,EAAA,IACGY,EAAAA,UACHA,EAAAA,QAAU/rB,KAAKgsB,kBAEVjoB,EAAAA,KAAKgoB,EAAAA,SAAS9b,KACnBpM,EAAAA,KAAI,SAACinB,GAGH,OAFA3kB,EAAKwkB,mBAAqBG,EAEtBK,EAEKL,EADa/rB,OAAOiI,KAAK8jB,GAAa/iB,MAAK,SAAA3H,GAAO,OAAAA,EAAIwrB,gBAAkBT,EAASS,kBAGnFd,KAETmB,EAAAA,YAAW,SAACxb,GAQV,OAPAsb,EAAAA,aAAUhZ,EACV5M,EAAKkT,eAAe8C,IAAI,CACtBV,SAAU,QACVyQ,QAAS/lB,EAAKJ,UAAUzB,QAAQ,4BAChCqX,OAAQxV,EAAKJ,UAAUzB,QAAQ,6BAG1B6nB,EAAAA,GAAGhmB,EAAKimB,qBAAoB,SAKzC5B,EAAA3qB,UAAAwsB,aAAA,SAAaC,EAAsBrB,EAAgBsB,GAC5CvsB,KAAK2qB,mBAAmB/qB,QAC3B6rB,EAAAA,WAAW,uFAGb,IAAMe,EAAcxsB,KAAKorB,qBAAqBkB,EAAcC,GAGtDE,EADwBzsB,KAAK2qB,mBAAmBzZ,QAAO,SAAAwb,GAAQ,OAAAA,EAAKvB,WAAaqB,KACtCzkB,MAAK,SAAA4kB,GAAW,OAAAA,EAAQ1B,OAAOW,gBAAkBX,EAAOW,iBAEzG,OAAOa,GAAsBA,EAAmBd,YAG1CnB,EAAA3qB,UAAAurB,qBAAR,SAA6BkB,EAAsBC,GAC3C,IAAAplB,EAAAnH,KAAA0qB,YAAEriB,EAAAlB,EAAAkB,OAAQC,EAAAnB,EAAAmB,QAEXD,GAAWC,GACdmjB,EAAAA,WAAW,2CAGb,IAAMmB,EAAU,uBAAuBvkB,EAAM,IAAIC,EAEjD,OAAIikB,EACQK,EAAO,aAAaN,EAEpBM,EAAO,IAAIN,GAQjB9B,EAAA3qB,UAAA0rB,8BAAR,SAAsCd,EAA4BK,QAA5B,IAAAL,IAAAA,EAAA,IACpC,IAAMoC,EAAoB/B,EAAY5Z,QAAO,SAAAwb,GAAQ,OAACA,EAAKf,cAE3D,GAAIkB,GAAqBA,EAAkBjtB,OAAQ,CACjD,IAAMktB,EAAmBrC,EAAUvZ,QAAO,SAAAia,GAAY,OAAAA,EAAS4B,mBAE/D,SAAID,IAAoBA,EAAiBltB,SAChCktB,EAAiB3O,OAAM,SAAAgN,GAG5B,OAFuBA,EAAS6B,gBAAkB7B,EAAS6B,eAAeptB,OAASurB,EAAS6B,eAAiB7B,EAASH,SAEhG7M,OAAM,SAAA8M,GAC1B,OAAA4B,EAAkBI,MAAK,SAAAC,GAAoB,OAAAA,EAAiB/B,WAAaA,EAASD,KAAOgC,EAAiBjC,SAAWA,WAQ7H,OAAO,GAGDT,EAAA3qB,UAAAstB,mBAAR,WACE,OAAOntB,KAAK0qB,YAAY0C,mBAGlB5C,EAAA3qB,UAAAwtB,iBAAR,WACE,OAAOrtB,KAAKyqB,UAAUhkB,QAAO,SAAC5E,EAAoB6E,GAChD,OAAKA,EAIDxH,MAAMyH,QAAQD,GAChBjD,EAAW5B,EAAW6E,GAGxBjD,EAAW5B,EAAM,CAAE6E,IAPV7E,IAQR,KAGG2oB,EAAA3qB,UAAAusB,oBAAR,SAA4B9Y,GAC1B,OAAOtT,KAAKqtB,mBAAmB5mB,QAAO,SAACgkB,EAAmBU,GAMxD,OALAV,EAAUU,EAASjnB,MAAQinB,EAASH,QAAQvkB,QAAO,SAACukB,EAAcC,GAGhE,OAFAD,EAAQC,GAAU3X,EAClB0X,EAAQC,EAAOW,eAAiBtY,EACzB0X,IACN,IACIP,IACN,KAGSD,EAAA3qB,UAAAmsB,eAAd,iHACE,OAAIhsB,KAAKmtB,qBACP,CAAA,EAAOntB,KAAKosB,qBAAoB,KAE5B3B,EAAYzqB,KAAKqtB,mBACjBX,EAAOjC,EACV5mB,KAAI,SAAAsnB,GAAY,OAAAA,EAASH,QAAQnnB,KAAI,SAAConB,GAAgB,MAAA,CAAGA,OAAQA,EAAQE,SAAUA,EAASD,WAC5FzkB,QAAO,SAAC6d,EAAUrG,GAAa,OAAAxa,EAAI6gB,EAAQrG,MAEnB,CAAA,EAAMje,KAAKiG,KACnC8J,KAAa/P,KAAK4qB,UAAS,eAAgB,CAC1CU,gBAAgB,EAChBR,YAAa4B,IAEdzjB,YACAlH,MAAK,SAAAmO,GAAY,OAAAA,EAAS4a,wBAW7B,OAjBMA,EAAqB3jB,EAAA5E,OAQrByB,EAAS,GAEf8mB,EAAYhhB,SAAQ,SAAC4hB,GACnB,IACQxnB,EADSumB,EAAU1iB,MAAK,SAACmB,GAAa,OAAAA,EAAIgiB,MAAQQ,EAAWP,YAC7DjnB,KACRF,EAAOE,GAAQF,EAAOE,GAAQF,EAAOE,GAAQ,GAC7CF,EAAOE,GAAMwnB,EAAWT,QAAUS,EAAWC,WAC7C3nB,EAAOE,GAAMwnB,EAAWT,OAAOW,eAAiBF,EAAWC,cAE7D,CAAA,EAAO3nB,6EAnMNspB,EAAAA,OAAMxpB,KAAA,CAACwmB,aAC2CiD,GAAWrtB,WAAA,CAAA,CAAAqR,KAA7D+b,EAAAA,OAAMxpB,KAAA,CAACymB,aACejlB,EAAAA,kBACE2hB,EAAAA,cACQ/B,EAAAA,sBACL3gB,EAAAA,wPAVnBimB,EAAkBvqB,EAAA,CAH9BgT,EAAAA,WAAW,CACV6V,WAAY,SAOTloB,EAAA,EAAA0sB,EAAAA,OAAOhD,KACP1pB,EAAA,EAAA0sB,EAAAA,OAAO/C,MANCC,oBCTb,SAAAgD,WAgCA,SAhCaA,EACGA,EAAA7oB,QAAd,SAAsB8lB,EAAuBC,GAC3C,MAAO,CACL7lB,SAAU4oB,EACV1oB,UAAW,CACTylB,GACA,CACExlB,QAASslB,GACT9kB,OAAO,EACPC,SAAUglB,GAEZ,CACEzlB,QAASulB,GACT/kB,OAAO,EACPC,SAAUilB,MAMJ8C,EAAA9nB,SAAd,SAAuB+kB,GACrB,MAAO,CACL5lB,SAAU4oB,EACV1oB,UAAW,CACT,CACEC,QAASslB,GACT9kB,OAAO,EACPC,SAAUglB,MA3BP+C,EAAiBC,EAAAxtB,EAAA,CAD7B0F,EAAAA,YACY6nB,MCFb,SAASE,GAAwBrlB,EAAgBC,GAE/C,IAAMyI,EAAS,SAAC4c,EAAgBC,GAAqB,OAAGvlB,EAAM,IAAIC,EAAO,IAAIqlB,EAAM,IAAIC,GAEvF,MAAO,CACLzC,SAFe,SAACA,GAAqB,gBANThkB,GAC9B,MAAO,uBADyBA,EAAAkB,OACI,IADIlB,EAAAmB,QACO,IADEnB,EAAAgkB,SAMV0C,CAAgB,CAAExlB,OAAMA,EAAEC,QAAOA,EAAE6iB,SAAQA,KAGhF2C,MAAO/c,EAAOgd,KAAK,KAAM,WACzB9C,OAAQla,EAAOgd,KAAK,KAAM,WAC1BC,OAAQjd,EAAOgd,KAAK,KAAM,WAC1B1C,OAAA,SAAOA,GACL,IAAM4C,EAAMld,EAAO,WAAYsa,GAC/B,MAAO,CACLta,OAAQ,WAAM,OAAAkd,GACdC,OAAQ,SAACtQ,GAAe,OAAAqQ,EAAM,IAAMrQ,GACpCuQ,OAAQ,SAACvQ,GAAe,OAAAqQ,EAAM,IAAMrQ,MAMrC,ICvBKwQ,GDyBCC,GAA0BX,GAAwB,WAAY,gCEfzE,SAAAY,EAAoBroB,GAAAjG,KAAAiG,KAAAA,EAEpBjG,KAAAuuB,MAAkD,UAElDD,EAAAzuB,UAAA2uB,UAAA,SAAUrnB,EAAoCsnB,GAA9C,IAAAtoB,EAAAnG,KAAYqI,EAAAlB,EAAAkB,OAAQC,EAAAnB,EAAAmB,QAASpE,EAAAiD,EAAAjD,KAO3B,OALIuqB,EACUtC,EAAAA,GAAGsC,GAEH1qB,EAAAA,KAAKkD,EAAAA,KAAKC,eAAe+I,KAAKpM,EAAAA,KAAI,SAAA+C,GAAY,OAAAA,EAAS8nB,gBAEpDze,KACf+N,EAAAA,UAAS,SAAAyQ,GACP,IAAMruB,EAAMyG,KAAK0L,UAAU,CAAEkc,OAAMA,EAAEpmB,OAAMA,EAAEC,QAAOA,IAcpD,OAbKnC,EAAKooB,MAAMnuB,KACd+F,EAAKooB,MAAMnuB,GAAO+F,EAAKF,KACpB8J,KAA+Bse,GAAwBP,MAAM,sBAAuB,CAAEW,OAAMA,EAAEpmB,OAAMA,EAAEC,QAAOA,IAC7G2H,KACCpM,EAAAA,KAAI,SAAAmO,GAAU,OAAAA,EAAO2c,YACrBC,EAAAA,YAAY,GACZ3C,EAAAA,YAAW,SAAAxb,GAGT,OAFApJ,QAAQ7D,MAAMiN,UACPtK,EAAKooB,MAAMnuB,GACX+rB,EAAAA,GAAG,SAIXhmB,EAAKooB,MAAMnuB,MAEpByD,EAAAA,KAAI,SAAC8qB,GACH,OAAqD,IAA9CA,EAAShK,WAAU,SAAAziB,GAAK,OAAAA,EAAEgC,OAASA,mDA9BtBoB,EAAAA,mIADfgpB,EAAoBruB,EAAA,CADhCgT,EAAAA,WAAW,CAAE6V,WAAY,UACbwF,oBCAb,SAAAO,KAAkC,OAArBA,EAAmB5uB,EAAA,CAJ/B0F,EAAAA,SAAS,CACRC,QAAS,CAACC,EAAAA,iBAAkBwkB,IAC5BtlB,UAAW,CAACupB,OAEDO,OFTb,SAAYT,GACVA,EAAA,UAAA,YACAA,EAAA,UAAA,YACAA,EAAA,QAAA,UAHF,CAAYA,KAAAA,GAAU,SGAVU,iBCcR,SAAAC,EAAoB9oB,GAAAjG,KAAAiG,KAAAA,EAEZjG,KAAAgvB,QAAU,sBA6BtB,OA3BWD,EAAAlvB,UAAAovB,QAAP,WACI,OAAOjvB,KAAKiG,KAAK8J,KAAU,gCAAiC,IAAI9G,aAG7D8lB,EAAAlvB,UAAAqvB,oBAAP,WACI,OAAOlvB,KAAKiG,KAAKG,IAAyBpG,KAAKgvB,QAAU,gCAGtDD,EAAAlvB,UAAAsvB,mBAAP,WACI,OAAOnvB,KAAKiG,KAAKG,IAAwBpG,KAAKgvB,QAAU,8BAA8B/lB,aAGnF8lB,EAAAlvB,UAAAuvB,qBAAP,WACI,OAAOpvB,KAAKiG,KAAKG,IAA0BpG,KAAKgvB,QAAU,gCAAgC/lB,aAGvF8lB,EAAAlvB,UAAAwvB,kBAAP,SAAyB5lB,GACrB,OAAOzJ,KAAKiG,KAAK8J,KAAoB/P,KAAKgvB,QAAU,6BAA8B,CAAEvlB,QAAOA,KAGxFslB,EAAAlvB,UAAAyvB,qBAAP,SAA4B7lB,GACxB,OAAOzJ,KAAKiG,KAAK8J,KAAuB/P,KAAKgvB,QAAU,+BAAgC,CAAEvlB,QAAOA,KAG7FslB,EAAAlvB,UAAA0vB,oBAAP,SAA2B9lB,GACvB,OAAOzJ,KAAKiG,KAAK8J,KAA4B/P,KAAKgvB,QAAU,8BAA+BvlB,6CA7BrEnE,EAAAA,cADjBypB,EAAgB9uB,EAAA,CAD5BgT,EAAAA,cACY8b,ODbb,SAAYD,GACRA,EAAA,YAAA,cACAA,EAAA,YAAA,cAFJ,CAAYA,KAAAA,GAAe,KEE3B,ICFYU,IAAZ,SAAYA,GACRA,EAAA,OAAA,SACAA,EAAA,YAAA,cACAA,EAAA,WAAA,aACAA,EAAA,QAAA,UAJJ,CAAYA,KAAAA,GAAmB,uBC8B7B,SAAAC,EACUC,EACAxpB,EACAypB,GAFA3vB,KAAA0vB,iBAAAA,EACA1vB,KAAAkG,cAAAA,EACAlG,KAAA2vB,SAAAA,EAOH3vB,KAAA4vB,WAAY,EASZ5vB,KAAA6vB,SAAU,EAMV7vB,KAAA8vB,MAAO,EAGP9vB,KAAA+vB,cAAgB,IAAI3V,EAAAA,aAiS7B,OA/RQqV,EAAA5vB,UAAA8a,SAAN,qGACE,MAAA,CAAA,EAAM3a,KAAKgwB,2BAAX7oB,EAAA5E,OACAvC,KAAKiwB,6BAGOR,EAAA5vB,UAAAmwB,UAAd,+GAG4B,OAFpBppB,EAAgBC,KAAKC,MAAM9G,KAAKkG,cAAcE,IAAI,qBACxDpG,KAAKkwB,YAActpB,EAASupB,SAC5BhpB,EAAAnH,KAA0B,CAAA,EAAMA,KAAK0vB,iBAAiBP,6BACzB,OAD7BhoB,EAAKipB,mBAAqBrnB,EAAAxG,OAC1BoG,EAAA3I,KAA6B,CAAA,EAAMA,KAAK0vB,iBAAiBN,sCAAzDzmB,EAAK0nB,sBAAwBtnB,EAAAxG,mBAGvBktB,EAAA5vB,UAAAywB,qBAAR,SAA6BtsB,GAC3BhE,KAAKuwB,OAASvsB,EAAOwsB,eACrBxwB,KAAKywB,OAASzsB,EAAO0sB,UACrB1wB,KAAK2wB,mBAAqB3sB,EAAO2sB,mBACjC3wB,KAAK4wB,qBAAuB5sB,EAAO6sB,mBAG7BpB,EAAA5vB,UAAAixB,YAAR,SAAoBC,GAClB,IAAMC,EAAc,IAAIhQ,KACxB,OAAOhhB,KAAK2vB,SAAS/rB,UAAUotB,EAAYC,QAAQD,EAAYE,UAAYH,GAAMI,WAAY,eAGvF1B,EAAA5vB,UAAAowB,eAAR,WAAA,IAAA9pB,EAAAnG,KACEA,KAAK0vB,iBAAiBR,sBAAsB1f,WAAU,SAAAhO,GACpD2E,EAAKirB,gBAAkB5vB,EAAM6vB,SAASngB,QAAO,SAAA+M,GAAO,OAAAA,EAAIqT,eAAiBnrB,EAAKorB,UAAQ,GAClFprB,EAAKirB,iBACPjrB,EAAKqrB,cAAcrrB,EAAKirB,gBAAgBK,eAKtChC,EAAA5vB,UAAA2xB,cAAR,SAAsBC,GACpB,GAAIzxB,KAAK0xB,aAAaD,EAAUE,cAAgB3xB,KAAK4xB,kBAAkBH,EAAUI,YAAc7xB,KAAK8xB,kBAAkBL,GAAY,CAChIzxB,KAAKswB,qBAAqBmB,GAC1BzxB,KAAK4vB,WAAY,EACjB,IAAMlR,EAAU1e,KAAK+xB,4BAA4B/xB,KAAKoxB,gBAAgBK,UAAU7T,IAChF5d,KAAKgyB,cAAgBtT,GAAW1e,KAAKkwB,cAAgBxR,EAAQuT,YAIzDxC,EAAA5vB,UAAA6xB,aAAR,SAAqBjc,GACnB,QAAIA,GACkBzV,KAAK2vB,SAAS/rB,WAAU,IAAIod,MAAOmQ,WAAY,eAC/CnxB,KAAK2vB,SAAS/rB,UAAU6R,EAAM,eAO9Cga,EAAA5vB,UAAA+xB,kBAAR,SAA0Bnc,GACxB,OAAIA,GACkBzV,KAAK2vB,SAAS/rB,WAAU,IAAIod,MAAOmQ,WAAY,eACjDnxB,KAAK2vB,SAAS/rB,UAAU6R,EAAM,eAO5Cga,EAAA5vB,UAAAiyB,kBAAR,SAA0BL,GACxB,QAAKzxB,KAAKkyB,qBAAqBlyB,KAAKqwB,sBAAuBoB,EAAWzxB,KAAKkwB,gBAGtElwB,KAAKmyB,oBAAoBV,EAAWzxB,KAAKowB,mBAAoBpwB,KAAKqwB,sBAAuBrwB,KAAKkwB,cAM7FT,EAAA5vB,UAAAqyB,qBAAR,SAA6BE,EAAoCX,EAAsBvB,GACrF,GAAIkC,EAAaC,eAEeD,EAAaf,SAASngB,QAAO,SAAAwN,GACzD,OAAIA,EAAQL,SAAWmR,GAAoB8C,OAClC5T,EAAQ6T,cAAgBd,EAAU7T,GAEhCc,EAAQL,SAAWmR,GAAoBgD,YACvC9T,EAAQ6T,cAAgBd,EAAU7T,IAAMc,EAAQuT,YAAc/B,OADlE,KAKiBtwB,OAAS,EACjC,OAAO,EAGX,OAAO,GAGD6vB,EAAA5vB,UAAAsyB,oBAAR,SACEV,EACAgB,EACAL,EACAlC,GAJF,IAAA/pB,EAAAnG,KAOE,OAAQyxB,EAAUiB,aAChB,KAAK5D,GAAgB6D,YACnB,OAAOF,EAAUJ,eAAgBryB,KAAK4yB,aAAaH,EAAUpB,SAAUI,GAEzE,KAAK3C,GAAgB+D,YAEnB,GAAIT,EAAaC,cAgBf,GAAkC,IAfPD,EAAaf,SAASngB,QAAO,SAAAwN,GAEpD,OAAQA,EAAQL,QAEd,KAAKmR,GAAoBsD,WACvB,OAAOpU,EAAQ6T,cAAgBd,EAAU7T,GAE3C,KAAK4R,GAAoBuD,QACvB,OAAON,EAAUJ,eAAgBlsB,EAAKysB,aAAaH,EAAUpB,SAAUI,GAEzE,KAAKjC,GAAoBgD,YACvB,OAAO9T,EAAQuT,YAAc/B,GACxBxR,EAAQ6T,cAAgBd,EAAU7T,OAGxBhe,OACrB,OAAO,EAGX,OAAO,IAIL6vB,EAAA5vB,UAAA+yB,aAAR,SAAqBI,EAAwBvB,GAA7C,IAAAtrB,EAAAnG,KACMizB,EAAiBD,EAAM9hB,QAAO,SAAAjK,GAAQ,OAAAA,EAAKsrB,cAAgBd,EAAU7T,MAEzE,IAAKqV,EAAerzB,OAGlB,OAAiC,KAFjCqzB,EAAiBD,EAAM9hB,QAAO,SAAAjK,GAAQ,OAAAA,EAAKisB,gBAAkB/sB,EAAK+pB,gBAE5CtwB,OAGxB,IAAMuzB,EAA2BF,EAAe/hB,QAAO,SAAAjK,GAAQ,OAAAA,EAAKisB,gBAAkB/sB,EAAK+pB,eAAa,GAExG,OAAOiD,GAA2BnzB,KAAK0xB,aAAayB,EAAyBC,WAGvE3D,EAAA5vB,UAAAwvB,kBAAR,SAA0B0B,GAA1B,IAAA5qB,EAAAnG,KAEQyxB,EAAYzxB,KAAKoxB,gBAAgBK,UAEjCxqB,EAAOjH,KAAKowB,mBAAmBiB,SAASngB,QAAO,SAAA+M,GACnD,OAAOA,EAAIsU,cAAgBd,EAAU7T,IAChCK,EAAIiV,gBAAkB/sB,EAAK+pB,eAC/B,GAECmD,EAA+B,CACjCd,YAAad,EAAU7T,GACvBwV,SAAUrC,EAAO/wB,KAAK8wB,YAAYC,GAAQ,KAC1CmC,cAAelzB,KAAKkwB,aAGlBjpB,IACFosB,EAAah0B,EAAA,CACXue,GAAI3W,EAAK2W,IACNyV,IAGPrzB,KAAK0vB,iBAAiBL,kBAAkBgE,GAAe7jB,aAGlDigB,EAAA5vB,UAAAyzB,UAAP,WACE,IAAM7B,EAAYzxB,KAAKoxB,gBAAgBK,UACjC8B,EAAevzB,KAAKwzB,kBAAkBpF,GAAWqF,WAEvDzzB,KAAKsvB,uBACLtvB,KAAKqvB,oBAEDrvB,KAAKgyB,cACPhyB,KAAK0vB,iBAAiBH,oBAAoBgE,GAAc/jB,YAGtDiiB,EAAUiC,kBACZtjB,OAAOujB,KAAKlC,EAAUiC,kBAGxB1zB,KAAK8mB,SAGA2I,EAAA5vB,UAAA+zB,YAAP,WACE,IAAML,EAAevzB,KAAKwzB,kBAAkBpF,GAAWyF,WAEvD7zB,KAAKsvB,qBAAqBE,GAAoBuD,SAC9C/yB,KAAKqvB,kBAAkBrvB,KAAKoxB,gBAAgBK,UAAUqC,kBACtD9zB,KAAK0vB,iBAAiBH,oBAAoBgE,GAAc/jB,YAExDxP,KAAK8mB,SAGA2I,EAAA5vB,UAAAk0B,WAAP,WACE,IAAMR,EAAevzB,KAAKwzB,kBAAkBpF,GAAW2E,SAEvD/yB,KAAKsvB,qBAAqBE,GAAoBuD,SAC9C/yB,KAAKqvB,kBAAkBrvB,KAAKoxB,gBAAgBK,UAAUuC,mBACtDh0B,KAAK0vB,iBAAiBH,oBAAoBgE,GAAc/jB,YAExDxP,KAAK8mB,SASC2I,EAAA5vB,UAAAo0B,gBAAR,SAAwBhtB,EAAqBwqB,GAC3C,OAAQxqB,EAAKsrB,cAAgBd,EAAU7T,IAAM3W,EAAKisB,gBAAkBlzB,KAAKkwB,aASnET,EAAA5vB,UAAAq0B,mBAAR,SAA2BjtB,EAAqBwqB,GAC9C,OAAOxqB,EAAKsrB,cAAgBd,EAAU7T,IAAM3W,EAAKisB,gBAAkBlzB,KAAKkwB,aASlET,EAAA5vB,UAAAyvB,qBAAR,SAA6BjR,QAAA,IAAAA,IAAAA,EAASmR,GAAoBgD,aACxD,IAAMf,EAAYzxB,KAAKoxB,gBAAgBK,UACnC/S,EAA4B1e,KAAK+xB,4BAA4BN,EAAU7T,IAgB3E,OAdKc,IACHA,EAAU,CACR6T,YAAad,EAAU7T,GACvBS,OAAQA,EACR4T,UAAWjyB,KAAKkwB,eAIhBlwB,KAAKm0B,aAAazV,IAAYA,EAAQL,SAAWmR,GAAoBgD,eACvE9T,EAAQL,OAASA,EACjBK,EAAQuT,UAAY5T,IAAWmR,GAAoBgD,YAAcxyB,KAAKkwB,YAAc,GACpFlwB,KAAK0vB,iBAAiBJ,qBAAqB5Q,GAASlP,aAG/CkP,GAQD+Q,EAAA5vB,UAAAkyB,4BAAR,SAAoCnU,GAClC,OAAO5d,KAAKqwB,sBAAsBgB,SAASngB,QAAO,SAAA+M,GAAQ,OAAAA,EAAIsU,cAAgB3U,KAAI,IAQ5E6R,EAAA5vB,UAAAs0B,aAAR,SAAqBC,GACnB,OAAQp0B,KAAKqwB,sBAAsBgB,SAAS1H,SAASyK,IAQ/C3E,EAAA5vB,UAAA2zB,kBAAR,SAA0Ba,GACxB,IAAM5C,EAAYzxB,KAAKoxB,gBAAgBK,UAEvC,MAAO,CACL6C,cAAeD,EACfE,mBAAoB9C,EAAU7T,GAC9B8V,iBAAkBjC,EAAUiC,mBAIzBjE,EAAA5vB,UAAAinB,MAAP,WACE9mB,KAAK+vB,cAAc3U,MAAK,6CA1TE2T,UACHxpB,EAAAA,qBACLivB,EAAAA,YAgBpBv0B,EAAA,CADCmlB,EAAAA,uCAIDnlB,EAAA,CADCmlB,EAAAA,sCAIDnlB,EAAA,CADCmlB,EAAAA,oCAIDnlB,EAAA,CADColB,EAAAA,8CA7BUoK,EAAkBxvB,EAAA,CAL9BslB,EAAAA,UAAU,CACTC,SAAU,cACVC,SAAA,i7GAGWgK,MC5BAloB,GAAgB,CAEzBktB,iCAAmC,sBACnCC,mCAAqC,oCCKrC,SAAAtwB,EAAoBC,GAAArE,KAAAqE,mBAAAA,EAItB,OAHED,EAAAvE,UAAA+D,UAAA,SAAUpC,GACR,OAAOxB,KAAKqE,mBAAmBC,QAAQ9C,6CAFD+C,EAAAA,oBAD7BH,EAAanE,EAAA,CAJ3BgE,EAAAA,KAAK,CACFC,KAAM,YACNC,MAAM,KAEKC,oBCwBf,SAAAuwB,KAA8B,OAAjBA,EAAe10B,EAAA,CAlB3B0F,EAAAA,SAAS,CACRC,QAAS,CACP4hB,EAAAA,aACAS,EAAAA,cACAN,EAAAA,aACA0C,GACA3lB,EAAmBgB,SAAS,CAAC,CAAC2C,OAAQ,WAAYC,QAAS,YAAaf,SAAQqtB,OAElF7vB,UAAW,CACTgqB,GACAyF,EAAAA,SACAjvB,EAAAA,eAEF4iB,aAAc,CACZsH,GACArrB,IACF6Q,QAAS,CAACwa,OAECkF,uQzCrBiB,qKADL","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'mapValues', pure: false })\nexport class MapValuesPipe implements PipeTransform {\n transform(map: Map<any, any>, args: any[] = null): any {\n return Array.from(map.values());\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'translate',\n pure: false,\n })\n export class TranslatePipe implements PipeTransform {\n constructor(private translationService: TranslateService) {}\n transform(value: any, args?: any): any {\n return this.translationService.instant(value);\n }\n }\n","import { LOCATION_INITIALIZED } from '@angular/common';\nimport { HttpClient, HttpClientModule, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { ModuleWithProviders } from '@angular/compiler/src/core';\nimport { APP_INITIALIZER, InjectionToken, Injector, NgModule } from '@angular/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { user } from '@seniorsistemas/senior-platform-data';\nimport { CookieService } from 'ngx-cookie-service';\n\nexport const TranslationsConfig = new InjectionToken<ITranslationsConfig[]>('translationConfig');\nexport const USER_INFO = 'com.senior.token';\nexport const LENGTH_DEFAULT = 2;\n@NgModule({\n imports: [HttpClientModule, TranslateModule.forChild()],\n providers: [CookieService]\n})\nexport class TranslationsModule {\n static forRoot(translationsConfigs: ITranslationsConfig[]): ModuleWithProviders {\n return {\n ngModule: TranslationsModule,\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: factory,\n deps: [TranslateService, Injector, HttpClient, CookieService],\n multi: true\n },\n {\n provide: TranslationsConfig,\n useValue: translationsConfigs,\n multi: true\n }\n ]\n };\n }\n\n static forChild(translationsConfigs: ITranslationsConfig[]): ModuleWithProviders {\n return {\n ngModule: TranslationsModule,\n providers: [\n {\n provide: TranslationsConfig,\n useValue: translationsConfigs,\n multi: true\n }\n ]\n };\n }\n}\n\nexport interface ITranslationsConfig {\n domain: string;\n service: string;\n fallback: any;\n defaultsLanguages?: any;\n}\n\nexport function factory(translate: TranslateService, injector: Injector, http: HttpClient, cookieService: CookieService) {\n return () =>\n new Promise((resolve) => {\n const locationInitialized = injector.get(LOCATION_INITIALIZED, Promise.resolve(null));\n\n locationInitialized.then(async () => {\n let locale = 'pt-BR';\n try {\n const configs = getFlatArray(injector.get(TranslationsConfig, Promise.resolve(null)));\n\n try {\n let userData = JSON.parse(cookieService.get(USER_INFO));\n if (userDataIsNull(userData)) {\n userData = await user.getUserData();\n }\n\n locale = getLocale(userData);\n } catch (ex) {\n console.warn('Unable to obtain user locale');\n }\n\n const fallback = configs.reduce((result: any, configs: ITranslationsConfig) => ({ ...result, ...configs.fallback }), {});\n const defaultsLanguages = configs.reduce(\n (result: any, configs: ITranslationsConfig) => ({ ...result, ...configs.defaultsLanguages }),\n {}\n );\n\n translate.setTranslation(locale, fallback);\n translate.setDefaultLang(locale);\n\n let configTranslate: any = {};\n\n if (defaultsLanguages) {\n configTranslate = getConfigTranslate(defaultsLanguages, locale);\n }\n\n const translationsPromises = configs.map((config: any) => getTranslationsRequest(config, locale));\n\n await Promise.all(translationsPromises).then((results) => {\n const usedFallback = translate['overriden'];\n\n results.forEach((file, index) => {\n setTranslations(file['content'], usedFallback, locale, index, configTranslate.fallbackByLocale);\n });\n\n return translate.use(locale).toPromise();\n });\n\n resolve();\n } catch (err) {\n console.warn('Error setting translations. Using local fallback.', err);\n translate\n .use(locale)\n .toPromise()\n .then(() => {\n resolve();\n });\n }\n });\n });\n\n function setTranslations(content: any, usedFallback: any, locale: any, index: any, fallbackByLocale: any) {\n if (usedFallback) {\n content && translate.setTranslation(locale, content, true);\n translate.setTranslation(locale, fallbackByLocale, true);\n } else {\n if (index === 0) {\n translate.setTranslation(locale, fallbackByLocale, true);\n }\n\n content && translate.setTranslation(locale, content, true);\n }\n }\n\n function getTranslationsRequest({ domain, service }: ITranslationsConfig, language: string) {\n return new Promise(async (resolve) => {\n try {\n if (!domain && !service) {\n throw new Error(`domain and service not found`);\n }\n const params = new HttpParams().set('domainName', domain).set('serviceName', service).set('format', 'FLAT_JSON');\n\n const headers = new HttpHeaders().set('Authorization', await user.getAuthHeader());\n const url = 'platform/translation_hub/queries/getTranslationBundle';\n const bundleFiles = await http\n .get(url, { headers, params })\n .toPromise()\n .then((res: any) => res.bundleFiles);\n\n let languageBundle = language && bundleFiles.find((bundle: any) => bundle.language === language);\n let overriden = false;\n\n if (!languageBundle) {\n languageBundle = bundleFiles.find((bundle: any) => bundle.language === 'pt-BR');\n overriden = true;\n }\n\n if (!languageBundle) {\n return resolve({});\n }\n\n await http\n .get(languageBundle.url)\n .toPromise()\n .then((result: any) => {\n const translations = {\n overriden: overriden,\n content: result\n };\n resolve(translations);\n });\n } catch (err) {\n console.warn(`Error getting translation bundle for ${domain}/${service}. Using local fallback.`, err);\n resolve({});\n }\n });\n }\n\n function getFlatArray(array: any[]) {\n return array.reduce((result: any[], item: any) => {\n if (Array.isArray(item)) {\n return [...result, ...item];\n }\n return [...result, item];\n }, []);\n }\n\n function userDataIsNull(data: any) {\n return !data || Object.keys(data).length === 0;\n }\n\n function getConfigTranslate(defaultsLanguages: any, locale: any) {\n const languages: any = Object.keys(defaultsLanguages).map((key) => {\n const language = {};\n language['locale'] = key.replace('_', '-');\n language['translation'] = defaultsLanguages[key];\n return language;\n }, []);\n\n const result: any = { languages };\n result['foundLocaleUser'] = languages.find((results: any) => results.locale === locale);\n if (!result['foundLocaleUser']) {\n result['foundLocaleUser'] = languages.find((results: any) => {\n return results.locale.length === LENGTH_DEFAULT && results.locale === locale.split('-')[0];\n });\n }\n\n if (result['foundLocaleUser']) {\n result['fallbackByLocale'] = result['foundLocaleUser']['translation'];\n }\n\n return result;\n }\n\n function getLocale(userData: any) {\n return userData.locale || 'pt-BR';\n }\n}\n","export enum FilterType {\n STRING = 'STRING',\n BOOLEAN = 'BOOLEAN',\n INTEGER = 'INTEGER',\n DOUBLE = 'DOUBLE',\n DATE = 'DATE',\n DATETIME = 'DATETIME',\n TIME = 'TIME',\n MONEY = 'MONEY',\n ENUMERATION = 'ENUMERATION',\n SEARCH = 'SEARCH'\n}\n","export enum Scope {\n DOMAIN = 'DOMAIN',\n SERVICE = 'SERVICE'\n}\n","export const fallback = {\n 'platform.filter_service.cancel': 'Cancelar',\n 'platform.filter_service.try': 'Tentar Novamente',\n 'platform.filter_service.actions': 'Ações',\n 'platform.filter_service.save': 'Salvar',\n 'platform.filter_service.filter': 'Filtrar',\n 'platform.filter_service.error_state':\n 'O serviço de filtro está indisponÃvel no momento e as informações apresentadas não são as mais recentes. Tente novamente mais tarde.',\n 'platform.filter_service.saved_filters_success': 'Filtros salvos com sucesso! Clique em \"Filtrar\" para visualizar o resultado.',\n 'platform.filter_service.saved_filters_error':\n 'Ocorreu um erro ao tentar salvar os filtros. Verifique os valores e tente novamente.',\n 'platform.filter_service.applied_filter_nochange': 'Não houve alterações no filtro.',\n 'platform.filter_service.applied_filter_change': 'Filtros aplicados com sucesso!',\n 'platform.filter_service.invalid_pattern': 'O valor não atende ao padrão especificado.',\n 'platform.filter_service.error_max_value': 'O valor excede o tamanho máximo especificado.',\n 'platform.filter_service.error_min_value': 'O valor é menor que o minÃmo especificado.',\n 'platform.filter_service.applied_filters_message': '{{totalActiveFilters}} filtros aplicados',\n 'platform.filter_service.applied_filter_message': '{{totalActiveFilters}} filtro aplicado',\n 'platform.filter_service.find_suggestions_error': 'Erro ao encontrar sugestões!',\n 'platform.filter_service.select': 'Selecionar',\n 'platform.filter_service.filters': 'Filtros',\n 'platform.filter_service.date_format' : 'dd/mm/yy',\n 'platform.filter_service.hour_format' : '24',\n 'platform.filter_service.clear': 'Limpar',\n 'platform.filter_service.today' : 'Hoje',\n 'platform.filter_service.name_january' : 'Janeiro',\n 'platform.filter_service.name_february' : 'Fevereiro',\n 'platform.filter_service.name_march' : 'Março',\n 'platform.filter_service.name_april' : 'Abril',\n 'platform.filter_service.name_may' : 'Maio',\n 'platform.filter_service.name_june' : 'Junho',\n 'platform.filter_service.name_july' : 'Julho',\n 'platform.filter_service.name_august' : 'Agosto',\n 'platform.filter_service.name_september' : 'Setembro',\n 'platform.filter_service.name_october' : 'Outubro',\n 'platform.filter_service.name_november' : 'Novembro',\n 'platform.filter_service.name_december' : 'Dezembro',\n 'platform.filter_service.short_january' : 'Jan',\n 'platform.filter_service.short_february' : 'Fev',\n 'platform.filter_service.short_march' : 'Mar',\n 'platform.filter_service.short_april' : 'Abr',\n 'platform.filter_service.short_may' : 'Mai',\n 'platform.filter_service.short_june' : 'Jun',\n 'platform.filter_service.short_july' : 'Jul',\n 'platform.filter_service.short_august' : 'Ago',\n 'platform.filter_service.short_september' : 'Set',\n 'platform.filter_service.short_october' : 'Out',\n 'platform.filter_service.short_november' : 'Nov',\n 'platform.filter_service.short_december' : 'Dez',\n 'platform.filter_service.name_sunday': 'Domingo',\n 'platform.filter_service.name_monday': 'Segunda',\n 'platform.filter_service.name_tuesday': 'Terça',\n 'platform.filter_service.name_wednesday': 'Quarta',\n 'platform.filter_service.name_thursday': 'Quinta',\n 'platform.filter_service.name_friday': 'Sexta',\n 'platform.filter_service.name_saturday': 'Sábado',\n 'platform.filter_service.min_sunday': 'D',\n 'platform.filter_service.min_monday': 'S',\n 'platform.filter_service.min_tuesday': 'T',\n 'platform.filter_service.min_wednesday': 'Q',\n 'platform.filter_service.min_thursday': 'Q',\n 'platform.filter_service.min_friday': 'S',\n 'platform.filter_service.min_saturday': 'S',\n 'platform.filter_service.short_sunday': 'Dom',\n 'platform.filter_service.short_monday': 'Seg',\n 'platform.filter_service.short_tuesday': 'Ter',\n 'platform.filter_service.short_wednesday': 'Qua',\n 'platform.filter_service.short_thursday': 'Qui',\n 'platform.filter_service.short_friday': 'Sex',\n 'platform.filter_service.short_saturday': 'Sab',\n 'platform.filter_service.yes': 'Sim',\n 'platform.filter_service.no': 'Não',\n 'platform.filter_service.search_empty_message': 'Nenhum resultado encontrado'\n};\n","import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs/BehaviorSubject';\n\nimport { GET_FILTERS_URL, SAVE_FILTERS_URL, SAVE_TICKED_FILTER_URL } from './constants';\nimport { Subject, Observable } from 'rxjs';\nimport { Filter } from '../models/filter';\nimport { FilterValue } from '../models/filter-value';\nimport { Context } from '../models/context';\nimport { map } from 'rxjs/operators';\nimport { TickedFilter } from '../models/ticked-filter';\nimport { searchDisplayName, searchKeyName } from '../shared/constants';\n\nexport interface TickedFilterResponse {\n ticket: string;\n}\n\nexport interface ContextsFiltersResponse {\n filters: Filter[];\n}\n\nexport interface IGetFiltersResponse {\n error?: boolean;\n message?: HttpErrorResponse;\n filters?: Filter[];\n applyFilter?: boolean;\n}\n\nexport interface ITickerFilterResponse {\n ticketFilter?: string;\n error?: boolean;\n message?: string;\n}\n\n@Injectable()\nexport class AdvancedFilterService {\n private filtersObservable = new Subject<IGetFiltersResponse>();\n private contextsObservable = new BehaviorSubject<Context[]>([]);\n private ticketFilterObservable = new Subject<ITickerFilterResponse>();\n destroy$ = new Subject();\n public ticketFilter: string;\n public visible: boolean;\n contextsObserver = this.contextsObservable.asObservable();\n filtersObserver = this.filtersObservable.asObservable();\n ticketFilterObserver = this.ticketFilterObservable.asObservable();\n\n constructor(private http: HttpClient) {\n this.contextsObservable.subscribe(contexts => contexts.length && this.getAndApplyFilters(contexts));\n }\n\n saveTickedFilters(filters: TickedFilter[]) {\n const requestBody = this.ticketFilter ? { filters, ticketFilter: this.ticketFilter } : { filters };\n this.http\n .post<TickedFilterResponse>(SAVE_TICKED_FILTER_URL, requestBody)\n .pipe(map(response => response.ticket))\n .subscribe(\n ticketFilter => {\n this.ticketFilter = ticketFilter;\n this.ticketFilterObservable.next({ ticketFilter });\n window.parent.postMessage({ message: 'advanced-filter:success', payload: ticketFilter }, '*');\n },\n err => {\n this.ticketFilterObservable.next({ error: true, message: err });\n window.parent.postMessage({ message: 'advanced-filter:error', payload: err }, '*');\n }\n );\n }\n\n addContexts(...contexts: Context[]): Observable<Context[]> {\n const currentContexts = this.contextsObservable.getValue();\n this.contextsObservable.next([...currentContexts, ...contexts]);\n return Observable.create(() => () => this.removeContexts(contexts));\n }\n\n private removeContexts(contexts: Context[]) {\n const allContexts = this.contextsObservable.getValue();\n const filteredContexts = allContexts.filter(context => contexts.indexOf(context) === -1);\n this.contextsObservable.next(filteredContexts);\n }\n\n saveFilters(filters: FilterValue[]) {\n return this.http.post(SAVE_FILTERS_URL, { filters });\n }\n\n searchFieldSuggestions(url: string, params: any, type: any) {\n const headers = new HttpHeaders({ 'Content-Type': 'application/json; charset=utf-8' });\n if (type === 'ENTITY') {\n return this.http.get(url, { headers });\n }\n return this.http.post(url, params, { headers });\n }\n\n public tryAgain(serviceContexts: Context[]) {\n this.getFilters(serviceContexts);\n }\n\n private getAndApplyFilters(serviceContexts: Context[]) {\n this.getFilters(serviceContexts, true);\n }\n\n private getFilters(serviceContexts: Context[], applyFilter?: boolean) {\n this.http\n .post<ContextsFiltersResponse>(GET_FILTERS_URL, { serviceContexts })\n .pipe(map(response => this.mapFilters(response.filters)))\n .subscribe(\n filters => this.filtersObservable.next({ filters, applyFilter }), //\n err => this.filtersObservable.next({ error: true, message: err })\n );\n }\n\n private mapFilters(filters: Filter[]): Filter[] {\n return filters.map(filter => {\n try {\n const value = filter.value && JSON.parse(filter.value);\n\n if (value && filter.search && filter.search.basicSearch && filter.search.basicSearch.output) {\n this.mapValues(value, filter.search.basicSearch.output.keyFields, filter.search.basicSearch.output.displayFields);\n } else if (value && filter.search && filter.search.entitySearch && filter.search.entitySearch.output) {\n this.mapValues(value, filter.search.entitySearch.output.keyFields, filter.search.entitySearch.output.displayFields);\n }\n\n if (value) {\n if (this.isMultiple(filter)) {\n const valueInText = JSON.stringify(value);\n\n if ((valueInText.startsWith('[{') && valueInText.endsWith('}]')) || valueInText.length <= 4) {\n filter.value = valueInText;\n } else {\n filter.value = JSON.stringify('');\n }\n } else {\n filter.value = JSON.stringify(value);\n }\n }\n } catch (ex) {\n console.error(`Global: filter ${filter.name} has value error. `, ex);\n filter.value = JSON.stringify('');\n }\n\n return filter;\n });\n }\n\n private isMultiple(filter: Filter): boolean {\n return (\n filter.type === 'SEARCH' &&\n filter.search &&\n ((filter.search.basicSearch && filter.search.basicSearch.output && filter.search.basicSearch.output.maxSelectedItems > 1) ||\n (filter.search.entitySearch && filter.search.entitySearch.output && filter.search.entitySearch.output.maxSelectedItems > 1))\n );\n }\n\n private mapValues(value: any, keyFields: string[], displayFields: string[]) {\n if (Array.isArray(value)) {\n value.forEach(e => {\n this.mapValue(e, keyFields, displayFields);\n });\n } else {\n this.mapValue(value, keyFields, displayFields);\n }\n }\n\n private mapValue(value: any, keyFields: string[], displayFields: string[]) {\n if (!value) {\n return;\n }\n\n const ids = [] as string[];\n const displays = [] as string[];\n\n keyFields.filter(e => value[e] !== undefined).forEach(e => ids.push(value[e]));\n displayFields.filter(e => value[e] !== undefined).forEach(e => displays.push(value[e]));\n\n if (ids.length > 0 && displays.length > 0) {\n value[searchKeyName] = ids.join(', ');\n value[searchDisplayName] = displays.join(', ');\n } else {\n value = [''];\n }\n }\n}\n","const URL_PREFIX = 'platform/filter_service';\nexport const GET_FILTERS_URL = `${URL_PREFIX}/queries/getFilters`;\nexport const SAVE_FILTERS_URL = `${URL_PREFIX}/actions/saveUserFilters`;\nexport const SAVE_TICKED_FILTER_URL = `${URL_PREFIX}/actions/setTicketFilters`;\nexport const GET_FILTERS_BY_TICKET = `${URL_PREFIX}/queries/getFiltersByTicket`;\n","import { FilterType } from './filter-type';\nimport { Scope } from './scope';\nimport { EnumItem } from './enum-item';\nimport { DependsOn } from './depends-on';\nimport { Search } from './search';\n\nexport class Filter {\n constructor(\n public type: FilterType,\n public required: boolean,\n public label: string,\n public domain: string,\n public scope: Scope,\n public name: string,\n public contexts: string[],\n public services: string[],\n public value?: string,\n public enumItems?: EnumItem[],\n public defaultValue?: string,\n public search?: Search,\n public tabIndex?: number,\n public minValue?: number,\n public maxValue?: number,\n public dependsOn?: DependsOn[],\n public mask?: string,\n public regExp?: string\n ) {}\n}\n","import { DependsOn } from './depends-on';\nimport { Observable, Subject } from 'rxjs';\nimport { FormControl } from '@angular/forms';\nimport { FilterType } from './filter-type';\n\nexport interface FormFilterConfig {\n name: string;\n domain: string;\n services: string[];\n value: any;\n defaultValue: any;\n dependsOn: DependsOn[];\n isMultiple: boolean;\n}\n\nexport class FormFilter {\n private _value: any;\n private _valueObserver = new Subject<any>();\n valueChanges: Observable<any> = this._valueObserver.asObservable();\n name: string;\n domain: string;\n contexts: string[];\n services: string[];\n childs: string[];\n dependsOn: DependsOn[];\n filterControl: FormControl;\n type: FilterType;\n isMultiple: boolean;\n defaultValue: any;\n\n constructor({ value, ...config }: FormFilterConfig) {\n this._value = value;\n Object.assign(this, config);\n }\n\n set value(value: any) {\n this._value = value;\n this._valueObserver.next(value);\n }\n\n get value() {\n return this._value;\n }\n}\n","import { FormGroup } from '@angular/forms';\nimport { Field } from '@seniorsistemas/angular-components';\n\nexport class TabView {\n fields: Field[] = [];\n form: FormGroup;\n name?: string;\n\n constructor(config: any) {\n this.form = new FormGroup({});\n Object.assign(this, config);\n }\n}\nexport class ContextTab extends TabView {\n activeFilters = 0;\n domain: string;\n\n get label() {\n return `${this.name} (${this.activeFilters})`;\n }\n}\n","export const FILTER_ID_SEPARATOR = ':';\n\nexport function getFilterId(domain: string, filterName: string) {\n return `${domain}${FILTER_ID_SEPARATOR}${filterName}`;\n}\n\nexport function getTabId(domain: string, contextId: string) {\n return `${domain}${FILTER_ID_SEPARATOR}${contextId}`;\n}\n","import { FilterType } from '../../models';\nconst moment = require('moment');\n\n/**\n *@description Necessary because of https://github.com/rollup/rollup/issues/670\n *\n * */\n\nconst { DATETIME, TIME, DATE } = FilterType;\n\nconst parsers = {\n [DATE]: (value: any) => dateParser(value, 'YYYY-MM-DD'),\n [TIME]: (value: any) => dateParser(value, 'HH:mm:ss'),\n [DATETIME]: (value: any) => dateParser(value)\n};\n\nexport function parseFilterValue(value: any, type: FilterType) {\n const parser = parsers[type];\n if (value !== undefined && value !== null && value !== '') {\n return parser ? parser(value) : value;\n }\n\n return value;\n}\n\nfunction dateParser(value: string, format?: string) {\n const date = moment(value);\n return format ? date.format(format) : date.format();\n}\n","export const filterOperators = {\n 'contains': (attr: string, value: string) => `containing(${attr}, '${value}')`,\n '=': (attr: string, value: string) => `${attr} eq ${value}`,\n '!=': (attr: string, value: string) => `${attr} ne ${value}`,\n '>': (attr: string, value: string) => `${attr} gt ${value}`,\n '<': (attr: string, value: string) => `${attr} lt ${value}`,\n '>=': (attr: string, value: string) => `${attr} ge ${value}`\n};\n","import { FilterType, Search } from '../models';\nimport { searchKeyName } from '../shared/constants';\n\nexport * from './filter-id/index';\nexport * from './filter-value/index';\nexport * from './json-path';\nexport * from './filterOperators';\n\nexport function toUserFormat(value: any, type: FilterType) {\n let parsedValue;\n if (type !== FilterType.SEARCH || !Array.isArray(value)) {\n parsedValue = [(value === null || value === undefined) ? '' : value];\n } else if (Array.isArray(value)) {\n if (value.length) {\n parsedValue = value[0] === null ? [''] : value;\n } else {\n parsedValue = [''];\n }\n } else {\n parsedValue = value ? value : [''];\n }\n\n return JSON.stringify(parsedValue);\n}\n\nexport function toFilterFormat(value: any, type: FilterType) {\n let parsedValue;\n if (type !== FilterType.SEARCH) {\n parsedValue = [(value === null || value === undefined) ? '' : value];\n } else if (Array.isArray(value)) {\n /*\n Deve enviar para o backend o valor contido no keyValue em array.\n\n Exemplo:\n Quando tenho dois objetos selecionados [{1,'Base'},{2,'Other'}] deve enviar no padrão: [1,'Base'], [2,'Other']\n */\n parsedValue = [''];\n if (value !== null && value.length > 0 && value[0] !== '') {\n parsedValue = value.map(v => v[searchKeyName]);\n }\n } else {\n parsedValue = [value === null ? '' : value[searchKeyName]];\n }\n\n return JSON.stringify(parsedValue);\n}\n\nexport function fromJson(value: any, type: FilterType, isNotMultiple: boolean) {\n const parsedValue = JSON.parse(value);\n if (type !== FilterType.SEARCH || isNotMultiple) {\n return parsedValue[0];\n }\n\n return parsedValue;\n}\n\nexport function getSearchType(search: Search): any {\n return search.basicSearch ? search.basicSearch : search.entitySearch;\n}\n","const moment = require('moment');\nimport { FilterType, Filter, Search } from '../../models';\nimport { FormControl, Validators } from '@angular/forms';\nimport { getSearchType } from '..';\n\n/**\n *@description Necessary because of https://github.com/rollup/rollup/issues/670\n *\n * */\n\nconst { DATE, DATETIME, TIME } = FilterType;\n\nconst parsers = {\n [DATE]: (v: string) => dateParser(v),\n [DATETIME]: (v: string) => dateParser(v),\n [TIME]: (v: string) => dateParser(v, 'HH:mm:ss')\n};\n\nexport function parseFormValue(value: string, type: FilterType, search?: Search) {\n const parser = parsers[type];\n const parsedValue = JSON.parse(value);\n const isNotMultiple = search && getSearchType(search).output.maxSelectedItems === 1;\n\n let formValue;\n if ((type === FilterType.INTEGER || type === FilterType.DOUBLE || type === FilterType.MONEY) && parsedValue[0] === '') {\n formValue = null;\n } else if (type !== FilterType.SEARCH || isNotMultiple) {\n formValue = parsedValue[0];\n } else {\n formValue = parsedValue[0] ? parsedValue : [];\n }\n\n if (parser) {\n return parser(formValue);\n }\n\n return formValue;\n}\n\nexport function createFormControl({ minValue, maxValue, regExp, value, type, search }: Filter) {\n const validators = createValidators(minValue, maxValue, regExp);\n const formValue = parseFormValue(value, type, search);\n\n return new FormControl(formValue, { validators });\n}\n\nfunction createValidators(minValue: number, maxValue: number, regExp: string) {\n const { pattern, min, max } = Validators;\n const validators = [];\n\n regExp && validators.push(pattern(regExp));\n minValue !== undefined && validators.push(min(minValue));\n maxValue !== undefined && validators.push(max(maxValue));\n\n return validators;\n}\n\nfunction dateParser(value: string, format?: string): Date | string {\n return value !== null && value !== '' ? moment(value, format).toDate() : '';\n}\n","import { contains, equals } from 'ramda';\nimport { FilterType } from '../models';\nconst supportedTypes = [\n FilterType.STRING,\n FilterType.BOOLEAN,\n FilterType.INTEGER,\n FilterType.ENUMERATION,\n FilterType.TIME,\n FilterType.MONEY,\n FilterType.DATETIME,\n FilterType.DATE,\n FilterType.DOUBLE\n];\n\nconst operation = {\n '>': (value: number, otherValue: number) => {\n return value > otherValue;\n },\n '<': (value: number, otherValue: number) => {\n return value < otherValue;\n },\n '>=': (value: number, otherValue: number) => {\n return value >= otherValue;\n },\n '<=': (value: number, otherValue: number) => {\n return value <= otherValue;\n },\n 'contains': (value: any, otherValue: any[]) => {\n return contains(value, otherValue);\n },\n '=': (value: any, otherValue: any) => {\n if (typeof otherValue === 'number') {\n return equals(Number(value), otherValue);\n }\n return equals(value, otherValue);\n },\n '!=': (value: any, otherValue: any) => {\n if (typeof otherValue === 'number') {\n return !equals(Number(value), otherValue);\n }\n return !equals(value, otherValue);\n }\n};\n\nexport function compare(operator: string, value: any, otherValue: any) {\n const comparator = operation[operator];\n return comparator(value, otherValue);\n}\n\nexport function isValidOperator(operator: string) {\n return !!operation[operator];\n}\n\nexport function isSupportedType(type: FilterType) {\n return contains(type, supportedTypes);\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst TRANSLATE_PREFIX = 'platform.filter_service';\n\n@Injectable()\nexport class CalendarOptionsService {\n constructor(private translate: TranslateService) {\n }\n public getOptions() {\n return {\n clear: this.translate.instant(`${TRANSLATE_PREFIX}.clear`),\n dateFormat: this.translate.instant(`${TRANSLATE_PREFIX}.date_format`),\n dayNames: [\n this.translate.instant(`${TRANSLATE_PREFIX}.name_sunday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_monday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_tuesday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_wednesday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_thursday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_friday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_saturday`)\n ],\n dayNamesMin: [\n this.translate.instant(`${TRANSLATE_PREFIX}.min_sunday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.min_monday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.min_tuesday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.min_wednesday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.min_thursday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.min_friday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.min_saturday`)\n ],\n dayNamesShort: [\n this.translate.instant(`${TRANSLATE_PREFIX}.short_sunday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_monday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_tuesday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_wednesday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_thursday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_friday`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_saturday`)\n ],\n firstDayOfWeek: 0,\n hourFormat: this.translate.instant(`${TRANSLATE_PREFIX}.hour_format`),\n monthNames: [\n this.translate.instant(`${TRANSLATE_PREFIX}.name_january`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_february`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_march`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_april`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_may`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_june`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_july`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_august`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_september`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_october`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_november`),\n this.translate.instant(`${TRANSLATE_PREFIX}.name_december`),\n ],\n monthNamesShort: [\n this.translate.instant(`${TRANSLATE_PREFIX}.short_january`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_february`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_march`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_april`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_may`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_june`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_july`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_august`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_september`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_october`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_november`),\n this.translate.instant(`${TRANSLATE_PREFIX}.short_december`),\n ],\n today: this.translate.instant(`${TRANSLATE_PREFIX}.today`)\n };\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { MessageService } from \"primeng/api\";\nimport { ChangeDetectorRef, Component, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { BehaviorSubject, from, Subject } from 'rxjs';\nimport { filter as rxFilter, map, mergeMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { Context, DependsOn, EntitySearchInput, EnumItem, Filter, FilterType, Scope } from '../../models';\nimport { ContextTab, TabView } from '../../models/tab-view';\nimport { AdvancedFilterService } from '../../services/advanced-filter.service';\nimport { FormFilter } from '../../models/form-filter';\nimport {\n filterOperators,\n fromJson,\n getFilterId,\n getSearchType,\n getTabId,\n jsonPath,\n parseFilterValue,\n toFilterFormat,\n toUserFormat\n} from '../../utils/index';\nimport { createFormControl } from '../../utils/form-field';\nimport { clone, equals } from 'ramda';\nimport { compare, isSupportedType, isValidOperator } from '../../utils/comparator';\n\nimport {\n AutocompleteField,\n CalendarField,\n RadioButtonField,\n CurrencyField,\n Field,\n FieldConfig,\n FieldType,\n NumberField,\n SelectField,\n TextField,\n RationButtonOption,\n CalendarFieldConfig\n} from '@seniorsistemas/angular-components';\n\nimport { searchDisplayName, searchKeyName } from '../../shared/constants';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Message } from 'primeng/api';\nimport { CalendarOptionsService } from '../../services/calendar-options.service';\n\nconst TRANSLATE_PREFIX = 'platform.filter_service';\nconst TOAST_LIFE = 5000;\n\n@Component({\n selector: 's-app-form-filter',\n templateUrl: './form-filter.component.html',\n styleUrls: ['./form-filter.component.scss']\n})\nexport class FormFilterComponent implements OnInit, OnDestroy {\n destroy$ = new Subject();\n errorState: HttpErrorResponse;\n tabs: Map<string, ContextTab>;\n contexts: Context[] = [];\n formFilters: FormFilter[] = [];\n oldFormFilters: any[] = [];\n actualFormFilters: any[] = [];\n general = new TabView({ name: 'Geral' });\n totalFiltersActive = 0;\n isMobile = false;\n tabViewOrientation = 'left';\n error = false;\n\n errorMessages = {\n min: this.translate.instant(`${TRANSLATE_PREFIX}.error_min_value`),\n max: this.translate.instant(`${TRANSLATE_PREFIX}.error_max_value`),\n pattern: this.translate.instant(`${TRANSLATE_PREFIX}.invalid_pattern`)\n };\n\n @Input() showMessages = true;\n @Input() isModal = false;\n @Input() contextId = '';\n\n\n @Output() totalFiltersActiveOutput = new EventEmitter<number>();\n @Output() errorOutput = new EventEmitter<boolean>();\n @Output() showDialogOutput = new EventEmitter<boolean>();\n @Output() closeModalOutput = new EventEmitter();\n\n constructor(\n private filterService: AdvancedFilterService,\n public translate: TranslateService,\n private messageService: MessageService,\n private calendarOptionsService: CalendarOptionsService,\n private changeDetectorRef: ChangeDetectorRef\n ) { }\n\n @HostListener('window:resize', ['$event'])\n onResizeWindow(event: any) {\n const { innerWidth } = event.target;\n this.isMobile = innerWidth <= 640;\n this.tabViewOrientation = this.isMobile ? 'top' : 'left';\n }\n\n ngOnInit() {\n this.isMobile = innerWidth <= 640;\n this.tabViewOrientation = this.isMobile ? 'top' : 'left';\n this.subscribeContextsObservable();\n this.subscribeFiltersObservable();\n\n window.addEventListener('message', event => {\n const data = event.data;\n const message = data.message && data.message.split(':')[1];\n if (message === 'addContext') {\n this.filterService.addContexts(...data.payload);\n }\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next(true);\n }\n\n hasChanges() {\n const keys = Object.keys(this.formFilters);\n const oldKeys = Object.keys(this.oldFormFilters);\n if (!oldKeys.length) {\n return true;\n }\n const filtered = keys.filter(key => {\n const currentValue = this.formFilters[key].value;\n const oldValue = this.oldFormFilters[key] && this.oldFormFilters[key].value;\n return !equals(currentValue, oldValue);\n });\n return filtered.length > 0;\n }\n\n onApplyFilters() {\n this.hasChanges() && this.closeModalOutput.emit();\n }\n\n public getFilters() {\n this.hasChanges() && this.filterService.tryAgain(this.contexts);\n }\n\n applyFilters(showToast = false) {\n if (this.hasChanges()) {\n this.showDialogOutput.emit(false);\n this.counterUpdate();\n const filters = this.getFiltersValues(this.formFilters);\n this.filterService.saveTickedFilters(filters);\n } else if (showToast) {\n const message = {\n key: 'filterServiceToastKey',\n severity: 'info',\n life: TOAST_LIFE,\n detail: this.translate.instant(`${TRANSLATE_PREFIX}.applied_filter_nochange`, { activeFilters: this.totalFiltersActive })\n };\n this.sendMessage(message);\n }\n this.oldFormFilters = clone(this.formFilters);\n }\n\n getDefaultValue(defaultValue: any, isMultiple: boolean) {\n if (defaultValue === undefined || (isMultiple && defaultValue[0] === '')) {\n return [];\n }\n\n return defaultValue;\n }\n\n clearFilters() {\n const keys = Object.keys(this.formFilters);\n keys.forEach(key => this.cleanFieldAndSetDefaultValue(key));\n }\n\n sendCloseMessage() {\n window.parent.postMessage(\n {\n message: 'dashboard:close-modal',\n payload: {\n modalName: 'advanced-filter-1'\n }\n },\n '*'\n );\n }\n\n sendMessage(message: Message) {\n if (this.showMessages) {\n this.messageService.add(message);\n } else {\n window.parent.postMessage(\n {\n message: 'dashboard:toastr',\n payload: {\n type: 'success',\n message: message.detail\n }\n },\n '*'\n );\n }\n }\n\n saveFilters(forceSave = false) {\n const filters = this.parseToUserFilters(this.formFilters);\n const savedFilterSuccess = () => {\n if (!forceSave) {\n const message = {\n key: 'filterServiceToastKey',\n severity: 'info',\n life: TOAST_LIFE,\n detail: this.translate.instant(`${TRANSLATE_PREFIX}.saved_filters_success`, { activeFilters: this.totalFiltersActive })\n };\n this.sendMessage(message);\n }\n\n this.counterUpdate();\n };\n\n const savedFiltersError = () => {\n const message = {\n key: 'filterServiceToastKey',\n severity: 'error',\n life: TOAST_LIFE,\n detail: this.translate.instant(`${TRANSLATE_PREFIX}.saved_filters_error`, { activeFilters: this.totalFiltersActive })\n };\n\n this.sendMessage(message);\n };\n\n this.filterService\n .saveFilters(filters)\n .subscribe(savedFilterSuccess, savedFiltersError);\n }\n\n saveFiltersWithCallbackFunction(callbackFunction: any) {\n const filters = this.parseToUserFilters(this.formFilters);\n\n this.filterService\n .saveFilters(filters)\n .subscribe(callbackFunction);\n }\n\n private counterUpdate() {\n this.totalFiltersActive = this.countActiveFilters(this.tabs);\n this.totalFiltersActiveOutput.emit(this.totalFiltersActive);\n }\n\n private countActiveFilters(tabs: Map<string, ContextTab>) {\n let totalFiltersActive = 0;\n\n tabs.forEach(tabView => {\n const { value } = tabView.form;\n tabView.activeFilters = Object.keys(value).reduce((appliedFilters, key) => {\n const filterValue = value[key];\n const isArray = Array.isArray(filterValue);\n const isValidArray = isArray && filterValue.length > 0;\n\n if (isValidArray || (!isArray && filterValue)) {\n appliedFilters++;\n }\n\n return appliedFilters;\n }, 0);\n totalFiltersActive += tabView.activeFilters;\n });\n\n return totalFiltersActive;\n }\n\n private parseToUserFilters(filters: FormFilter[]) {\n const ids = Object.keys(filters);\n\n return ids.reduce((all, filterId) => {\n const { type, services, name, value, domain, contexts } = filters[filterId] as Filter;\n const filterValue = toUserFormat(value, type);\n\n const values = services.map(service => ({ name, service, value: filterValue, domain, contexts }));\n\n return [...all, ...values];\n }, []);\n }\n\n private getFiltersValues(filters: FormFilter[]) {\n const ids = Object.keys(filters);\n\n return ids.reduce((all, filterId) => {\n const { type, services, name, value, domain } = filters[filterId] as Filter;\n const filterValue = toFilterFormat(value, type);\n const values = services.map(service => ({ name, service, value: filterValue, domain }));\n\n return [...all, ...values];\n }, []);\n }\n\n private subscribeContextsObservable() {\n const { contextsObserver } = this.filterService;\n contextsObserver.pipe(takeUntil(this.destroy$)).subscribe((contexts: Context[]) => (this.contexts = contexts));\n }\n\n errorStateAction() {\n this.filterService.tryAgain(this.contexts);\n }\n\n private subscribeFiltersObservable() {\n const { filtersObserver } = this.filterService;\n\n filtersObserver\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ filters, applyFilter, error, message }) => {\n this.errorOutput.emit(error);\n this.error = error;\n this.errorState = message;\n if (!error) {\n this.createForm(filters, applyFilter)\n }\n });\n }\n\n private createForm(filters: any, applyFilter: any) {\n this.tabs = this.createTabs(filters);\n this.counterUpdate();\n this.setDependencies(this.formFilters);\n this.createChildArray();\n if (filters.length > 0 && applyFilter) {\n this.applyFilters();\n }\n }\n\n private setDependencies(filters: FormFilter[]) {\n const names = Object.keys(filters);\n const dependencies = from(names).pipe(\n map(key => filters[key] as FormFilter),\n rxFilter(({ dependsOn }) => dependsOn && dependsOn.length > 0),\n tap(({ dependsOn, domain, filterControl }) => {\n const invalidFilters = dependsOn\n .filter(dep => dep.required)\n .filter(dep => {\n const id = getFilterId(domain, dep.filterName);\n const formFilter = filters[id];\n const { value, type } = formFilter;\n const { comparator } = dep;\n if (comparator && isValidOperator(comparator.operator) && isSupportedType(type)) {\n const fieldValue = parseFilterValue(value, type);\n return !compare(comparator.operator, comparator.value, fieldValue);\n }\n return dep.required ? !formFilter.value : formFilter.value;\n });\n\n if (invalidFilters.length > 0) {\n filterControl.disable();\n }\n }),\n map(({ domain, dependsOn, filterControl }) => ({ domain, dependsOn, filterControl }))\n );\n\n dependencies.subscribe(({ dependsOn, domain, filterControl }) =>\n from(dependsOn)\n .pipe(\n rxFilter(dep => dep.required),\n map(({ filterName }) => getFilterId(domain, filterName)),\n map(filterId => filters[filterId] as FormFilter),\n mergeMap(formFilter => from(formFilter.valueChanges)),\n map(val => {\n const comparation = dependsOn.every(dep => {\n const filterId = getFilterId(domain, dep.filterName);\n if (this.formFilters[filterId]) {\n const type = this.formFilters[filterId].type;\n const { comparator } = dep;\n if (comparator && isValidOperator(comparator.operator) && isSupportedType(type)) {\n const value = parseFilterValue(val, type);\n return compare(comparator.operator, comparator.value, value);\n }\n return true;\n }\n });\n return !this.IsEmpty(val) && comparation ? 'enable' : 'disable';\n })\n )\n .subscribe(status => filterControl[status]())\n );\n }\n\n private addGeneralField(filter: Filter) {\n const { name, domain, type } = filter;\n const controlName = getFilterId(domain, name);\n const fieldControl = createFormControl(filter);\n\n fieldControl.valueChanges\n .pipe(\n takeUntil(this.destroy$),\n map(v => parseFilterValue(v, type)),\n tap(value => (this.formFilters[controlName].value = value))\n )\n .subscribe(val =>\n this.tabs.forEach(tab => {\n const control = tab.form.controls[name];\n if (control && tab.domain === domain) {\n control.setValue(val, { emitEvent: false });\n }\n })\n );\n\n const newFilter = { ...filter, ...{ name: controlName } };\n const newField = this.createField(newFilter);\n this.general.form.addControl(controlName, fieldControl);\n this.general.fields.push(newField);\n }\n\n /*\n * Verifica os contextos de cada filtro, caso todos os contextos foram informados:\n * @return true\n * Caso não tenha nenhum contexto, considera-se por padrão que é todos:\n * @return true\n */\n private containsAllContexts(myContexts: string[]) {\n if (!myContexts.length) {\n return true;\n }\n const allContexts = this.contexts.map(data => data.contextId);\n return equals(myContexts.sort(), allContexts.sort());\n }\n\n /**\n *\n * @todo Refatorar. O método possui muitas responsabilidades\n * \n */\n private createTabs(filters: Filter[]) {\n return filters.reduce((tabs, filter) => {\n const { domain, services, name, type, scope, contexts, dependsOn, value, search, defaultValue } = filter;\n const isNotMultiple = search && getSearchType(search).output.maxSelectedItems === 1;\n const field = this.createField(filter);\n const filterId = getFilterId(domain, name);\n const filterConfig = {\n domain,\n contexts,\n services,\n name,\n dependsOn,\n value: fromJson(value, type, isNotMultiple),\n type,\n isMultiple: !isNotMultiple,\n defaultValue: fromJson(defaultValue, type, isNotMultiple)\n };\n this.formFilters[filterId] = new FormFilter(filterConfig);\n const formFilter = this.formFilters[filterId];\n if (scope === Scope.DOMAIN && this.containsAllContexts(contexts)) {\n this.addGeneralField(filter);\n }\n\n contexts.forEach(contextId => {\n if ((contextId === this.contextId) || (this.contextId === '')) {\n const tabId = getTabId(domain, contextId);\n const fieldControl = createFormControl(filter);\n\n if (!tabs.has(tabId)) {\n const { contextLabel } = this.contexts.find(context => context.contextId === contextId);\n const tab = new ContextTab({ domain, name: contextLabel });\n tabs.set(tabId, tab);\n }\n\n fieldControl.valueChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe((val: any) => this.updateFilterValue(tabId, name, val, domain, type));\n\n const contextTab = tabs.get(tabId);\n\n contextTab.fields.push(field);\n contextTab.form.addControl(filter.name, fieldControl);\n\n if (!formFilter.filterControl) {\n formFilter.filterControl = fieldControl;\n }\n }\n });\n\n\n return tabs;\n }, new Map<string, ContextTab>());\n }\n\n private updateFilterValue(tabId: string, filterName: string, value: any, domain: string, type: FilterType) {\n const controlOpts = { emitEvent: false };\n const fieldValue = parseFilterValue(value, type);\n const filterId = getFilterId(domain, filterName);\n const generalFieldControl = this.general.form.controls[filterId];\n\n this.tabs.forEach(({ form }, key) => {\n const control = form.controls[filterName];\n\n if (tabId !== key && control) {\n control.setValue(value, controlOpts);\n }\n });\n const { childs } = this.formFilters[filterId];\n childs && childs.forEach((child: any) => this.cleanFieldAndSetDefaultValue(child.filter.key));\n generalFieldControl && generalFieldControl.setValue(value, controlOpts);\n this.formFilters[filterId].value = fieldValue;\n }\n\n private cleanFieldAndSetDefaultValue(key: string) {\n const { isMultiple, defaultValue, filterControl, type } = this.formFilters[key] as FormFilter;\n const finalValue = this.getDefaultValue(defaultValue, isMultiple);\n\n if (filterControl) {\n if (type === 'DATE' || (type === 'SEARCH' && isMultiple)) {\n filterControl.setValue(finalValue);\n }\n if (type === 'INTEGER' || type === 'DOUBLE' || type === 'MONEY') {\n finalValue === '' ? filterControl.setValue(null) : filterControl.setValue(finalValue);\n } else {\n filterControl.setValue(finalValue, { onlySelf: true });\n }\n }\n }\n\n private createChildArray() {\n const keys = Object.keys(this.formFilters);\n keys.forEach(key => {\n const { dependsOn, domain } = this.formFilters[key];\n dependsOn.forEach((field: any) => {\n const filterId = getFilterId(domain, field.filterName);\n if (this.formFilters[filterId]) {\n if (!this.formFilters[filterId].childs) {\n this.formFilters[filterId].childs = [];\n }\n this.formFilters[filterId].childs.push({ filter: { key, required: field.required } });\n }\n });\n });\n }\n\n private createField(filter: Filter): Field {\n const { name, label, enumItems, type, mask } = filter;\n const translatedEnumItems =\n enumItems && enumItems.map((item: EnumItem) => ({ label: this.translate.instant(item.label), value: item.value }));\n const field = { name, label: this.translate.instant(label), placeholder: '' };\n\n const creators = {\n [FilterType.STRING]: () => new TextField({ ...field, mask: mask ? () => mask : null, type: FieldType.String }),\n [FilterType.MONEY]: () => new CurrencyField({ ...field, type: FieldType.Money }),\n [FilterType.BOOLEAN]: () => this.createRadioButton({ ...field }),\n [FilterType.DATE]: () => this.createCalendar({ ...field, type: FieldType.Date }),\n [FilterType.DATETIME]: () => this.createCalendar({ ...field, type: FieldType.DateTime }),\n [FilterType.TIME]: () => this.createCalendar({ ...field, type: FieldType.Time }),\n [FilterType.ENUMERATION]: () =>\n new SelectField({\n ...field,\n placeholder: this.translate.instant('platform.filter_service.select'),\n options: [...translatedEnumItems] as any,\n type: FieldType.Enum\n }),\n [FilterType.INTEGER]: () =>\n new NumberField({\n ...field,\n numberLocaleOptions: this.optionsInteger(),\n mask: mask ? () => mask : null,\n type: FieldType.Integer\n }),\n [FilterType.DOUBLE]: () => new CurrencyField({ ...field, type: FieldType.Double }),\n [FilterType.SEARCH]: () => this.createAutocompleteField(field, filter)\n };\n\n return creators[type]();\n }\n\n private createRadioButton(field: FieldConfig) {\n const options = [\n { label: this.translate.instant(`${TRANSLATE_PREFIX}.yes`), value: true },\n { label: this.translate.instant(`${TRANSLATE_PREFIX}.no`), value: false }\n ] as RationButtonOption[];\n\n return new RadioButtonField({ ...field, type: FieldType.Radio, options });\n }\n\n private createCalendar(config: CalendarFieldConfig) {\n const calendar = new CalendarField(config);\n calendar.calendarLocaleOptions = this.calendarOptionsService.getOptions();\n if (!this.isModal) calendar.appendTo = 'body';\n return calendar;\n }\n\n private createAutocompleteField(field: FieldConfig, { dependsOn, search, domain, name }: Filter) {\n const suggestionsObservable = new BehaviorSubject<any[]>([]);\n const { queryParam } = getSearchType(search).input;\n const { displayFields, keyFields, resultDataJsonPath, displayFieldConcatToken, maxSelectedItems } = getSearchType(search).output;\n const filterId = getFilterId(domain, name);\n const suggestionsError = (messageError?: string) => {\n const messageDetail = messageError ? messageError : this.translate.instant(`${TRANSLATE_PREFIX}.find_suggestions_error`, { activeFilters: this.totalFiltersActive })\n const message = {\n key: 'filterServiceToastKey',\n severity: 'error',\n life: TOAST_LIFE,\n detail: messageDetail\n };\n this.sendMessage(message);\n };\n const onSearch = (val: string) => {\n const params = { [queryParam]: val };\n dependsOn && Object.assign(params, this.getDependenciesValues(dependsOn, domain));\n\n const searchUrl =\n search && search.type === 'ENTITY'\n ? this.getEntitySearchUrl(search.entitySearch.input, val, dependsOn)\n : getSearchType(search).input.url;\n\n this.filterService\n .searchFieldSuggestions(searchUrl, params, search.type)\n .pipe(\n map(response => jsonPath(response, resultDataJsonPath)),\n map((suggestions: any[]) => this.addSuggestionFields(suggestions, displayFields, keyFields, displayFieldConcatToken, filterId))\n )\n .subscribe(result => {\n suggestionsObservable.next(result);\n this.changeDetectorRef.detectChanges();\n }, (error) => {\n let messageError = undefined\n if (error && error.error.message) messageError = error.error.message\n suggestionsError(messageError)\n });\n };\n\n return new AutocompleteField({\n ...field,\n onSearch,\n appendTo: 'body',\n suggestionsObservable,\n displayField: searchDisplayName,\n dataKey: searchKeyName,\n multiple: maxSelectedItems > 1,\n size: { lg: 12, md: 12, xl: 12 },\n emptyMessage: this.translate.instant(`${TRANSLATE_PREFIX}.search_empty_message`)\n });\n }\n\n private getEntitySearchUrl(search: EntitySearchInput, value: string, dependsOn: DependsOn[]) {\n const { attributes, domainName, entityName, serviceName } = search;\n const url = `${domainName}/${serviceName}/entities/${entityName}/?filter=`;\n const filters: any = attributes.map(attr => filterOperators[attr.comparator](attr.name, value));\n\n dependsOn &&\n dependsOn.forEach(obj => {\n const filterId = getFilterId(domainName, obj.filterName);\n const fieldValue = this.formFilters[filterId].value[searchKeyName];\n filters.push(`${obj.entityAttribute} eq '${fieldValue}'`);\n });\n\n // O regex apenas seleciona as virgulas ignorando as que estiverem dentro do ()\n return url.concat(filters).replace(/[,]+(?![^(]*[)])/g, ` ${search.operator} `);\n }\n\n private addSuggestionFields(suggestions: any[], displayFields: string[], keyFields: string[], separator: string, filterId: string) {\n const addValue = (acc: string, value: any, token: string) => (acc ? `${acc}${token}${value}` : value);\n\n const result = suggestions.map(suggestion => ({\n ...suggestion,\n [searchDisplayName]: displayFields.reduce((value, display) => {\n return addValue(value, this.translate.instant(suggestion[display]), separator);\n }, ''),\n [searchKeyName]: keyFields.reduce((value, key) => addValue(value, suggestion[key], ', '), '')\n }));\n this.formFilters[filterId].invalidValue = result.length === 0;\n\n return result.filter(item => {\n const { value } = this.formFilters[filterId];\n if (Array.isArray(value)) {\n const index = value.findIndex((i: any) => i.$$__keyValue__ === item.$$__keyValue__);\n if (index === -1) {\n return item;\n }\n } else {\n return item;\n }\n });\n }\n\n private getDependenciesValues(dependencies: DependsOn[], domain: string) {\n return dependencies.reduce((params, { filterName }) => {\n const filterId = getFilterId(domain, filterName);\n if (this.formFilters[filterId]) {\n const { value, type } = this.formFilters[filterId];\n if (type === 'ENUMERATION') {\n params[filterName] = value;\n } else {\n if (Array.isArray(value)) {\n params[filterName] = value.map(arr => arr[searchKeyName]);\n } else {\n params[filterName] = value ? value[searchKeyName] : [''];\n }\n }\n this.IsEmpty(params[filterName]) && delete params[filterName];\n return params;\n }\n }, {});\n }\n\n /*\n * Verifica se o valor informado é falso, em arrays, é verificado cada item\n */\n private IsEmpty(value: any) {\n return Array.isArray(value) ? value.every(data => !data) : !value;\n }\n\n /**\n * Return format to specify for integer type field\n */\n private optionsInteger() {\n return { currencySymbol: '', decimalSeparator: '', thousandsSeparator: '' };\n }\n}\n","export function jsonPath(object: Object, path: string): any {\n path = path.replace('$.', '');\n const allPaths = path.split('.');\n const currentPath = allPaths[0];\n const value = object[currentPath];\n allPaths.shift();\n\n if (allPaths.length) {\n return jsonPath(value, allPaths.join('.'));\n }\n return value;\n}\n","export const searchDisplayName = '$$__displayValue__';\nexport const searchKeyName = '$$__keyValue__';\n","import { Component, HostListener, Input, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { FormFilterComponent } from '../form-filter/form-filter.component';\n\nconst TRANSLATE_PREFIX = 'platform.filter_service';\n\n@Component({\n selector: 's-advanced-filter',\n templateUrl: './advanced-filter.component.html',\n styleUrls: ['./advanced-filter.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class AdvancedFilterComponent implements OnInit, OnDestroy {\n @Input() labelButton = 'Filters';\n @Input() onlyContent = false;\n @Input() hideButtons = false;\n @Input() canOpenFilter = true;\n @Input() showActiveFiltersCountBadge = true;\n @Input() filterAndSave = false;\n @Input() contextId = ''\n\n subscriptions: Subscription[] = [];\n\n isMobile = false;\n tabViewOrientation = 'left';\n totalFiltersActive = 0;\n showDialog = false;\n error = false;\n currentTicket = '';\n\n @ViewChild(FormFilterComponent)\n modalComponent: FormFilterComponent;\n\n mobileButtonActions = [\n { id: 'save', label: this.translate.instant('save'), command: () => this.modalComponent.saveFilters() },\n { id: 'clear', label: this.translate.instant('clear'), command: () => this.modalComponent.clearFilters() }\n ];\n\n constructor(public translate: TranslateService, private router: Router) { }\n\n ngOnInit() {\n this.isMobile = innerWidth <= 640;\n this.tabViewOrientation = this.isMobile ? 'top' : 'left';\n\n const sub = this.router.events.subscribe(e => {\n if (e instanceof NavigationEnd) {\n this.modalComponent.getFilters();\n }\n });\n\n this.subscriptions.push(sub);\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(v => v.unsubscribe());\n }\n\n @HostListener('window:resize', ['$event'])\n onResizeWindow(event: any) {\n const { innerWidth } = event.target;\n this.isMobile = innerWidth <= 640;\n this.tabViewOrientation = this.isMobile ? 'top' : 'left';\n }\n\n get appliedFiltersTooltip() {\n return this.totalFiltersActive > 1\n ? this.translate.instant(`${TRANSLATE_PREFIX}.applied_filters_message`, { totalActiveFilters: this.totalFiltersActive })\n : this.translate.instant(`${TRANSLATE_PREFIX}.applied_filter_message`, { totalActiveFilters: this.totalFiltersActive });\n }\n\n onError(event: boolean) {\n this.error = event;\n }\n\n saveFilters(forceSave = false) {\n this.modalComponent.saveFilters(forceSave);\n }\n\n saveFiltersWithCallbackFunction(callbackFunction: any) {\n this.modalComponent.saveFiltersWithCallbackFunction(callbackFunction);\n }\n\n clearFilters() {\n this.modalComponent.clearFilters();\n }\n\n close() {\n this.modalComponent.getFilters();\n window.parent.postMessage(\n {\n message: 'dashboard:close-modal',\n payload: {\n modalName: 'advanced-filter-1'\n }\n },\n '*'\n );\n }\n\n applyFilters() {\n if (this.modalComponent.hasChanges()) {\n this.showDialog = false;\n }\n\n if (this.filterAndSave) {\n this.modalComponent.saveFilters();\n }\n\n this.modalComponent.applyFilters(true);\n }\n\n onApplyFilters() {\n if (this.filterAndSave) {\n this.modalComponent.saveFilters();\n }\n\n this.modalComponent.onApplyFilters();\n }\n\n toggleDialog() {\n this.showDialog = !this.showDialog;\n }\n\n updateTotalFiltersActive(event: number) {\n this.totalFiltersActive = event;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { ButtonModule as PrimeNGButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { TabViewModule } from 'primeng/tabview';\nimport { ToastModule } from 'primeng/toast';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { MessageService } from \"primeng/api\";\nimport { DynamicFormModule, ButtonModule, EmptyStateModule, LocaleService } from '@seniorsistemas/angular-components';\n\nimport { MapValuesPipe } from './pipes/map-values.pipe';\nimport { TranslatePipe } from './pipes/translate.pipe';\nimport { TranslationsModule } from './../translations/translations.module';\nimport { fallback } from './locale/fallback';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AdvancedFilterService } from './services/advanced-filter.service';\nimport { AdvancedFilterComponent } from './components/advanced-filter/advanced-filter.component';\nimport { FormFilterComponent } from './components/form-filter/form-filter.component';\nimport { CalendarOptionsService } from './services/calendar-options.service';\n\nexport class AppRoutingModule {}\n@NgModule({\n imports: [\n DialogModule,\n ButtonModule,\n PrimeNGButtonModule,\n TabViewModule,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n DynamicFormModule,\n ToastModule,\n EmptyStateModule,\n TooltipModule,\n TranslationsModule.forChild([{domain: 'platform', service: 'filter_service', fallback}]),\n ],\n providers: [AdvancedFilterService, LocaleService, MessageService, TranslateService, CalendarOptionsService],\n declarations: [AdvancedFilterComponent, FormFilterComponent, MapValuesPipe, TranslatePipe],\n exports: [AdvancedFilterComponent, FormFilterComponent]\n})\nexport class AdvancedFilterModule {}\n","import { Injectable } from '@angular/core';\nimport { HttpInterceptor, HttpHandler, HttpRequest, HttpEvent, HttpResponse } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nconst jc = require('json-cycle');\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CyclicJsonInterceptor implements HttpInterceptor {\n public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (req.body instanceof Blob === false && req.body instanceof FormData === false) {\n req = req.clone({ body: jc.decycle(req.body) });\n }\n return next.handle(req).pipe(\n map((event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n event = event.clone({ body: jc.retrocycle(event.body) });\n }\n return event;\n })\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { CyclicJsonInterceptor } from './cyclic-json-interceptor.service';\n\n@NgModule({\n imports: [HttpClientModule],\n providers: [{ provide: HTTP_INTERCEPTORS, useClass: CyclicJsonInterceptor, multi: true }]\n})\nexport class CyclicJsonInterceptorModule {}\n","import { service } from '@seniorsistemas/senior-platform-data';\nimport { Injectable } from '@angular/core';\nimport { Observable, defer, from } from 'rxjs';\n\n@Injectable()\nexport class RestUrl {\n get(): Observable<string> {\n return defer(() => from(service.getRestUrl()));\n }\n}\n","import { service } from '@seniorsistemas/senior-platform-data';\nimport { Injectable } from '@angular/core';\nimport { Observable, defer, from } from 'rxjs';\n\n@Injectable()\nexport class XServicesUrl {\n\n get(): Observable<string> {\n return defer(() => {\n const url = service.getXServicesUrl();\n return from(url);\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpInterceptor as AngularHttpInterceptor, HttpHandler, HttpRequest, HttpEvent } from '@angular/common/http';\nimport { user } from '@seniorsistemas/senior-platform-data';\nimport { Observable, forkJoin, defer, from } from 'rxjs';\nimport { mergeMap } from 'rxjs/operators';\n\nimport { RestUrl } from './rest-url.service';\nimport { XServicesUrl } from './x-services-url.service';\n\n@Injectable()\nexport class HttpInterceptor implements AngularHttpInterceptor {\n\n constructor(private readonly restUrl: RestUrl, private readonly xServicesUrl: XServicesUrl) {}\n\n public intercept(originalReq: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!originalReq.url.includes(`://`)) {\n const getAuthHeader = defer(() => from(user.getAuthHeader()));\n if (/^\\/?[^\\/]+\\/[^\\/]+\\/api\\/(?:latest|v\\d+)\\/.+$/g.test(originalReq.url)) {\n const getXServicesUrl = this.xServicesUrl.get();\n return forkJoin([getXServicesUrl, getAuthHeader]).pipe(\n mergeMap((values: any) => {\n const [xUrl, authHeader] = values;\n return this.injectBaseUrl(originalReq, next, xUrl, authHeader);\n })\n );\n }\n const getRestUrl = this.restUrl.get();\n return forkJoin([getRestUrl, getAuthHeader]).pipe(\n mergeMap((values: any) => {\n const [bridgeUrl, authHeader] = values;\n return this.injectBaseUrl(originalReq, next, bridgeUrl, authHeader);\n })\n );\n }\n return next.handle(originalReq);\n }\n\n private injectBaseUrl(originalReq: HttpRequest<any>, next: HttpHandler,\n baseUrl: string, authorization: string): Observable<HttpEvent<any>> {\n const request = originalReq.clone({\n url: baseUrl + originalReq.url,\n headers: originalReq.headers.set(`Authorization`, authorization)\n });\n return next.handle(request);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\n\nimport { RestUrl } from './rest-url.service';\nimport { XServicesUrl } from './x-services-url.service';\nimport { HttpInterceptor } from './http-interceptor.service';\n\n@NgModule({\n imports: [HttpClientModule],\n providers: [RestUrl, XServicesUrl, { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptor, multi: true }]\n})\nexport class HttpInterceptorModule {}\n","import { InjectionToken } from '@angular/core';\n\nexport const RESOURCES = new InjectionToken<Resources>('RESOURCES');\nexport const ENVIRONMENT = new InjectionToken<Environment>('ENVIRONMENT');\nexport type Resources = Resource[];\n\nexport interface Permission {\n resource: string;\n action: string;\n authorized: boolean;\n owner: boolean;\n resourceFilters: string[];\n}\n\nexport interface Result {\n permissions: Permission[];\n authorized: boolean;\n}\n\nexport class Resource {\n name: string;\n actions: string[];\n uri?: string;\n redirectToError ? = false;\n actionsToCheck?: string[];\n entity?: boolean;\n}\n\nexport class Environment {\n domain?: string;\n service?: string;\n ignorePermissions: boolean;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MessageService } from \"primeng/api\";\nimport { from, Observable, of, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { Environment, ENVIRONMENT, Permission, Resource, Resources, RESOURCES, Result } from './permissions.config';\n\nexport let promise: Promise<any>;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PermissionsService {\n private checkedPermissions: Permission[] = [];\n private actionUrl = 'platform/authorization/queries';\n\n constructor(\n @Inject(RESOURCES) private readonly resources: Resources,\n @Inject(ENVIRONMENT) private readonly environment: Environment,\n private readonly http: HttpClient,\n private readonly router: Router,\n private readonly messageService: MessageService,\n private readonly translate: TranslateService\n ) {}\n\n // v2\n checkAccess(resources: Resource[]): Observable<any> {\n const permissions: any[] = [];\n\n resources.forEach(rec => {\n rec.actions.forEach(action => {\n if (!rec.uri) {\n const resource = this.getUriByResourceName(rec.name, rec.entity);\n rec.uri = resource;\n }\n permissions.push({ action, resource: rec.uri });\n });\n });\n\n return this.http.post(`${this.actionUrl}/checkAccess`, { includeFilters: true, permissions }).pipe(\n map(({ permissions: checkedPermissions }: Result) => {\n this.checkedPermissions = [...this.checkedPermissions, ...checkedPermissions];\n\n const values = {};\n\n if (this.shouldRedirectToForbiddenPage(resources, checkedPermissions)) {\n this.router.navigate(['error', 403]);\n return throwError('forbidden');\n }\n\n checkedPermissions.forEach(permission => {\n const resource = resources.find(res => res.uri === permission.resource);\n const { name } = resource;\n\n values[name] = values[name] || {};\n values[name][permission.action] = permission.authorized;\n values[name][permission.action.toLowerCase()] = permission.authorized;\n\n if (permission.resourceFilters && permission.resourceFilters.length) {\n if (!values[name]['resourceFilters']) {\n values[name]['resourceFilters'] = [];\n }\n\n permission.resourceFilters.forEach((resourceFilter) => {\n values[name]['resourceFilters'].push(resourceFilter);\n });\n }\n });\n\n return values;\n })\n );\n }\n\n // v1\n get(resource: string = '') {\n if (!promise) {\n promise = this.getPermissions();\n }\n return from(promise).pipe(\n map((permissions: Permission[]) => {\n this.checkedPermissions = permissions;\n\n if (resource) {\n const resourceKey = Object.keys(permissions).find(key => key.toLowerCase() === resource.toLowerCase());\n return permissions[resourceKey];\n }\n return permissions;\n }),\n catchError((err: any) => {\n promise = undefined;\n this.messageService.add({\n severity: 'error',\n summary: this.translate.instant('permission_error_summary'),\n detail: this.translate.instant('permission_error_detail')\n });\n\n return of(this.getPermissionObject(false));\n })\n );\n }\n\n isAuthorized(resourceName: string, action: string, isEntity?: boolean): boolean {\n if (!this.checkedPermissions.length) {\n throwError('\\'Permissions\\' are not defined. You should call \\'get\\' or \\'checkAccess\\' method first.');\n }\n\n const resourceUri = this.getUriByResourceName(resourceName, isEntity);\n\n const permissionsOfResource = this.checkedPermissions.filter(perm => perm.resource === resourceUri);\n const permissionOfAction = permissionsOfResource.find(permRec => permRec.action.toLowerCase() === action.toLowerCase());\n\n return permissionOfAction && permissionOfAction.authorized;\n }\n\n private getUriByResourceName(resourceName: string, isEntity?: boolean): string {\n const { domain, service } = this.environment;\n\n if (!domain || !service) {\n throwError('You must inform domain and service name');\n }\n\n const uriBase = `res://senior.com.br/${domain}/${service}`;\n\n if (isEntity) {\n return `${uriBase}/entities/${resourceName}`;\n } else {\n return `${uriBase}/${resourceName}`;\n }\n }\n\n /**\n * Valida com base nas propriedade redirectToError e actionsToCheck\n * se a ação de um recurso deve enviar para a página de erro caso não tenha autorização\n */\n private shouldRedirectToForbiddenPage(resources: Resource[] = [], permissions: Permission[]): boolean {\n const permissionsDenied = permissions.filter(perm => !perm.authorized);\n\n if (permissionsDenied && permissionsDenied.length) {\n const resourcesToCheck = resources.filter(resource => resource.redirectToError);\n\n if (resourcesToCheck && resourcesToCheck.length) {\n return resourcesToCheck.every(resource => {\n const actionsToCheck = resource.actionsToCheck && resource.actionsToCheck.length ? resource.actionsToCheck : resource.actions;\n\n return actionsToCheck.every(action =>\n permissionsDenied.some(permissionDenied => permissionDenied.resource === resource.uri && permissionDenied.action === action)\n );\n });\n }\n\n return false;\n }\n\n return false;\n }\n\n private getFlatEnvironment() {\n return this.environment.ignorePermissions;\n }\n\n private getFlatResources() {\n return this.resources.reduce((result: Resource[], item: any) => {\n if (!item) {\n return result;\n }\n\n if (Array.isArray(item)) {\n return [...result, ...item];\n }\n\n return [...result, item];\n }, []);\n }\n\n private getPermissionObject(defaultValue: boolean) {\n return this.getFlatResources().reduce((resources: object, resource: Resource) => {\n resources[resource.name] = resource.actions.reduce((actions: any, action: any) => {\n actions[action] = defaultValue;\n actions[action.toLowerCase()] = defaultValue;\n return actions;\n }, {});\n return resources;\n }, {});\n }\n\n private async getPermissions() {\n if (this.getFlatEnvironment()) {\n return this.getPermissionObject(true);\n }\n const resources = this.getFlatResources();\n const perm = resources\n .map(resource => resource.actions.map((action: any) => ({ action: action, resource: resource.uri })))\n .reduce((acc: any, val: any) => [...acc, ...val]);\n\n const permissions: any[] = await this.http\n .post<any>(`${this.actionUrl}/checkAccess`, {\n includeFilters: false,\n permissions: perm\n })\n .toPromise()\n .then(response => response.permissions);\n\n const values = {};\n\n permissions.forEach((permission: any) => {\n const resource = resources.find((res: any) => res.uri === permission.resource);\n const { name } = resource;\n values[name] = values[name] ? values[name] : {};\n values[name][permission.action] = permission.authorized;\n values[name][permission.action.toLowerCase()] = permission.authorized;\n });\n return values;\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { Resource, RESOURCES, ENVIRONMENT, Environment } from './permissions.config';\nimport { PermissionsService } from './permissions.service';\n\n@NgModule()\nexport class PermissionsModule {\n public static forRoot(resources: Resource[], environment: Environment): ModuleWithProviders<PermissionsModule> {\n return {\n ngModule: PermissionsModule,\n providers: [\n PermissionsService,\n {\n provide: RESOURCES,\n multi: true,\n useValue: resources\n },\n {\n provide: ENVIRONMENT,\n multi: false,\n useValue: environment\n }\n ]\n };\n }\n\n public static forChild(resources: Resource[]): ModuleWithProviders<PermissionsModule> {\n return {\n ngModule: PermissionsModule,\n providers: [\n {\n provide: RESOURCES,\n multi: true,\n useValue: resources\n }\n ]\n };\n }\n}\n","export function ResourceFactory({ domain, service, resource }: { domain: string; service: string; resource: string }) {\n return `res://senior.com.br/${domain}/${service}/${resource}`;\n}\nfunction endpointFactoryFunction(domain: string, service: string) {\n // The @seniorsistemas/platform-components http interceptor is handling the base url portion of the final URL\n const create = (method: string, endpoint: string) => `${domain}/${service}/${method}/${endpoint}`;\n const resource = (resource: string) => ResourceFactory({ domain, service, resource });\n return {\n resource,\n query: create.bind(null, 'queries'),\n action: create.bind(null, 'actions'),\n signal: create.bind(null, 'signals'),\n entity(entity: string) {\n const URL = create('entities', entity);\n return {\n create: () => URL,\n update: (id: string) => URL + '/' + id,\n remove: (id: string) => URL + '/' + id\n };\n }\n };\n}\n\nexport const endpointFactory = endpointFactoryFunction;\n// ADD HERE YOUR NEW ENDPOINT\nexport const PLATFORM_FEATURE_TOGGLE = endpointFactoryFunction('platform', 'feature_toggle');\n","export enum UserAction {\n CONFIRMED = 'CONFIRMED',\n POSTPONED = 'POSTPONED',\n REFUSED = 'REFUSED'\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, from, of } from 'rxjs';\nimport { Feature, GetEnabledFeaturesOutput } from './models/feature';\nimport { map, shareReplay, catchError, mergeMap } from 'rxjs/operators';\nimport { user } from '@seniorsistemas/senior-platform-data';\nimport { PLATFORM_FEATURE_TOGGLE } from './constants/endpoint.constant';\n\n@Injectable({ providedIn: 'root' })\nexport class FeatureToggleService {\n constructor(private http: HttpClient) {}\n\n cache: { [key: string]: Observable<Feature[]> } = {};\n\n isEnabled({ domain, service, name }: Feature, tenant?: string): Observable<boolean> {\n let tenantObs;\n if (tenant) {\n tenantObs = of(tenant);\n } else {\n tenantObs = from(user.getUserData()).pipe(map(userData => userData.tenantName));\n }\n return tenantObs.pipe(\n mergeMap(tenant => {\n const key = JSON.stringify({ tenant, domain, service });\n if (!this.cache[key]) {\n this.cache[key] = this.http\n .post<GetEnabledFeaturesOutput>(PLATFORM_FEATURE_TOGGLE.query('getEnabledFeatures'), { tenant, domain, service })\n .pipe(\n map(output => output.features),\n shareReplay(1),\n catchError(err => {\n console.error(err);\n delete this.cache[key];\n return of([]);\n })\n );\n }\n return this.cache[key];\n }),\n map((features: Feature[]) => {\n return features.findIndex(f => f.name === name) !== -1;\n })\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FeatureToggleService } from './feature-toggle.service';\nimport { HttpInterceptorModule } from '../http-interceptor/http-interceptor.module';\n\n@NgModule({\n imports: [HttpClientModule, HttpInterceptorModule],\n providers: [FeatureToggleService]\n})\nexport class FeatureToggleModule {}\n","export enum EnumDisplayType {\n ADVERSITING = 'ADVERSITING',\n INTEGRATION = 'INTEGRATION'\n}\n","import { SpotlightNotification } from './../models/spotlight-notification.interface';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n SpotlightScreenList,\n SpotlightUsersList,\n SpotlightControlList,\n SpotlightUser,\n SpotlightControl\n} from '../models/index';\n\n@Injectable()\nexport class SpotlightService {\n constructor(private http: HttpClient) {}\n\n private API_URL = 'platform/spotlight/';\n\n public getUser(): Promise<any> {\n return this.http.post<any>('platform/user/queries/getUser', {}).toPromise();\n }\n\n public listSpotlightScreen(): Observable<SpotlightScreenList> {\n return this.http.get<SpotlightScreenList>(this.API_URL + 'queries/listSpotlightScreen');\n }\n\n public listSpotlightUsers(): Promise<SpotlightUsersList> {\n return this.http.get<SpotlightUsersList>(this.API_URL + 'queries/listSpotlightUsers').toPromise();\n }\n\n public listSpotlightControl(): Promise<SpotlightControlList> {\n return this.http.get<SpotlightControlList>(this.API_URL + 'queries/listSpotlightControl').toPromise();\n }\n\n public saveSpotlightUser(content: SpotlightUser) {\n return this.http.post<SpotlightUser>(this.API_URL + 'actions/saveSpotlightUsers', { content });\n }\n\n public saveSpotlightControl(content: SpotlightControl) {\n return this.http.post<SpotlightControl>(this.API_URL + 'actions/saveSpotlightControl', { content });\n }\n\n public notificateSpotlight(content: SpotlightNotification) {\n return this.http.post<SpotlightNotification>(this.API_URL + 'actions/notificateSpotlight', content);\n }\n}\n","import { EnumSpotlightStatus } from './spotlight-status.enum';\n\nexport class SpotlightControl {\n id?: string;\n spotlightId: string;\n status: EnumSpotlightStatus;\n firstUser?: string;\n createdBy?: string;\n createdDate?: string;\n lastModifiedBy?: string;\n lastModifiedDate?: string;\n}","export enum EnumSpotlightStatus {\n ACTIVE = 'ACTIVE',\n IN_PROGRESS = 'IN_PROGRESS',\n NO_STARTED = 'NO_STARTED',\n REFUSED = 'REFUSED'\n}\n","import { UserAction } from './../models/user-action.enum';\nimport { SpotlightNotification } from './../models/spotlight-notification.interface';\nimport {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport { SpotlightService } from '../service/spotlight.service';\nimport {\n Spotlight,\n SpotlightScreen,\n EnumDisplayType,\n EnumSpotlightStatus,\n SpotlightControlList,\n SpotlightUsersList,\n SpotlightUser,\n SpotlightControl\n} from '../models/index';\nimport { DatePipe } from '@angular/common';\nimport { CookieService } from 'ngx-cookie-service';\n\n@Component({\n selector: 's-spotlight',\n templateUrl: './spotlight.component.html',\n styleUrls: ['./spotlight.component.scss']\n})\nexport class SpotlightComponent implements OnInit {\n\n constructor(\n private spotlightService: SpotlightService,\n private cookieService: CookieService,\n private datePipe: DatePipe\n ) {}\n\n public header: string;\n public imgUrl: string;\n public primaryButtonLabel: string;\n public primaryButtonTooltip: string;\n public canAppear = false;\n\n private currentUser: string;\n private spotlightUsersList: SpotlightUsersList;\n private spotlightControlsList: SpotlightControlList;\n private spotlightScreen: SpotlightScreen;\n private canEmitEvent: boolean;\n\n @Input()\n public visible = false;\n\n @Input()\n public menuId: string;\n\n @Input()\n public fade = false;\n\n @Output()\n public visibleChange = new EventEmitter<boolean>();\n\n async ngOnInit() {\n await this.setValues();\n this.fetchSpotlight();\n }\n\n private async setValues() {\n const userData: any = JSON.parse(this.cookieService.get('com.senior.token'));\n this.currentUser = userData.username;\n this.spotlightUsersList = await this.spotlightService.listSpotlightUsers();\n this.spotlightControlsList = await this.spotlightService.listSpotlightControl();\n }\n\n private setValuesInSpotlight(values: Spotlight): void {\n this.header = values.spotlightTitle;\n this.imgUrl = values.bannerUrl;\n this.primaryButtonLabel = values.primaryButtonLabel;\n this.primaryButtonTooltip = values.primaryButtonHint;\n }\n\n private getShowDate(days: number): string {\n const currentDate = new Date();\n return this.datePipe.transform(currentDate.setDate(currentDate.getDate() + days).toString(), 'yyyy-MM-dd');\n }\n\n private fetchSpotlight(): void {\n this.spotlightService.listSpotlightScreen().subscribe(value => {\n this.spotlightScreen = value.contents.filter(val => val.screenMenuId === this.menuId)[0];\n if (this.spotlightScreen) {\n this.showSpotlight(this.spotlightScreen.spotlight);\n }\n });\n }\n\n private showSpotlight(spotlight: Spotlight): void {\n if (this.validateDate(spotlight.initialDate) && this.validateFinalDate(spotlight.finalDate) && this.validateSpotlight(spotlight)) {\n this.setValuesInSpotlight(spotlight);\n this.canAppear = true;\n const control = this.getSpotlightControlFromList(this.spotlightScreen.spotlight.id);\n this.canEmitEvent = !control || this.currentUser !== control.firstUser;\n }\n }\n\n private validateDate(date: string): boolean {\n if (date) {\n const currentDate = this.datePipe.transform(new Date().toString(), 'yyyy-MM-dd');\n const initialDate = this.datePipe.transform(date, 'yyyy-MM-dd');\n\n return currentDate >= initialDate;\n }\n return false;\n }\n\n private validateFinalDate(date: string): boolean {\n if (date) {\n const currentDate = this.datePipe.transform(new Date().toString(), 'yyyy-MM-dd');\n const finalDate = this.datePipe.transform(date, 'yyyy-MM-dd');\n\n return currentDate <= finalDate;\n }\n return true;\n }\n\n private validateSpotlight(spotlight: Spotlight): boolean {\n if (!this.validateControlsList(this.spotlightControlsList, spotlight, this.currentUser)) {\n return false;\n }\n if (!this.validateDisplayType(spotlight, this.spotlightUsersList, this.spotlightControlsList, this.currentUser)) {\n return false;\n }\n return true;\n }\n\n private validateControlsList(controlsList: SpotlightControlList, spotlight: Spotlight, currentUser: string): boolean {\n if (controlsList.totalElements) {\n\n const notCompatibleControls = controlsList.contents.filter(control => {\n if (control.status === EnumSpotlightStatus.ACTIVE) {\n return control.spotlightId === spotlight.id;\n\n } else if (control.status === EnumSpotlightStatus.IN_PROGRESS) {\n return control.spotlightId === spotlight.id && control.firstUser !== currentUser;\n }\n });\n\n if (notCompatibleControls.length > 0) {\n return false;\n }\n }\n return true;\n }\n\n private validateDisplayType(\n spotlight: Spotlight,\n usersList: SpotlightUsersList,\n controlsList: SpotlightControlList,\n currentUser: string\n ): boolean {\n\n switch (spotlight.displayType) {\n case EnumDisplayType.ADVERSITING:\n return usersList.totalElements ? this.validateUser(usersList.contents, spotlight) : true;\n\n case EnumDisplayType.INTEGRATION:\n\n if (controlsList.totalElements) {\n const compatibleControls = controlsList.contents.filter(control => {\n\n switch (control.status) {\n\n case EnumSpotlightStatus.NO_STARTED:\n return control.spotlightId === spotlight.id;\n\n case EnumSpotlightStatus.REFUSED:\n return usersList.totalElements ? this.validateUser(usersList.contents, spotlight) : true;\n\n case EnumSpotlightStatus.IN_PROGRESS:\n return control.firstUser === currentUser\n && control.spotlightId === spotlight.id;\n }\n });\n if (compatibleControls.length === 0) {\n return false;\n }\n }\n return true;\n }\n }\n\n private validateUser(users: SpotlightUser[], spotlight: Spotlight): boolean {\n let spotlightUsers = users.filter(user => user.spotlightId === spotlight.id);\n\n if (!spotlightUsers.length) {\n spotlightUsers = users.filter(user => user.userOperation === this.currentUser);\n\n return spotlightUsers.length === 0;\n }\n\n const compatibleUserToValidate = spotlightUsers.filter(user => user.userOperation === this.currentUser)[0];\n\n return compatibleUserToValidate ? this.validateDate(compatibleUserToValidate.showDate) : true;\n }\n\n private saveSpotlightUser(days?: number): void {\n\n const spotlight = this.spotlightScreen.spotlight;\n\n const user = this.spotlightUsersList.contents.filter(val => {\n return val.spotlightId === spotlight.id\n && val.userOperation === this.currentUser;\n })[0];\n\n let spotlightUser: SpotlightUser = {\n spotlightId: spotlight.id,\n showDate: days ? this.getShowDate(days) : null,\n userOperation: this.currentUser\n };\n\n if (user) {\n spotlightUser = {\n id: user.id,\n ...spotlightUser\n };\n }\n this.spotlightService.saveSpotlightUser(spotlightUser).subscribe();\n }\n\n public onPrimary() {\n const spotlight = this.spotlightScreen.spotlight;\n const notification = this.buildNotification(UserAction.CONFIRMED);\n\n this.saveSpotlightControl();\n this.saveSpotlightUser();\n\n if (this.canEmitEvent) {\n this.spotlightService.notificateSpotlight(notification).subscribe();\n }\n\n if (spotlight.primaryButtonUrl) {\n window.open(spotlight.primaryButtonUrl);\n }\n\n this.close();\n }\n\n public onSecondary(): void {\n const notification = this.buildNotification(UserAction.POSTPONED);\n\n this.saveSpotlightControl(EnumSpotlightStatus.REFUSED);\n this.saveSpotlightUser(this.spotlightScreen.spotlight.daysRememberLate);\n this.spotlightService.notificateSpotlight(notification).subscribe();\n\n this.close();\n }\n\n public onTertiary(): void {\n const notification = this.buildNotification(UserAction.REFUSED);\n\n this.saveSpotlightControl(EnumSpotlightStatus.REFUSED);\n this.saveSpotlightUser(this.spotlightScreen.spotlight.daysNotInterested);\n this.spotlightService.notificateSpotlight(notification).subscribe();\n\n this.close();\n }\n\n /**\n * Verifica se um registro de usuário pertence ao usuário logado e corresponde ao spotlight atual\n * @param user SpotlightUser Objeto representando o registro do usuário para uma spotlight\n * @param spotlight Spotlight Spotlight\n * @returns boolean true se corresponder ao spotlight atual, false caso contrário\n */\n private hasThisRegister(user: SpotlightUser, spotlight: Spotlight): boolean {\n return (user.spotlightId === spotlight.id && user.userOperation === this.currentUser);\n }\n\n /**\n * Verifica se um registro de usuário pertece ao usuário logado, mas não corresponde ao spotlight atual\n * @param user SpotlightUser Objeto representando o registro do usuário para uma spotlight\n * @param spotlight Spotlight Spotlight\n * @returns boolean true se corresponder ao spotlight atual, false caso contrário\n */\n private hasAnotherRegister(user: SpotlightUser, spotlight: Spotlight): boolean {\n return user.spotlightId !== spotlight.id && user.userOperation === this.currentUser;\n }\n\n /**\n * Persiste um novo registro de controle para o spotlight atual se\n * não for encontrado nenhum na lista de controles carregada inicialmente\n * @param status EnumSpotlightStatus Status do controle do spotlight. Se nenhum for informado, IN_PROGRESS será aplicado\n * @returns SpotlightControl Controle do spotlight recuperado/pesistido\n */\n private saveSpotlightControl(status = EnumSpotlightStatus.IN_PROGRESS): SpotlightControl {\n const spotlight = this.spotlightScreen.spotlight;\n let control: SpotlightControl = this.getSpotlightControlFromList(spotlight.id);\n\n if (!control) {\n control = {\n spotlightId: spotlight.id,\n status: status,\n firstUser: this.currentUser\n };\n }\n\n if (this.isNewControl(control) || control.status !== EnumSpotlightStatus.IN_PROGRESS) {\n control.status = status;\n control.firstUser = status === EnumSpotlightStatus.IN_PROGRESS ? this.currentUser : '';\n this.spotlightService.saveSpotlightControl(control).subscribe();\n }\n\n return control;\n }\n\n /**\n * Retorna o controle de spotlight correspondente ao identificador\n * informado na lista de controles carregada na inicialização do componente\n * @param id string Identificador do controle de spotlight\n */\n private getSpotlightControlFromList(id: string): SpotlightControl {\n return this.spotlightControlsList.contents.filter(val => val.spotlightId === id)[0];\n }\n\n /**\n * Verifica se o controle de spotlight informado não foi registrado ainda\n * @param spotlightControl SpotlightControl Controle do spotlight\n * @returns boolean true se ainda não foi registrado na base, false caso contrário\n */\n private isNewControl(spotlightControl: SpotlightControl): boolean {\n return !this.spotlightControlsList.contents.includes(spotlightControl);\n }\n\n /**\n * Retorna um objeto de notificação referente ao botão clicado pelo usuário.\n * @param userAction UserAction Ação realizada pelo usuário ao clicar nos botões da modal\n * @returns SpotlightNotification Objeto de notificação\n */\n private buildNotification(userAction: UserAction): SpotlightNotification {\n const spotlight = this.spotlightScreen.spotlight;\n\n return {\n clickedButton: userAction,\n spotlightControlId: spotlight.id,\n primaryButtonUrl: spotlight.primaryButtonUrl\n };\n }\n\n public close(): void {\n this.visibleChange.emit(false);\n }\n}\n","export const fallback: any = {\n\n 'platform.spotlight.no_interest' : 'Não tenho interesse',\n 'platform.spotlight.remember_late' : 'Lembrar mais tarde'\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'translate',\n pure: false,\n })\n export class TranslatePipe implements PipeTransform {\n constructor(private translationService: TranslateService) {}\n transform(value: any): any {\n return this.translationService.instant(value);\n }\n }\n","import { NgModule } from '@angular/core';\nimport { CommonModule, DatePipe } from '@angular/common';\n\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { HttpInterceptorModule } from '../http-interceptor/http-interceptor.module';\nimport { TranslationsModule } from '../translations/translations.module';\nimport { SpotlightComponent } from './component/spotlight.component';\nimport { SpotlightService } from './service/spotlight.service';\nimport { fallback } from './locale/fallback';\nimport { TranslatePipe } from './pipes/translate.pipe';\nimport { CookieService } from 'ngx-cookie-service';\n\n@NgModule({\n imports: [\n ButtonModule,\n TooltipModule,\n CommonModule,\n HttpInterceptorModule,\n TranslationsModule.forChild([{domain: 'platform', service: 'spotlight', fallback}]),\n ],\n providers: [\n SpotlightService,\n DatePipe,\n CookieService\n ],\n declarations: [\n SpotlightComponent,\n TranslatePipe],\n exports: [SpotlightComponent]\n})\nexport class SpotlightModule {}\n"]}
|