asap-feed-beta 12.7.8 → 12.8.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://asap-feed-beta/lib/asap-feed-beta.service.ts","ng://asap-feed-beta/lib/constants/constants.ts","ng://asap-feed-beta/lib/services/asap-feed.service.ts","ng://asap-feed-beta/lib/asap-feed-beta.component.ts","ng://asap-feed-beta/lib/tab-feed/asap-tab-feed.component.ts","ng://asap-feed-beta/lib/services/stream.service.ts","ng://asap-feed-beta/lib/models/feed.model.ts","ng://asap-feed-beta/lib/services/utils.service.ts","ng://asap-feed-beta/lib/feed-publication/feed-modal-item-edit/feed-modal-item-edit.component.ts","ng://asap-feed-beta/lib/feed-item/feed-item.component.ts","ng://asap-feed-beta/lib/pipes/stream.pipe.ts","ng://asap-feed-beta/lib/pipes/safe.pipe.ts","ng://asap-feed-beta/lib/pipes/currency.pipe.ts","ng://asap-feed-beta/lib/pipes/pipes.module.ts","ng://asap-feed-beta/lib/services/user.service.ts","ng://asap-feed-beta/lib/feed-comments/feed-comments.component.ts","ng://asap-feed-beta/lib/feed-actions/feed-actions.component.ts","ng://asap-feed-beta/lib/services/product.service.ts","ng://asap-feed-beta/lib/feed-publication/modal-announce/modal-announce.component.ts","ng://asap-feed-beta/lib/feed-publication/feed-publication.component.ts","ng://asap-feed-beta/lib/services/channel.service.ts","ng://asap-feed-beta/lib/stories/stories.component.ts","ng://asap-feed-beta/lib/feed-posts/feed-posts.component.ts","ng://asap-feed-beta/lib/components/auto-complete/auto-complete.component.ts","ng://asap-feed-beta/lib/asap-feed-beta.module.ts","ng://asap-feed-beta/lib/asap-feed-beta.routing.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__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","pop","push","__values","o","m","__read","r","ar","error","__spread","concat","AsapFeedBetaService","announce","publication","stories","query","options","console","log","Injectable","args","providedIn","prefix","localStorage","getItem","path","images","feed","likes","shareds","AsapFeedService","http","clientFirebaseServer","baseUrlAPI","client_id","getFeed","feed_id","user","filterByMe","url","me","key","post","createFeed","data","getMoreFeed","limit","last_documment","payload","searchBy","searchValue","sendComment","deleteComment","comment_id","delete","sendReplyComment","deleteReplyComment","reply_id","likeComment","likePost","deleteLikeComment","like_id","sendNotification","user_id","type","HttpClient","AsapFeedBetaComponent","feedService","db","route","controlService","global","hasFeed","loading","ignoreControl","hasID","topPosToStartShowing","showToTopButton","isSinglePost","ngOnInit","_this","params","subscribe","param","feedID","setTimeout","checkFeedChange","ngOnChanges","changes","id","feeds","loggedUser","response","paginate","pagination","getMore","next_document","map","item","permitted","checkScroll","window","pageYOffset","document","documentElement","scrollTop","gotoTop","scroll","top","left","behavior","permission","user_info","extras","_b","tslib_1.__values","_c","perm","field","onNewFeed","index","_d","focus","_e","_f","isHighlighted","slice","getElementsByClassName","scrollIntoView","sendVisible","postData","post_id","title","created_at","updated_at","Date","now","name","picture","documentID","doc","set","get","exists","ref","collection","add","reload","Component","selector","template","AngularFirestore","ActivatedRoute","Global","Input","HostListener","AsapTabFeedComponent","service","canShow","settings","tabs","channel_list","feedLoad","channel","allFeed","feed_users","onChangeTab","event","tab","textLabel","tabName","c","channel_id","join","typeValue","ViewChild","static","StreamService","session","JSON","parse","streamVideoPath","link_company","link","getHeaders","headers","Accept","status","uploadFile","formData","FormData","append","req","HttpRequest","reportProgress","responseType","HttpHeaders","HttpParams","request","uid","s4","Math","floor","random","toString","substring","UserInfo","ProductModel","cod","descr","hashtag","produto","parcela","qtdMinimo","valorAte","valorDe","adaptation","desconto","fotos","FilesModel","thumb_rendering","video_rendering","video_low_rendering","isCloudinary","FilesModelEdit","new","FeedModel","product","source","files","UtilsService","firebaseStorage","firebase","fileName","base64","correctBase64","task","putString","percentage","percentageChanges","snapshot","snapshotChanges","getFireStorageURL","getDownloadURL","deleteFireStorage","toPromise","_a","isUrl","test","user_destination","AngularFireStorage","FirebaseApp","FeedModalItemEditComponent","dialogRef","streamService","sanitizer","utilsService","showAnnouncePublication","tmpFileArray","close","file","tmpFile","this_1","getTypeByMimeType","filter","tmp","toastService","message","readGIF","getExtname","split","extname","resizeImages","uploading","reader","blobURL","URL","createObjectURL","toFixed","progress","videoSendedID","target","share","comments","res","p480","p480_low","thumb","publish","count","fileEmbed","embedFile","images_2","image","step_1","percent","snap","bytesTransferred","totalBytes","index_1","findIndex","imageURL","update","classToPlain","images_1","images_1_1","mime","width","img","Image","MAX_WIDTH","FileReader","readAsDataURL","onload","src","scale","canvas","createElement","height","ctx","getContext","drawImage","dataurl","toDataURL","onerror","removeTmpFile","indexOf","splice","checkPublicationType","Event","isValidUrl","includes","replace","tmpEmbedFile","bypassSecurityTrustResourceUrl","removeEmbedFiles","str","RegExp","providers","MatDialogRef","Inject","MAT_DIALOG_DATA","DomSanitizer","SwiperCore","use","Navigation","Pagination","FeedItemComponent","dialog","translate","isVisible","EventEmitter","imageLoaded","imageDataLoaded","blurBackgroundIndex","loadVisibilityControls","linkifiedTitle","sanitizedLinkify","isYoutube","youtubeID","getYoutubeID","ngAfterViewInit","observer","observe","visibleControl","nativeElement","ngOnDestroy","disconnect","clearInterval","visibleTimer","setInterval","shotTimer","emit","IntersectionObserver","entries","forEach","entry","active","intersectionRatio","rootMargin","threshold","onloadImage","onErrorImage","playVideo","videoplayer","play","bypassSecurityTrustHtml","linkify","re","match","www","mail","twitler","encodeURIComponent","checkVideoRender","onEditItem","swal","text","instant","open","panelClass","preConvertNumber","parseFloat","onRemoveItem","showCancelButton","confirmButtonText","cancelButtonText","confirm","error_1","deleted","toast","checkFileOrigin","MatDialog","TranslateService","Output","read","ElementRef","StreamPipe","domSanitizer","transform","arg","getVideoUri","getVideoThumb","getVideoId","bypassSecurityTrustStyle","bypassSecurityTrustUrl","Pipe","SafePipe","bypassSecurityTrustScript","Error","_NUMBER_FORMAT_REGEXP","LooseCurrencyPipe","_currencyPipe","currencyCode","symbolDisplay","digits","CurrencyPipe","PipesModule","NgModule","declarations","imports","exports","UserService","_super","tslib_1.__extends","usersChecked","baseUrl","getForms","getAllUsers","search","getUserData","idUser","getUserForm","getAdressByCep","cep","Content-Type","remove","saveData","idCliente","headerOptions","Authorization","put","BaseService","FeedCommentsComponent","asapService","userService","replyingComment","replyingResponse","limitCommentsTo","limitReplysTo","onLoadingLike","onLoadingReply","onLoadingComment","isMarking","getComments","orderBy","comment","likeForMe","like","subItemLike","likeData","likeForMeID","reply","replys","subItem","replyData","onReplyComment","onReplyResponse","handleShowAllReplyResponse","commentIdx","unmentionRemovedUsers","mentions","mentionsList","selected_users","notification","description","redirect","replyComment","deleteReply","sendLikeComment","loadMoreComments","loadMoreReplys","onEditReply","editedReply","onEdit","onEditComment","editedComment","updateComment","edited","updateReply","old_reply","mentionUser","AsapService","FeedActionsComponent","sharedForMe","onSendLike","onSendShared","deviceInfo","getLikes","getShareds","where","valueChanges","sharedForMeID","sendLike","create_at","commentData","copyToClipBoard","val","selBox","style","position","opacity","appendChild","select","execCommand","removeChild","success","sharePost","meta_data","urlShare","location","origin","ProductService","router","entityName","basePath","getResources","createProduct","createResource","categories","clientID","subCategories","category","subCategoryProducts","page","qryPage","mainProducts","getMyProducts","spotlightProducts","order","orderData","searchCep","checkUserExists","email","Router","AsapBaseService","ModalAnnounceComponent","productService","published","entity","newProduct","selectedProduct","loadCategory","loadMyProducts","alert","defaults","loadSubCategory","categoria_id","subCategory","addPicture","delPicture","categoryName","cat","find","subCategoryName","onSave","tempProductData","addPostOnFeed","loadSubCategories","id_categorie","myProducts","produtos","videoFilter","owner","fileGenerated","fire","uploadingVideo","checkUploading","checkIfHasEmbededVideo","imagesFiles_2","imagesFiles_1","imagesFiles_1_1","show","layout","FeedPublicationComponent","hideFilterByMe","feedCreated","users","disabled","selectedUsers","listType","getNewFeed","loadUsers","user_name","secure_url","selected_users_data","confirmShare","Swal","confirmed","openAnnounceModal","minHeight","maxHeight","closeOnNavigation","disableClose","selectUser","evt","checked","showSelected","openModal","newfeed","$","modal","getResource","ChannelService","isSubscriber","channelLibrary","channeGrouplLibrary","fileLibrary","fileGroupLibrary","callback","video_id","unlike","likev2","dados","unsubscribe","info","cancel","getPlaylists","getPlaylist","playlist_id","createPlaylist","playlist_name","deletePlaylist","deleteResource","addVideoPlaylist","updateChannel","updateResource","StoriesComponent","_channelService","storiesOptions","loop","mouseDrag","touchDrag","pullDrag","dots","navSpeed","navText","nav","responsive","0","items","500","config","navigation","clickable","autoHeight","breakpoints","slidesPerView","slidesPerGroup","spaceBetween","480","getChannels","channelArray","getNotificationForChannels","notificationDoc","notifications","notificationData","FeedPostsComponent","asapFeedBetaService","defineProperty","main","AutoCompleteComponent","userSelected","input","panelTop","offsetTop","offsetHeight","panelStart","offsetLeft","panelWidth","offsetWidth","selectionStart","mark","getMarkAtPosition","lastSearch","searching","onSelect","selected","shift","startPosition","endPosition","evento","dispatchEvent","selectionEnd","cursorPosition","words","startsWith","AsapFeedBetaModule","getOrCreateSessionData","component","condition","hasPermission","CommonModule","FormsModule","RouterModule","MatButtonModule","MatIconModule","MatMenuModule","MatListModule","MatCardModule","MatDialogModule","MatSelectModule","MatRadioModule","MatInputModule","MatTooltipModule","MatProgressBarModule","MatStepperModule","MatTabsModule","MomentModule","TranslateModule","InfiniteScrollModule","AsapSkeletonModule","NgxHmCarouselModule","OwlModule","CarouselModule","NgxSkeletonLoaderModule","PopoverModule","SwiperModule","MatAutocompleteModule","entryComponents","AsapFeedBetaRoting"],"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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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 (g && (g = 0, op[0] && (_ = 0)), _) 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 var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(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, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, 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\n/** @deprecated */\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\n/** @deprecated */\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 __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\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\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\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 (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, 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, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AsapFeedBetaService {\n public announce = false;\n public publication = true;\n public stories = true;\n public query = null;\n public options = {};\n constructor() {\n console.log('[AsapFeedBetaService] ->', this);\n }\n}\n","const prefix = (localStorage.getItem('feed_prefix')) ? localStorage.getItem('feed_prefix') : '';\n\nexport function path() {\n return {\n images: `${prefix}images`,\n feed: `${prefix}feed`,\n likes: `${prefix}likes`,\n shareds: `${prefix}shareds`\n }\n}","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { path } from '../constants/constants';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AsapFeedService {\n public clientFirebaseServer = localStorage.getItem('firebase_server_id');\n private baseUrlAPI;\n private client_id;\n\n constructor(\n private http: HttpClient\n ) {\n this.baseUrlAPI = `https://us-central1-${this.clientFirebaseServer}.cloudfunctions.net/api`;\n this.client_id = localStorage.getItem('client');\n }\n\n public getFeed(feed_id, user=null, query = null, filterByMe: boolean = false) {\n let limit = 6;\n let url;\n let me = '';\n\n if (filterByMe) {\n me = 'filterByMe&'\n }\n\n if (!query) {\n url = `${this.baseUrlAPI}/mobile/feed/${feed_id}?${me}limit=${limit}&feed_path=${path().feed}&client_id=${this.client_id}`\n }\n else {\n url = `${this.baseUrlAPI}/mobile/feed/${feed_id}?${me}limit=${limit}&feed_path=${path().feed}&client_id=${this.client_id}`;\n for (const key in query) {\n url = `${url}&${key}=${query[key]}`;\n }\n }\n\n return this.http.post(url,{user: user});\n }\n\n public createFeed(data) {\n return this.http.post(`${this.baseUrlAPI}/feed?feed_path=${path().feed}&client_id=${this.client_id}`, data);\n }\n\n public getMoreFeed(limit, last_documment, user=null, query = null, filterByMe = false) {\n let url\n let me = '';\n let payload = null;\n\n console.log(\"[getMoreFeed] Starting...\", limit, last_documment, user, query, filterByMe);\n\n if (filterByMe) {\n me = '&filterByMe'\n }\n\n if (query && query.searchBy && query.searchValue) {\n url = `${this.baseUrlAPI}/mobile/feed?${me}limit=${limit}&last_doc=${last_documment}&searchBy=${query.searchBy}&searchValue=${query.searchValue}&feed_path=${path().feed}&client_id=${this.client_id}`\n }\n else {\n url = `${this.baseUrlAPI}/mobile/feed?${me}limit=${limit}&last_doc=${last_documment}&feed_path=${path().feed}&client_id=${this.client_id}`\n }\n\n if (user) {\n payload = {\n user\n }\n }\n\n console.log(\"[getMoreFeed] HTTP...\", url, payload);\n return this.http.post(url, payload);\n }\n\n public sendComment(feed_id, data) {\n return this.http.post(`${this.baseUrlAPI}/comment/${feed_id}`, data);\n }\n\n public deleteComment(feed_id, comment_id) {\n return this.http.delete(`${this.baseUrlAPI}/comment/${feed_id}/${comment_id}`);\n }\n\n public sendReplyComment(feed_id, comment_id, data) {\n return this.http.post(`${this.baseUrlAPI}/comment/reply/${feed_id}/${comment_id}`, data);\n }\n\n public deleteReplyComment(feed_id, comment_id, reply_id) {\n return this.http.delete(`${this.baseUrlAPI}/comment/reply/${feed_id}/${comment_id}/${reply_id}`);\n }\n\n public likeComment(feed_id, comment_id, data) {\n return this.http.post(`${this.baseUrlAPI}/comment/like/${feed_id}/${comment_id}`, data);\n }\n\n public likePost(feed_id, data) {\n return this.http.post(`${this.baseUrlAPI}/like/${feed_id}`, data);\n }\n\n public deleteLikeComment(feed_id, comment_id, like_id) {\n return this.http.delete(`${this.baseUrlAPI}/comment/like/${feed_id}/${comment_id}/${like_id}`);\n }\n\n public sendNotification(user_id, type, data) {\n console.log('[SendNotification] ->', user_id, type, data);\n return this.http.post(`${this.baseUrlAPI}/notification/${user_id}/${type}`, data);\n }\n\n\n\n}\n","import { Component, OnInit, Input, HostListener, OnChanges, SimpleChanges } from '@angular/core';\nimport { AsapFeedService } from './services/asap-feed.service';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { ActivatedRoute } from '@angular/router';\nimport { AsapFeedBetaService } from './asap-feed-beta.service';\nimport { Global } from 'asap-crud';\nimport { filter } from 'rxjs/operators';\n\n@Component({\n selector: 'asap-feed-beta',\n templateUrl: './asap-feed-beta.component.html',\n styles: ['./asap-feed.beta.componente.scss']\n})\nexport class AsapFeedBetaComponent implements OnInit, OnChanges {\n\n public hasFeed = true;\n public loading = true;\n\n @Input() id;\n @Input() ignoreControl = false;\n @Input() settings;\n\n public hasID = false;\n\n public stories = true;\n public announce = false;\n public publication = true;\n public query = null;\n public feedID;\n public feeds;\n public paginate;\n public topPosToStartShowing = 400;\n public showToTopButton = false;\n public isSinglePost = false;\n\n public filterByMe = false;\n\n constructor(\n private feedService: AsapFeedService,\n public db: AngularFirestore,\n public route: ActivatedRoute,\n public controlService: AsapFeedBetaService,\n public global: Global,\n ) {\n this.loading = true;\n this.query = null;\n }\n\n ngOnInit() {\n\n \n if (!this.ignoreControl) {\n this.announce = this.controlService.announce;\n this.stories = this.controlService.stories;\n this.publication = this.controlService.publication;\n this.query = this.controlService.query;\n }\n\n console.log('Query ->', this.query);\n\n this.route.params.subscribe(param => {\n console.log('Params ->', param);\n if (param) {\n if (param.feed_id) {\n this.feedID = param.feed_id;\n this.isSinglePost = true;\n\n setTimeout(() => {\n this.getFeed(this.feedID);\n }, 600);\n }\n else {\n this.getFeed();\n }\n }\n });\n this.checkFeedChange();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n\n if (changes.feedID) {\n setTimeout(() => {\n this.getFeed(this.feedID);\n }, 600);\n }\n\n if (changes.id) {\n if (this.id) {\n this.hasID = true;\n if (!this.controlService.query) this.controlService.query = {};\n this.controlService.query.searchBy = 'user_info.id';\n this.controlService.query.searchValue = this.id + '&typeValue=number';\n }\n }\n }\n\n public getFeed(feed_id = '') {\n console.log('[getFeed] Query', this.query, this.filterByMe);\n this.feeds = null;\n this.loading = true;\n this.feedService.getFeed(feed_id, this.global.loggedUser(), this.query, this.filterByMe).subscribe((response: any) => {\n this.feeds = response.data;\n console.log('Feeds', this.feeds);\n this.paginate = response.pagination;\n this.loading = false;\n this.hasFeed = (this.feeds.length > 0);\n });\n }\n\n public getMore() {\n console.log('[getMore]', this.paginate.next_document);\n if (this.paginate.next_document) {\n this.loading = true;\n this.feedService.getMoreFeed(5, this.paginate.next_document, this.global.loggedUser(), this.query, this.filterByMe).subscribe((response: any) => {\n console.log('[getMore] Got: ', response);\n response.data.map(item => {\n if (this.permitted(item)) {\n this.feeds.push(item);\n }\n });\n\n this.paginate = response.pagination;\n this.loading = false;\n });\n }\n }\n\n public checkFeedChange() {\n // const collection = this.db.collection(path().feed, ref => {\n // return ref.orderBy('updated_at', 'desc');\n // });\n\n // collection.snapshotChanges().subscribe(response => {\n // console.log(\"[checkFeedChange]\",response);\n // if (response) {\n // setTimeout(() => {\n // console.log(\"[checkFeedChange]\")\n // this.getFeed(this.feedID);\n // }, 600);\n // }\n // })\n }\n\n @HostListener('window:scroll')\n checkScroll() {\n const scrollPosition = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n if (scrollPosition >= this.topPosToStartShowing) {\n this.showToTopButton = true;\n } else {\n this.showToTopButton = false;\n }\n }\n\n gotoTop() {\n window.scroll({\n top: 0,\n left: 0,\n behavior: 'smooth'\n });\n }\n\n permitted(post) {\n if (post.permission) {\n if (post.permission.length > 0) {\n let result = false;\n const user = this.global.loggedUser();\n if (user) {\n if (post.user_info && post.user_info.id == user.id) {\n result = true;\n }\n else if (user.extras) {\n const extras = user.extras[0];\n for (const perm of post.permission) {\n if ((perm.field == 'multi-conta') && (perm.value == user.client_id)) {\n result = true;\n break;\n }\n else if (extras[perm.field] == perm.value) {\n result = true;\n break;\n }\n }\n }\n }\n return result;\n }\n }\n return true;\n }\n\n public onNewFeed(id) {\n console.log('[onNewFeed]', id);\n this.feedService.getFeed(id).subscribe((response: any) => {\n let index = this.feeds.length;\n\n for (const feed of response.data) {\n feed.focus = true;\n }\n\n for (const feed of this.feeds) {\n feed.focus = false;\n }\n\n for (let i = 0; i < this.feeds.length; i++) {\n console.log('[onNewFeed] Feed', this.feeds[i]);\n if (!this.feeds[i].isHighlighted) {\n index = i;\n break;\n }\n }\n\n this.feeds = [\n ... this.feeds.slice(0, index),\n ... response.data,\n ... this.feeds.slice(index)\n ];\n\n setTimeout(() => {\n const el = document.getElementsByClassName('focus-on-me')[0];\n el.scrollIntoView({ behavior: 'smooth' });\n }, 500);\n\n });\n }\n\n public sendVisible(item) {\n console.log(\"[sendVisible] marcando como visualizado\", item);\n const user = this.global.loggedUser();\n\n let postData = {\n post_id: item.id,\n title: item.title,\n created_at: item.updated_at\n };\n\n let data = {\n post_id: item.id,\n created_at: Date.now(),\n updated_at: Date.now(),\n user_info: {\n id: user.id,\n updated_at: Date.now(),\n name: user.name,\n picture: user.picture\n }\n };\n\n const documentID = `feed-view/${item.id}`;\n const document = this.db.doc(documentID);\n document.set(postData).then((response) => {\n const documentID = `feed-view/${item.id}/views/${user.id}`;\n const document = this.db.doc(documentID);\n document.get().subscribe((doc) => {\n if (!doc.exists) {\n doc.ref.set(data).then((response) => {\n console.log(\"[sendVisible] marcado como visualizado\", response);\n });\n }\n else {\n console.log(\"[sendVisible] já foi marcado como visualizado\", doc);\n }\n });\n this.db.collection(`${documentID}/history`).add(data);\n });\n }\n\n reload(filterByMe: any) {\n this.filterByMe = filterByMe;\n this.getFeed();\n }\n\n}\n","import { Component, Input, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';\nimport { AsapFeedBetaService } from '../asap-feed-beta.service';\nimport { Global } from 'asap-crud';\nimport { AsapFeedBetaComponent } from '../asap-feed-beta.component';\n\n@Component({\n selector: 'asap-tab-feed',\n templateUrl: './asap-tab-feed.component.html',\n styleUrls: ['./asap-tab-feed.component.scss']\n})\nexport class AsapTabFeedComponent implements OnInit, OnChanges {\n\n @ViewChild('feed', { static: false }) feed!: AsapFeedBetaComponent;\n\n @Input() settings: any;\n\n public canShow = -1;\n\n constructor(\n public global: Global,\n public service: AsapFeedBetaService\n ) {\n console.log(\"[AsapTabFeedComponent]\", this.settings);\n }\n\n ngOnInit() {\n this.service.publication = false;\n this.service.stories = false;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.settings && this.settings) {\n const tabs = this.settings.tabs;\n \n // ✅ Se o cliente tem canal, prioriza o channel\n if (tabs.channel_list && tabs.channel_list.length) {\n this.feedLoad(tabs.channel);\n }\n // ✅ Caso não tenha canal, mantém a ordem original\n else if (tabs.allFeed) {\n this.feedLoad(tabs.allFeed);\n } else if (tabs.feed) {\n this.feedLoad(tabs.feed);\n } else if (tabs.feed_users) {\n this.feedLoad(tabs.feed_users);\n }\n }\n }\n \n\n public onChangeTab(event: any) {\n this.feedLoad(event.tab.textLabel);\n }\n\n public feedLoad(tabName: string) {\n this.canShow = -1;\n if (tabName == this.settings.tabs.channel) {\n setTimeout(() => {\n this.service.query = {\n searchBy: 'channel_id',\n searchValue: this.settings.tabs.channel_list.map(c => c.channel_id).join(',')\n }\n this.canShow = 0;\n }, 100);\n }\n if (tabName == this.settings.tabs.feed) {\n setTimeout(() => {\n this.service.query = {\n searchBy: 'user_info.id',\n searchValue: this.global.loggedUser().id,\n typeValue: 'number'\n }\n this.canShow = 1;\n }, 100);\n }\n if (tabName == this.settings.tabs.feed_users) {\n setTimeout(() => {\n this.service.query = {\n searchBy: 'user_info.id',\n searchValue: 'all'\n }\n this.canShow = 2;\n }, 100);\n }\n if (tabName == this.settings.tabs.allFeed) {\n setTimeout(() => {\n this.service.query = {}\n this.canShow = 3;\n }, 100);\n }\n }\n\n public onNewFeed(id: any) {\n\n }\n\n}\n","import { HttpClient, HttpHeaders, HttpParams, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class StreamService {\n\n public streamVideoPath: string;\n\n constructor(public http: HttpClient) {\n if (localStorage.getItem('loggedUser')) {\n const session = JSON.parse(localStorage.getItem('loggedUser'));\n this.streamVideoPath = (session.data.link_company) ? session.data.link_company : session.data.link;\n console.log('streamVideoPath', this.streamVideoPath);\n }\n }\n\n private getHeaders() {\n let headers = {\n 'Accept': 'application/json'\n };\n if (localStorage.getItem('token')) {\n headers['Authorization'] = localStorage.getItem('token');\n }\n return headers;\n }\n\n public status(id: string): any {\n return this.http.get(this.streamVideoPath + 'videos/' + id, { headers: this.getHeaders() });\n }\n\n public uploadFile(data: any): any {\n const formData = new FormData();\n formData.append('file', data);\n\n let client_id = localStorage.getItem('client');\n\n const req = new HttpRequest('POST', 'http://api.tecnologiaasap.com.br/api/cloudinary/upload', formData, {\n reportProgress: true,\n responseType: 'json',\n headers: new HttpHeaders(this.getHeaders()),\n params: new HttpParams().set('client_id', client_id)\n });\n\n console.log('RESPONSE UPLOAD', req);\n return this.http.request(req);\n }\n\n uid() {\n return this.s4() + this.s4() + '-' + this.s4() + '-' + this.s4() + '-' +\n this.s4() + '-' + this.s4() + this.s4() + this.s4();\n }\n\n s4() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n\n}\n","export class UserInfo {\n id: number = null;\n name: string = null;\n updated_at: any = null;\n picture: string = null;\n}\n\nexport class ProductModel {\n cod: number = null;\n descr: string = null;\n hashtag: string = null;\n id: number = null;\n produto: string = null;\n parcela: string = null;\n qtdMinimo: number = null;\n valorAte: number = null;\n valorDe: number = null;\n adaptation: string = null;\n desconto: number = null;\n fotos = [];\n}\n\nexport class FilesModel {\n url: string = null;\n type: string = null;\n status: number = 1;\n thumb_rendering = false;\n video_rendering = false;\n video_low_rendering = false;\n name: string = null;\n isCloudinary:boolean = false;\n}\n\nexport class FilesModelEdit {\n url: string = null;\n type: string = null;\n status: number = null;\n thumb_rendering = false;\n video_rendering = false;\n video_low_rendering = false;\n name: string = null;\n new:boolean = true\n}\n\nexport class FeedModel {\n id: string = null;\n ref: string = null;\n status: boolean = true;\n product: ProductModel = new ProductModel();\n type: string = 'post';\n source: string = 'web';\n likes = 0;\n shareds = 0;\n user_info: UserInfo = new UserInfo();\n updated_at: any = null;\n title: string = null;\n files: Array<FilesModel> = [];\n selected_users: any;\n selected_users_data: any;\n newfeed: boolean;\n}","import { Injectable } from '@angular/core';\nimport { AngularFireStorage, AngularFireUploadTask } from '@angular/fire/storage';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { FirebaseApp } from '@angular/fire';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { AsapFeedService } from './asap-feed.service';\nimport { Global } from 'asap-crud';\n\n@Injectable()\n\nexport class UtilsService {\n\n public percentage: Observable<number>;\n public task: AngularFireUploadTask;\n public snapshot: Observable<any>;\n public lastDoc;\n\n constructor(\n public firebaseStorage: AngularFireStorage,\n public db: AngularFirestore,\n public firebase: FirebaseApp,\n public feedService:AsapFeedService,\n public global: Global\n ) { }\n\n public uploadFile(fileName: string, base64: string) {\n console.log('TO SUBINDO', fileName);\n try {\n let correctBase64 = base64;\n const ref = this.firebaseStorage.ref(fileName);\n this.task = ref.putString(correctBase64, 'data_url');\n this.percentage = this.task.percentageChanges();\n this.snapshot = this.task.snapshotChanges();\n } catch (error) {\n console.log(`ERRO DO SUBINDO`, error);\n }\n }\n\n getFireStorageURL(id: string) {\n return this.firebaseStorage.ref(id).getDownloadURL();\n }\n\n async deleteFireStorage(id: string) {\n return await this.firebaseStorage.ref(id).delete().toPromise();\n }\n\n uid() {\n return this.s4() + this.s4() + '-' + this.s4() + '-' + this.s4() + '-' +\n this.s4() + '-' + this.s4() + this.s4() + this.s4();\n }\n\n s4() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n\n isUrl(s: string): boolean {\n const regexp = /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/;\n return regexp.test(s);\n }\n\n public sendNotification(data, user_destination, type) {\n\n console.log('Destinatario', user_destination);\n console.log('Remetente', this.global.loggedUser());\n\n if (user_destination.id != this.global.loggedUser().id) {\n this.feedService.sendNotification(user_destination.id,type, data).subscribe( response => {\n console.log('Retorno Notificacao', response);\n });\n }\n }\n\n}\n","import { Component, OnInit, Inject } from '@angular/core';\nimport { Global } from 'asap-crud';\nimport { FilesModel, FeedModel, FilesModelEdit } from '../../models/feed.model';\nimport { StreamService } from '../../services/stream.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { classToPlain } from 'class-transformer';\nimport { path } from '../../constants/constants';\nimport { UtilsService } from '../../services/utils.service';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'lib-feed-modal-item-edit',\n templateUrl: './feed-modal-item-edit.component.html',\n styleUrls: ['../../asap-feed.beta.componente.scss','./feed-modal-item-edit.component.scss',],\n providers: [StreamService]\n})\nexport class FeedModalItemEditComponent implements OnInit {\n\n public showAnnouncePublication = false;\n public notAnnounce;\n public openAnnounceModal;\n public newProduct;\n public ExpandImg;\n // \n public title;\n public tmpFileArray: Array<FilesModelEdit>;\n public progress;\n public uploading;\n public type;\n public videoSendedID;\n public embedFile;\n public tmpEmbedFile;\n\n constructor(\n public dialogRef: MatDialogRef<FeedModalItemEditComponent>,\n @Inject(MAT_DIALOG_DATA) public item,\n public global: Global,\n public streamService: StreamService,\n public sanitizer: DomSanitizer,\n public utilsService: UtilsService,\n public db: AngularFirestore\n ) { }\n\n ngOnInit() {\n if (this.item) {\n this.title = this.item.title;\n this.type = this.item.type;\n this.tmpFileArray = this.item.files;\n console.log('Feed Modal ->', this.item);\n }\n }\n\n close() {\n this.dialogRef.close();\n }\n\n async uploadFile(event: any) {\n for (const file of event.target.files) {\n\n const tmpFile: FilesModelEdit = new FilesModelEdit();\n tmpFile.type = this.getTypeByMimeType(file.type);\n tmpFile.status = 0;\n tmpFile.thumb_rendering = false;\n tmpFile.video_rendering = false;\n tmpFile.video_low_rendering = false;\n\n let error = false;\n if (this.getTypeByMimeType(file.type) === 'video' && this.tmpFileArray.filter((tmp: any) => this.getTypeByMimeType(tmp.type) === 'video').length > 0) {\n this.global.toastService.error({\n title: 'Ops',\n message: 'Você só pode enviar um vídeo por Post'\n });\n error = true;\n }\n\n if (this.getTypeByMimeType(file.type) === 'image' && this.tmpFileArray.filter((tmp: any) => this.getTypeByMimeType(tmp.type) === 'image').length > 4) {\n this.global.toastService.error({\n title: 'Ops',\n message: 'Você pode utilizar até no máximo 5 imagens no seu Post'\n });\n error = true;\n }\n\n if (!error) {\n console.log('File Sended',file);\n // **********************************************\n // !file.name.includes('firebasestorage')\n // Este trecho de código, verifica se o arquivo que está no tmpFileArray já foi enviado para evitar\n // o reenvio\n // ***********************************************\n if (this.getTypeByMimeType(file.type) === 'image' && !file.new) {\n console.log('File do Upload ->', file);\n if (file.type == 'image/gif') {\n tmpFile.url = `${this.streamService.uid()}.gif`;\n tmpFile.name = await this.readGIF(file);\n this.tmpFileArray.push(tmpFile);\n }\n\n else {\n const getExtname = file.name.split('.');\n const extname = getExtname[getExtname.length - 1];\n\n tmpFile.url = `${this.streamService.uid()}.${extname}`;\n tmpFile.name = await this.resizeImages(file, 800);\n this.tmpFileArray.push(tmpFile);\n }\n }\n\n else if (this.getTypeByMimeType(file.type) === 'video' && !file.new) {\n this.uploading = true;\n console.log('Realizar Upload de Video', tmpFile);\n let reader = file\n if (reader) {\n let blobURL = URL.createObjectURL(reader);\n tmpFile.name = blobURL as any;\n this.tmpFileArray.push(tmpFile);\n }\n\n this.uploading = true;\n await this.streamService.uploadFile(file).subscribe(\n response => {\n if (response['loaded']) {\n tmpFile.status = ((response['loaded'] * 100) / response['total']).toFixed(0) as any;\n this.progress = tmpFile.status;\n console.log('Response', tmpFile);\n }\n\n if (response['body']) {\n tmpFile.url = response['body']['uuidVideo'];\n this.videoSendedID = tmpFile.url;\n this.uploading = false;\n this.progress = null;\n\n }\n }\n )\n console.log('tmpFile', tmpFile);\n }\n }\n }\n }\n\n share(): any {\n let data = null;\n data = this.item;\n delete data.likes;\n delete data.comments;\n data.title = this.title;\n\n\n if (this.tmpFileArray || this.tmpFileArray.length > 0) {\n data.files = this.tmpFileArray;\n data.files.map(item => {\n if (item.type === 'video' && !item.video_rendering) {\n console.log('Existe um video no Feed', item);\n item.video_rendering = false;\n item.video_low_rendering = false;\n item.thumb_rendering = false;\n\n // Setando o ID do Feed igual ao ID do vídeo\n data.ref = item.url;\n data.status = false;\n this.streamService.status(item.url).subscribe((res: any) => {\n item.video_rendering = !res.p480;\n item.video_low_rendering = !res.p480_low;\n item.thumb_rendering = !res.thumb;\n });\n }\n })\n }\n\n this.publish(data);\n\n }\n\n public publish(data: FeedModel) {\n let count = 0;\n if (this.type == 'embed') {\n let fileEmbed: any = {\n name: this.embedFile,\n url: this.embedFile,\n type: 'embed'\n }\n\n this.tmpFileArray.push(fileEmbed);\n }\n if (this.tmpFileArray && this.tmpFileArray.length > 0) {\n const images = this.tmpFileArray.filter(\n (image: any) => this.getTypeByMimeType(image.type) === 'image' && image.new\n );\n\n const step = 98 / images.length;\n\n if (images && images.length > 0) {\n console.log('Imagens para Publicar ->', images);\n\n for (const image of images) {\n console.log('Imagem ->', image);\n\n setTimeout(() => {\n this.utilsService.uploadFile(`images/${image.url}`, image.name);\n\n this.utilsService.percentage.subscribe(percent => {\n image.status = percent;\n image.name = image.url;\n });\n\n this.utilsService.task.snapshotChanges().subscribe(\n async snap => {\n if (snap.bytesTransferred === snap.totalBytes) {\n count++;\n this.progress += step;\n const index = data.files.findIndex(item => item.name === image.name);\n\n this.utilsService.getFireStorageURL(`images/${data.files[index].name}`).subscribe((imageURL) => {\n console.log('Image File Url ->', imageURL);\n data.files[index].name = imageURL;\n });\n\n delete data.files[index].url;\n\n if (count == images.length) {\n console.log('Imagens Pos Processaento ->', data.files);\n const collection = this.db.collection(path().feed).doc(this.item.id)\n collection.update(classToPlain(data)).then( response => {\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n this.close();\n });\n }\n }\n });\n })\n }\n }\n else {\n const collection = this.db.collection(path().feed).doc(this.item.id);\n collection.update(classToPlain(data)).then( response => {\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n this.close();\n });\n }\n }\n else {\n const collection = this.db.collection(path().feed).doc(this.item.id);\n collection.update(classToPlain(data)).then( response => {\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n this.close();\n });\n }\n }\n\n // publish(data: FeedModel) {\n // let image;\n\n // console.log('Publish()', 1, data);\n // this.uploading = true;\n // this.progress = 0;\n\n\n // let count = 0;\n\n // if (this.type == 'embed') {\n // let fileEmbed: any = {\n // name: this.embedFile,\n // url: this.embedFile,\n // type: 'embed'\n // }\n\n // this.tmpFileArray.push(fileEmbed);\n // }\n\n // if (this.type != 'embed') {\n // if (this.tmpFileArray && this.tmpFileArray.length > 0) {\n\n // const imagesFiles = this.tmpFileArray.filter(\n // (tmp: any) => this.getTypeByMimeType(tmp.type) === 'image'\n // );\n\n\n // const step = 98 / imagesFiles.length;\n\n // if (imagesFiles.length > 0) {\n // console.log('Publish()', 3, imagesFiles)\n // for (const file of imagesFiles) {\n // if (file.new) {\n // setTimeout(() => {\n // this.utilsService.uploadFile(`images/${file.url}`, file.name);\n // this.utilsService.percentage.subscribe(percent => {\n // file.status = percent;\n // // file.name = file.url;\n // delete file.new;\n // console.log(\"File\", file);\n // });\n\n // this.utilsService.task.snapshotChanges().subscribe(\n // async snap => {\n // if (snap.bytesTransferred === snap.totalBytes) {\n // count++;\n // this.progress += step;\n // console.log('PROGRESS', this.progress);\n // const index = data.files.findIndex(item => item.url === file.url);\n\n // if ((!image) && (data.files[index])) {\n // this.utilsService.getFireStorageURL(`images/${data.files[index].url}`).subscribe((imageURL) => {\n // image = imageURL;\n // });\n\n // }\n\n // data.files[index].name = data.files[index].url;\n\n\n // console.log('Data Files ->',data.files);\n // if (count == imagesFiles.length) {\n\n // const collection = this.db.collection(path().feed).doc(this.item.id)\n // collection.update(classToPlain(data));\n\n // this.title = '';\n // this.progress = null;\n // this.uploading = null;\n // this.tmpFileArray = [];\n\n // console.log('Publish()', 4)\n // }\n // }\n // },\n // error => {\n // console.error('Error', error);\n // })\n // });\n // }\n // }\n // }\n // else {\n // console.log('Publish()', 5)\n // console.log(data)\n\n // const collection = this.db.collection(path().feed).doc(this.item.id);\n // collection.update(classToPlain(data));\n\n // this.title = '';\n // this.progress = null;\n // this.uploading = null;\n // this.tmpFileArray = [];\n\n\n\n // }\n // }\n // else {\n // console.log('Publish()', 5);\n // console.log(data);\n\n // const collection = this.db.collection(path().feed).doc(this.item.id);\n // collection.update(classToPlain(data));\n\n // this.title = '';\n // this.progress = null;\n // this.uploading = null;\n // this.tmpFileArray = [];\n // }\n // }\n\n // else {\n // data.files = this.tmpFileArray;\n\n // console.log('Publish(Embed)', 6);\n // console.log(data);\n\n // const collection = this.db.collection(path().feed).doc(this.item.id);\n // collection.update(classToPlain(data));\n\n // this.title = '';\n // this.progress = null;\n // this.uploading = null;\n // this.tmpFileArray = [];\n // }\n\n\n // console.log('Publish()', 0, path().feed);\n\n // const collection = this.db.collection(path().feed).doc(this.item.id); \n // collection.update(classToPlain(data));\n\n // this.title = '';\n // this.progress = null;\n // this.uploading = null;\n // this.tmpFileArray = [];\n // this.global.toast('Publicação criada com sucesso.')\n // this.close();\n // }\n\n getTypeByMimeType(mime: string): string {\n const split = mime.split('/');\n return split[0];\n }\n\n resizeImages(file: any, width: number): Promise<string> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const MAX_WIDTH = width;\n const MAX_HEIGHT: any = 1334;\n\n let reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = (e: any) => {\n img.src = e.target.result;\n img.onload = () => {\n const scale = MAX_WIDTH / img.width;\n const canvas = document.createElement(\"canvas\");\n canvas.height = scale * img.height;\n\n canvas.width = MAX_WIDTH;\n let ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n\n console.log('IMG', img.width, img.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n let dataurl = canvas.toDataURL(file.type, 0.65);\n console.log('CANVAS ->', canvas.width, canvas.height);\n return resolve(dataurl);\n }\n }\n\n reader.onerror = reject;\n });\n\n }\n\n readGIF(file: any): Promise<any> {\n return new Promise((resolve, reject) => {\n\n let reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = (e: any) => {\n return resolve(reader.result);\n }\n\n reader.onerror = reject;\n });\n\n }\n\n removeTmpFile(tmpFile: any): void {\n const index = this.tmpFileArray.indexOf(tmpFile);\n this.tmpFileArray.splice(index, 1);\n }\n\n checkPublicationType(title) {\n console.log('Event ->', Event);\n if (title.length && title.length > 35) {\n if (this.isValidUrl(title)) {\n console.log('checkPublicationType', title);\n if (title.includes('youtube')) {\n this.tmpFileArray = [];\n this.uploading = true;\n this.type = 'embed';\n this.uploading = false;\n this.embedFile = title.replace('watch?v=', 'embed/');\n this.tmpEmbedFile = this.sanitizer.bypassSecurityTrustResourceUrl(this.embedFile);\n }\n else if (title.includes('spotify')) {\n this.tmpFileArray = [];\n this.uploading = true;\n this.type = 'embed';\n this.embedFile = title.replace('/episode', '/embed-podcast/episode');\n this.tmpEmbedFile = this.sanitizer.bypassSecurityTrustResourceUrl(this.embedFile);\n this.uploading = false;\n }\n\n let fileEmbed: any = {\n name: this.embedFile,\n url: this.embedFile,\n type: 'embed'\n }\n\n this.tmpFileArray.push(fileEmbed);\n }\n }\n }\n\n removeEmbedFiles() {\n this.title = \"\";\n this.embedFile = \"\";\n this.type = \"post\";\n this.tmpFileArray = [] \n }\n\n isValidUrl(str) {\n var pattern = new RegExp('^(https?:\\\\/\\\\/)?' + // protocol\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|' + // domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*' + // port and path\n '(\\\\?[;&a-z\\\\d%_.~+=-]*)?' + // query string\n '(\\\\#[-a-z\\\\d_]*)?$', 'i'); // fragment locator\n return !!pattern.test(str);\n }\n\n}\n","import { Component, OnInit, Input, ViewChild, ElementRef, OnDestroy, AfterViewInit, Output, EventEmitter } from '@angular/core';\nimport { StreamService } from '../services/stream.service';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { Global } from 'asap-crud';\nimport { FeedModalItemEditComponent } from '../feed-publication/feed-modal-item-edit/feed-modal-item-edit.component';\nimport { path } from '../constants/constants';\nimport { UtilsService } from '../services/utils.service';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport SwiperCore, { Navigation, Pagination } from 'swiper';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nSwiperCore.use([Navigation, Pagination]);\n\n@Component({\n selector: 'app-feed-item',\n templateUrl: './feed-item.component.html',\n styleUrls: ['../asap-feed.beta.componente.scss', './feed-item.component.scss'],\n providers: [StreamService]\n})\nexport class FeedItemComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @Input() item;\n @Input() settings;\n @Input() owner;\n @Output() isVisible = new EventEmitter();\n @ViewChild('videoPlayer', { static: true }) videoplayer: ElementRef\n @ViewChild('visibleControl', { static: false, read: ElementRef }) visibleControl;\n\n public currentIndex;\n public imageLoaded = false;\n public imageDataLoaded = false;\n public currentCarrouselIndex;\n public blurBackgroundIndex = Math.floor((Math.random() * 5) + 1);\n public observer;\n public visibleTimer;\n public shotTimer;\n\n constructor(\n public streamService: StreamService,\n public db: AngularFirestore,\n public global: Global,\n public dialog: MatDialog,\n public service: UtilsService,\n public translate: TranslateService,\n public sanitizer: DomSanitizer\n ) { }\n\n ngOnInit() {\n this.loadVisibilityControls();\n\n if (this.item.files && this.item.files.length > 0) {\n this.item.linkifiedTitle = this.sanitizedLinkify(this.item.title);\n this.item.files.map(feed => {\n if (feed.url && feed.url.includes('youtube')) {\n feed.isYoutube = true;\n let youtubeID = this.getYoutubeID(feed.url);\n feed.url = `https://www.youtube.com/embed/${youtubeID}`;\n }\n })\n }\n\n console.log('ITEM ->', this.item);\n }\n\n ngAfterViewInit(): void {\n this.observer.observe(this.visibleControl.nativeElement);\n }\n\n ngOnDestroy(): void {\n this.observer.disconnect();\n clearInterval(this.visibleTimer);\n }\n\n public loadVisibilityControls() {\n this.visibleTimer = setInterval(() => {\n this.shotTimer--;\n if (this.shotTimer == 0) {\n this.isVisible.emit(this.item);\n clearInterval(this.visibleTimer);\n this.observer.disconnect();\n }\n }, 1000);\n\n const options = {\n rootMargin: '0px',\n threshold: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]\n };\n\n this.observer = new IntersectionObserver((entries, observer) => {\n entries.forEach(entry => {\n this.shotTimer = -1;\n this.item.active = false;\n if (entry.intersectionRatio == 1) {\n this.shotTimer = 5;\n }\n });\n }, options);\n }\n\n public onloadImage(event) {\n this.imageLoaded = true;\n this.imageDataLoaded = true;\n }\n\n public onErrorImage(event) {\n }\n\n public playVideo(event) {\n if (this.videoplayer) {\n this.videoplayer.nativeElement.play();\n }\n }\n\n public sanitizedLinkify(str) {\n const sanitized = this.sanitizer.bypassSecurityTrustHtml(this.linkify(str));\n return sanitized;\n }\n\n public linkify(str) {\n var re: any;\n re = [\n \"\\\\b((?:https?|ftp)://[^\\\\s\\\"'<>]+)\\\\b\",\n \"\\\\b(www\\\\.[^\\\\s\\\"'<>]+)\\\\b\",\n \"\\\\b(\\\\w[\\\\w.+-]*@[\\\\w.-]+\\\\.[a-z]{2,6})\\\\b\",\n \"#([a-z0-9]+)\"];\n re = new RegExp(re.join('|'), \"gi\");\n\n if (str) {\n return str.replace(re, function (match, url, www, mail, twitler) {\n if (url)\n return \"<a class='text-primary' target='_blank' href=\\\"\" + url + \"\\\">\" + url + \"</a>\";\n if (www)\n return \"<a class='text-primary' href=\\\"http://\" + www + \"\\\">\" + www + \"</a>\";\n if (mail)\n return \"<a class='text-primary' href=\\\"mailto://\" + mail + \"\\\">\" + mail + \"</a>\";\n if (twitler)\n return \"<a class='text-primary' href=\\\"portal/search/\" + encodeURIComponent('#' + twitler) + \"\\\">#\" + twitler + \"</a>\";\n // return \"<a class='text-primary' href=\\\"#\\\">#\" + twitler + \"</a>\";\n\n // shouldnt get here, but just in case\n return match;\n });\n }\n }\n\n public checkVideoRender(item) {\n\n console.log('videoRender ->', item);\n this.streamService.status(item).subscribe((res: any) => {\n console.log('checkVideoRender', res);\n })\n }\n\n public onEditItem() {\n console.log(\"[onEditItem]\", this.item);\n if (this.item.channel_id) {\n this.global.swal({\n type: \"warning\",\n text: this.translate.instant('ThisFeedCanOnlyBeEditedOnChannel')\n });\n }\n else {\n // Preparar feed para editar\n let feed;\n feed = this.item;\n delete feed.comments;\n delete feed.likes;\n \n feed.files.map(file => {\n file.new = false;\n });\n \n this.dialog.open(FeedModalItemEditComponent, {\n width: '600px',\n data: feed,\n panelClass: 'modal-feed-publication'\n })\n }\n }\n\n preConvertNumber(value) {\n return parseFloat(value);\n }\n\n public onRemoveItem(item) {\n this.global.swal({\n title: 'Você realmente deseja remover este Post?',\n text: 'Você não poderá reverter essa ação depois de confirmado',\n type: \"warning\",\n showCancelButton: true,\n confirmButtonText: \"Sim\",\n cancelButtonText: \"Não\"\n }).then(async confirm => {\n if (confirm.value) {\n const collection = this.db.collection(path().feed).doc(item.id);\n\n if (item.files && item.files.length > 0) {\n for (const file of item.files) {\n if (file.type === 'image') {\n if (file.name) {\n try {\n await this.service.deleteFireStorage(`${path().images}/${file.name}`);\n } catch (error) {\n console.log('Removendo um post com imagem não referenciada', error);\n }\n }\n }\n }\n }\n\n collection.delete();\n item.deleted = true;\n this.global.toast('Post removido com Sucesso');\n }\n });\n }\n\n checkFileOrigin(file) {\n\n }\n\n isYoutube(file) {\n console.log('IsYoutube ->', file);\n if (file.includes('youtube')) {\n return true;\n }\n return false;\n }\n\n getYoutubeID(url) {\n var regExp = /^.*((youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#&?]*).*/;\n var match = url.match(regExp);\n return (match && match[7].length == 11) ? match[7] : false;\n }\n\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl, SafeStyle } from '@angular/platform-browser';\n\n@Pipe({name: 'stream'})\nexport class StreamPipe implements PipeTransform {\n\n public url: string;\n\n constructor(private domSanitizer: DomSanitizer) {\n if (localStorage.getItem('loggedUser')) {\n const session = JSON.parse(localStorage.getItem('loggedUser')).data;\n this.url = (session.link_company) ? session.link_company : session.link;\n }\n else {\n // Carregar vídeos no Feed caso o usuário não esteja logado\n let link = localStorage.getItem('streamURL');\n this.url = link;\n }\n\n }\n\n transform(param: string, arg?: string): SafeResourceUrl | string {\n if (arg === 'link') {\n return this.getVideoUri(param);\n }\n if (arg === 'thumb') {\n return this.getVideoThumb(param);\n }\n if (arg === 'id') {\n return this.getVideoId(param);\n }\n if (arg === 'fire') {\n return this.getFireStorageURL(param);\n }\n if (arg === 'styleThumbUrl') {\n return this.domSanitizer.bypassSecurityTrustStyle(`url(${this.getVideoThumb(param)})`);\n }\n if (arg === 'backgroundImage') {\n return this.domSanitizer.bypassSecurityTrustStyle(`url(${param}`);\n }\n \n return param;\n }\n\n getVideoThumb(url: string): SafeResourceUrl {\n return this.url + 'videos/thumb/' + this.getVideoId(url);\n }\n\n getVideoUri(url: string): SafeResourceUrl {\n return this.domSanitizer.bypassSecurityTrustResourceUrl(this.url + 'videos/' + this.getVideoId(url) + '/480_low');\n }\n\n getFireStorageURL(url:string): SafeUrl {\n console.log('URL', url);\n return this.domSanitizer.bypassSecurityTrustUrl(url);\n }\n\n getVideoId(url: string): string {\n if (this.isUrl(url)) {\n const split = url.split('/');\n return split[4];\n }\n return url;\n }\n\n isUrl(s: string): boolean {\n const regexp = /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/;\n return regexp.test(s);\n }\n\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml, SafeStyle, SafeScript, SafeUrl, SafeResourceUrl } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safe'\n})\nexport class SafePipe implements PipeTransform {\n\n constructor(protected sanitizer: DomSanitizer) {}\n \n public transform(value: any, type: string): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {\n if (value) {\n switch (type) {\n case 'html': return this.sanitizer.bypassSecurityTrustHtml(value);\n case 'style': return this.sanitizer.bypassSecurityTrustStyle(value);\n case 'script': return this.sanitizer.bypassSecurityTrustScript(value);\n case 'url': return this.sanitizer.bypassSecurityTrustUrl(value);\n case 'resourceUrl': return this.sanitizer.bypassSecurityTrustResourceUrl(value);\n default: throw new Error(`Invalid safe type specified: ${type}`);\n }\n }\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { CurrencyPipe } from '@angular/common';\n\nconst _NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/;\n\n@Pipe({name: 'looseCurrency'})\nexport class LooseCurrencyPipe implements PipeTransform {\n constructor(private _currencyPipe: CurrencyPipe) {}\n\n transform(value: any, currencyCode: string, symbolDisplay: boolean, digits: string): string {\n if (typeof value === 'number' || _NUMBER_FORMAT_REGEXP.test(value)) {\n return this._currencyPipe.transform(value, currencyCode, symbolDisplay, digits);\n } else {\n return value;\n }\n }\n}","import { NgModule } from '@angular/core';\nimport { StreamPipe } from './stream.pipe';\nimport { SafePipe } from './safe.pipe';\nimport { LooseCurrencyPipe } from './currency.pipe';\nimport { CurrencyPipe } from '@angular/common';\n\n@NgModule({\n declarations: [\n SafePipe,\n StreamPipe,\n LooseCurrencyPipe\n ],\n imports: [\n\n ],\n exports: [\n SafePipe,\n StreamPipe,\n LooseCurrencyPipe\n ],\n providers:[\n CurrencyPipe\n ]\n})\nexport class PipesModule { }\n","import {Injectable} from '@angular/core';\nimport {Observable} from 'rxjs/Observable';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport { BaseService } from 'asap-crud';\n\n@Injectable()\nexport class UserService extends BaseService {\n\n constructor(public http: HttpClient) {\n super(http)\n }\n\n public usersChecked(payload, params?) {\n return this.http.post(this.baseUrl + '/api/v2/client/onesignal/user', payload, {headers: this.headers(false), params});\n }\n\n public getForms(): Observable<any> {\n return this.http.get(this.baseUrl + '/api/v2/admin/user/form', {headers: this.headers(false)});\n }\n\n public getAllUsers(search: string = ''): Observable<any> {\n let query = 'all';\n\n if (search) {\n query = `search=${search}`;\n }\n\n return this.http.get(`${this.baseUrl}/api/v2/admin/asap-user?${query}`, {headers: this.headers(false)});\n }\n\n public getUserData(idUser:number=null): Observable<any> {\n if (idUser !== null) {\n return this.http.get(this.baseUrl + '/api/v2/admin/asap-user/' + idUser, {headers: this.headers(false)});\n }\n return this.http.get(this.baseUrl + '/api/v2/admin/asap-user', {headers: this.headers(false)});\n }\n\n public getUserForm(): Observable<any> {\n return this.http.get(this.baseUrl + '/api/v2/admin/user/form' , {headers: this.headers(false)});\n }\n\n public getAdressByCep(cep: string): Observable<any> {\n const headerOptions = {\n 'Content-Type': 'application/x-www-form-urlencoded',\n };\n return this.http.get('http://viacep.com.br/ws/' + cep + '/json/', {headers: new HttpHeaders(headerOptions)});\n }\n\n public remove(id): Observable<any> {\n const url = this.baseUrl + '/api/v2/admin/user/delete/' + id;\n return this.http.delete(url, {headers: this.headers(false)});\n }\n\n public saveData(data: any, idCliente = null): Observable<any> {\n const headerOptions = {\n 'Authorization': localStorage.getItem('token'),\n 'Accept': 'application/json'\n };\n if (idCliente === null) {\n return this.http.post(this.baseUrl + '/api/v2/admin/asap-user/store',\n data,\n {headers: new HttpHeaders(headerOptions)});\n }\n return this.http.put(this.baseUrl + '/api/v2/admin/asap-user/' + idCliente + '/update',\n data,\n {headers: new HttpHeaders(headerOptions)});\n }\n\n\n}\n","import { Component, OnInit, Input, ViewChild, ElementRef } from '@angular/core';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { AsapFeedService } from '../services/asap-feed.service';\nimport { UtilsService } from '../services/utils.service';\nimport { path } from '../constants/constants';\nimport { Global, AsapService } from 'asap-crud';\nimport { UserService } from '../services/user.service';\n\n@Component({\n selector: 'feed-comments',\n templateUrl: './feed-comments.component.html',\n styleUrls: ['./feed-comments.component.scss', '../asap-feed.beta.componente.scss'],\n providers: [ UserService ]\n})\nexport class FeedCommentsComponent implements OnInit {\n\n @ViewChild('inputComment', {static: false}) inputComment: ElementRef;\n @ViewChild('replyInputComment', {static: false}) replyInputComment: ElementRef;\n @ViewChild('inputReply', {static: false}) inputReply: ElementRef;\n\n @Input() settings;\n @Input() feed_id;\n @Input() user;\n\n public comments = [];\n public replyingComment = [];\n public replyingResponse = [];\n public mentionsList;\n public limitCommentsTo = 3;\n public limitReplysTo = 1;\n public comment;\n public reply;\n public editedComment;\n public editedReply;\n public onLoadingLike = false;\n public onLoadingReply = false;\n public onLoadingComment = false;\n public isMarking = false;\n public users: any[];\n public loading = false;\n\n constructor(\n public global: Global,\n public db: AngularFirestore,\n public feedService: AsapFeedService,\n public service: UtilsService,\n public asapService: AsapService,\n public userService: UserService\n ) { }\n\n ngOnInit() {\n this.getComments(this.feed_id);\n }\n\n public getComments(feed_id) {\n const collection = this.db.collection(path().feed)\n .doc(feed_id)\n .collection('comments', (ref: any) => {\n let query = ref.orderBy(\"updated_at\", \"desc\");\n return query;\n });\n\n\n collection.snapshotChanges().subscribe((comment: any) => {\n this.comments = [];\n comment.map(item => {\n let data = item.payload.doc.data();\n data.id = item.payload.doc.id;\n data.likeForMe = false;\n data.limitReplysTo = 0;\n\n const likesCollection = this.db.collection(path().feed)\n .doc(feed_id)\n .collection('comments')\n .doc(data.id)\n .collection('like');\n\n\n likesCollection.snapshotChanges().subscribe(like => {\n data.likes = [];\n like.map(subItemLike => {\n let likeData = subItemLike.payload.doc.data();\n likeData.id = subItemLike.payload.doc['id'];\n\n if (this.global.loggedUser()) {\n if (likeData.user_info && likeData.user_info.id === this.global.loggedUser().id) {\n data.likeForMe = true;\n data.likeForMeID = likeData.id;\n }\n }\n\n data.likes.push(likeData);\n\n });\n });\n\n const replyCollection = this.db.collection(path().feed)\n .doc(feed_id)\n .collection('comments')\n .doc(data.id)\n .collection('reply', ref => {\n return ref.orderBy('updated_at', 'desc');\n });\n\n replyCollection.snapshotChanges().subscribe(reply => {\n data.replys = [];\n reply.map((subItem) => {\n let replyData = subItem.payload.doc.data();\n replyData.id = subItem.payload.doc['id'];\n\n data.replys.push(replyData);\n });\n\n });\n\n this.comments.push(data);\n });\n });\n }\n\n public onReplyComment(i) {\n if (!this.replyingComment[i]) {\n this.replyingComment[i] = true;\n }\n else {\n this.replyingComment[i] = false;\n }\n }\n\n public onReplyResponse(i) {\n if (!this.replyingResponse[i]) {\n this.replyingResponse[i] = true;\n }\n else {\n this.replyingResponse[i] = false;\n }\n\n }\n\n public handleShowAllReplyResponse(commentIdx: number) {\n if (this.comments[commentIdx].limitReplysTo === 0) {\n this.comments[commentIdx].limitReplysTo = this.comments[commentIdx].replys.length;\n } else {\n this.comments[commentIdx].limitReplysTo = 0;\n }\n }\n\n public unmentionRemovedUsers(comment: string) {\n const mentions: any = [];\n if (this.mentionsList && comment) {\n for (const user of this.mentionsList) {\n if (comment.includes(user.name)) {\n mentions.push(user);\n }\n }\n }\n this.mentionsList = mentions;\n }\n\n public sendComment(comment) {\n this.unmentionRemovedUsers(comment);\n let data = {\n comment: comment,\n updated_at: Date.now(),\n created_at: Date.now(),\n user_info: {\n id: this.global.loggedUser().id,\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture\n }\n }\n\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments');\n\n if (comment.length > 0) {\n const selected_users = this.mentionsList.map(user => user.id);\n this.userService.usersChecked({post_id: this.feed_id, user_id: selected_users, comment, type: 'comment'}, {comments: true}).subscribe();\n\n this.onLoadingComment = true;\n collection.add(data);\n\n const notification = {\n source:'web',\n title: `Novo comentário`,\n description: `${this.global.loggedUser().name}: ${comment}`,\n user: this.global.loggedUser(),\n client_id:this.global.loggedUser().client_id,\n redirect: `/portal/${this.feed_id}`\n }\n\n this.service.sendNotification(notification, this.user, 'feed');\n\n this.comment = \"\";\n this.mentionsList = [];\n this.onLoadingComment = false;\n }\n }\n\n public replyComment(comment_id, comment, user_info, i) {\n this.unmentionRemovedUsers(comment);\n let data = {\n comment: comment,\n created_at: Date.now(),\n updated_at: Date.now(),\n user_info: {\n id: this.global.loggedUser().id,\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture\n }\n }\n\n if (comment.length > 0) {\n this.onLoadingReply = true;\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(comment_id)\n .collection('reply');\n\n collection.add(data);\n\n const notification = {\n source:'web',\n title: `Nova Resposta`,\n description: `${this.global.loggedUser().name} respondeu: ${comment}`,\n client_id:this.global.loggedUser().client_id,\n user: this.global.loggedUser(),\n redirect: `/portal/${this.feed_id}`\n }\n\n const selected_users = this.mentionsList.map(user => user.id);\n this.userService.usersChecked({post_id: this.feed_id, user_id: selected_users}, {comments: true}).subscribe();\n this.service.sendNotification(notification, user_info, 'feed');\n\n this.reply = \"\";\n this.onLoadingReply = false;\n this.replyingComment[i] = false;\n this.replyingResponse = [];\n }\n }\n\n public deleteReply(comment_id, reply_id) {\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(comment_id)\n .collection('reply')\n .doc(reply_id);\n\n collection.delete();\n }\n\n public deleteComment(comment_id) {\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(comment_id);\n\n collection.delete();\n }\n\n public sendLikeComment(comment_id, like_id = null, item) {\n this.onLoadingLike = true;\n if (!item.likeForMe) {\n let data = {\n created_at: Date.now(),\n updated_at: Date.now(),\n user_info: {\n id: this.global.loggedUser().id,\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture\n }\n }\n\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(comment_id)\n .collection('like');\n\n collection.add(data);\n\n\n const notification = {\n source:'web',\n title: `Nova Curtida`,\n description: `${this.global.loggedUser().name} curtiu seu comentário: ${item.comment}`,\n client_id:this.global.loggedUser().client_id,\n user: this.global.loggedUser(),\n redirect: `/portal/${this.feed_id}`\n }\n\n this.service.sendNotification(notification, item.user_info, 'feed');\n\n item.likeForMe = true;\n this.onLoadingLike = false;\n }\n else {\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(comment_id)\n .collection('like')\n .doc(like_id);\n\n collection.delete();\n item.likeForMe = false;\n this.onLoadingLike = false;\n }\n }\n\n public loadMoreComments() {\n this.limitCommentsTo = this.limitCommentsTo + 3;\n }\n\n public loadMoreReplys(item) {\n item.limitReplysTo = item.limitReplysTo + 3;\n }\n\n public linkify(str) {\n var re: any;\n re = [\n \"\\\\b((?:https?|ftp)://[^\\\\s\\\"'<>]+)\\\\b\",\n \"\\\\b(www\\\\.[^\\\\s\\\"'<>]+)\\\\b\",\n \"\\\\b(\\\\w[\\\\w.+-]*@[\\\\w.-]+\\\\.[a-z]{2,6})\\\\b\",\n \"#([a-z0-9]+)\"];\n re = new RegExp(re.join('|'), \"gi\");\n\n if (str) {\n return str.replace(re, function (match, url, www, mail, twitler) {\n if (url)\n return \"<a class='text-primary' target='_blank' (click)='redirectNewLink(url)' href=\\\"\" + url + \"\\\">\" + url + \"</a>\";\n if (www)\n return \"<a class='text-primary' href=\\\"http://\" + www + \"\\\">\" + www + \"</a>\";\n if (mail)\n return \"<a class='text-primary' href=\\\"#</a>\";\n if (twitler)\n return \"<a class='text-primary' href=\\\"portal/search/\" + encodeURIComponent('#' + twitler) + \"\\\">#\" + twitler + \"</a>\";\n // return \"<a class='text-primary' href=\\\"#\\\">#\" + twitler + \"</a>\";\n\n // shouldnt get here, but just in case\n return match;\n });\n }\n }\n\n public onEditReply(reply) {\n this.editedReply = reply.comment;\n if (reply.onEdit) {\n reply.onEdit = false;\n }\n else {\n reply.onEdit = true;\n }\n }\n\n public onEditComment(comment) {\n this.editedComment = comment.comment;\n\n if (comment.onEdit) {\n comment.onEdit = false;\n }\n else {\n comment.onEdit = true;\n }\n }\n\n public updateComment(id, comment) {\n this.onLoadingComment = true;\n let data = {\n comment: this.editedComment,\n edited: true,\n updated_at: Date.now()\n }\n\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(id);\n\n if (comment.length > 0) {\n collection.update(data);\n this.editedComment = \"\";\n this.onLoadingComment = false;\n }\n }\n\n public updateReply(comment_id, old_reply, reply) {\n this.onLoadingReply = true;\n let data = {\n comment: reply,\n updated_at: Date.now(),\n }\n\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(comment_id)\n .collection('reply')\n .doc(old_reply.id);\n collection.update(data);\n this.editedComment = \"\";\n this.onLoadingReply = false;\n old_reply.onEdit = false;\n }\n\n public mentionUser(user: any) {\n this.mentionsList = this.mentionsList || [];\n this.mentionsList.push(user);\n }\n\n}\n","import { Component, OnInit, Input, isDevMode } from '@angular/core';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { AsapFeedService } from '../services/asap-feed.service';\nimport { UtilsService } from '../services/utils.service';\nimport { path } from '../constants/constants';\nimport { Global } from 'asap-crud';\nimport { TranslateService } from '@ngx-translate/core';\n\n\n@Component({\n selector: 'feed-actions',\n templateUrl: './feed-actions.component.html',\n styleUrls: ['./feed-actions.component.scss', '../asap-feed.beta.componente.scss']\n})\nexport class FeedActionsComponent implements OnInit {\n\n @Input() item;\n @Input() settings;\n @Input() portalName;\n\n public likes = [];\n public listUsersLikes;\n public comments = [];\n public shareds = [];\n public likeForMe = false;\n public sharedForMe = false;\n public likeForMeID;\n public sharedForMeID;\n public disabledLike;\n public onSendLike = false;\n public onSendShared = false;\n public deviceInfo = null;\n\n constructor(\n public global: Global,\n public db: AngularFirestore,\n public feedService: AsapFeedService,\n public service: UtilsService,\n public translate: TranslateService\n ) { }\n\n ngOnInit() {\n this.getLikes();\n this.getComments();\n this.getShareds();\n }\n\n public getLikes() {\n const collection = this.db.collection('likes', ref => {\n return ref.where('post_id', '==', this.item.id);\n });\n\n collection.snapshotChanges().subscribe(likes => {\n this.likes = [];\n // this.listUsersLikes = likes.map( (item:any) => item.user_info.name);\n // this.listUsersLikes = this.listUsersLikes.toString();\n likes.map((item: any) => {\n let data = item.payload.doc.data();\n data.id = item.payload.doc.id;\n\n if (this.global.loggedUser()) {\n // Este condição é para a versão antiga da Collection Likes\n if (data.uid && data.uid == this.global.loggedUser().id) {\n this.likeForMe = true;\n this.likeForMeID = data.id;\n }\n\n // Este condição é para a versão nova da Collection Likes\n if (data.user_info && data.user_info.id == this.global.loggedUser().id) {\n this.likeForMe = true;\n this.likeForMeID = data.id;\n }\n }\n\n this.likes.push(data);\n })\n });\n }\n\n public getComments() {\n const collection = this.db.collection(path().feed)\n .doc(this.item.id)\n .collection('comments');\n\n collection.valueChanges().subscribe(response => {\n this.comments = response;\n })\n }\n\n public getShareds() {\n const collection = this.db.collection('shareds', ref => {\n return ref.where('post_id', '==', this.item.id);\n });\n\n collection.snapshotChanges().subscribe(shareds => {\n this.shareds = [];\n shareds.map((item: any) => {\n console.log('Shareds ->', item);\n let data = item.payload.doc.data();\n data.id = item.payload.doc.id;\n\n if (this.global.loggedUser()) {\n // Este condição é para a versão antiga da Collection Shareds\n if (data.uid && data.uid == this.global.loggedUser().id) {\n this.sharedForMe = true;\n this.sharedForMeID = data.id;\n }\n\n // Este condição é para a versão nova da Collection Shareds\n if (data.user_info && data.user_info.id == this.global.loggedUser().id) {\n this.likeForMe = true;\n this.likeForMeID = data.id;\n }\n }\n\n this.shareds.push(data);\n })\n });\n }\n\n public sendLike() {\n if (this.onSendLike) {\n console.log(\"[sendLike] bloqueio...\")\n }\n else {\n this.onSendLike = true;\n setTimeout(() => {\n console.log(\"[sendLike] enviando like...\")\n let data = {\n post_id: this.item.id,\n create_at: Date.now(),\n updated_at: Date.now(),\n user_info: {\n id: this.global.loggedUser().id,\n updated_at: Date.now(),\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture\n }\n }\n \n if (!this.likeForMe) {\n \n const notification = {\n title: `Nova curtida`,\n description: `${this.global.loggedUser().name} curtiu seu post`,\n user: this.global.loggedUser(),\n redirect: `/portal/${this.item.id}`,\n client_id: this.global.loggedUser().client_id,\n }\n \n this.service.sendNotification(notification, this.item.user_info, 'feed');\n \n const collection = this.db.collection('likes');\n const commentData = collection.add(data);\n console.log(commentData);\n // const \n // const feedDataCollection = await db.collection('feed').doc(feed_id).collection('comments').doc(comment_id);\n // await feedDataCollection.update({ reply_count: admin.firestore.FieldValue.increment(1) });\n setTimeout(() => {\n this.onSendLike = false;\n }, 1000);\n }\n else {\n const collection = this.db.collection('likes').doc(this.likeForMeID);\n collection.delete();\n setTimeout(() => {\n this.onSendLike = false;\n }, 1000);\n this.likeForMe = false;\n }\n }, 100);\n }\n }\n\n public copyToClipBoard(val: string) {\n const selBox = document.createElement('textarea');\n selBox.style.position = 'fixed';\n selBox.style.left = '0';\n selBox.style.top = '0';\n selBox.style.opacity = '0';\n selBox.value = val;\n document.body.appendChild(selBox);\n selBox.focus();\n selBox.select();\n document.execCommand('copy');\n document.body.removeChild(selBox);\n //alert(\"Link copiado para a área de transferencia\")\n this.global.notification.success('Pronto!', 'Link copiado para a área de transferencia');\n }\n\n sharePost(type = 'link') {\n this.onSendShared = false;\n\n let data = {\n post_id: this.item.id,\n create_at: Date.now(),\n updated_at: Date.now(),\n uid: this.global.loggedUser().id,\n user_info: {\n id: this.global.loggedUser().id,\n updated_at: Date.now(),\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture\n }\n }\n\n if (!this.sharedForMe) {\n\n\n\n const notification = {\n title: `Novo Compartilhamento`,\n description: `${this.global.loggedUser().name} compartilhou seu post através do ${type}`,\n meta_data: this.global.loggedUser(),\n redirect: `/portal/${this.item.id}`,\n client_id: this.global.loggedUser().client_id,\n }\n\n\n\n this.service.sendNotification(notification, this.item.user_info, 'feed');\n\n\n const collection = this.db.collection('shareds');\n collection.add(data);\n }\n\n this.onSendShared = false;\n var base_url = window.location.origin;\n let urlShare = base_url + `/post/${this.item.id}`;\n\n // this.deviceInfo = this.deviceService.getDeviceInfo();\n const isMobile = false;//this.deviceService.isMobile();\n //const canShare = window.navigator.canShare(data);\n //console.log(\"canShare\",canShare)\n\n if (isMobile) {\n let myNavigator: any;\n myNavigator = window.navigator;\n\n\n if (myNavigator.share) {\n myNavigator.share({\n title: 'Gostei deste post',\n text: 'Veja esse poste de *' + this.item.user_info.name + '* que gostei ' + '\\n\\n' + urlShare,\n url: urlShare,\n })\n .then(() => console.log('Successful share'))\n .catch((error) => console.log('Error sharing', error));\n }\n\n } else {\n let url = '';\n if (type == 'whatsapp') {\n let original = this.translate.instant('LookThisPostThatIFound');\n url = `${original.split(\"{{user_name}}\").join(this.item.user_info.name)}\\n\\n${urlShare}`;\n url = `https://wa.me/?text=${encodeURIComponent(url)}`;\n window.open(url);\n }\n else if (type == 'linkedin') {\n url = `https://www.linkedin.com/shareArticle?mini=true&url=${urlShare}&title=${encodeURIComponent('Gostei deste post do *' + this.item.user_info.name + '* que encontrei no ' + 'Portal ' + '\\n\\n' + urlShare)}`\n window.open(url);\n }\n else if (type == 'telegram') {\n url = `https://telegram.me/share/url?url=${urlShare}`;\n window.open(url);\n }\n else if (type == 'link') {\n this.copyToClipBoard(urlShare);\n }\n else if (type == 'facebook') {\n url = `https://www.facebook.com/sharer/sharer.php?u=${urlShare}`;\n window.open(url);\n }\n\n }\n }\n\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Global, AsapBaseService } from 'asap-crud';\nimport { Router } from '@angular/router';\n\n@Injectable()\nexport class ProductService extends AsapBaseService {\n\n constructor(\n public http: HttpClient,\n public global: Global,\n public router: Router\n ) {\n super(http);\n this.entityName = \"\";\n this.basePath = \"api/v2\";\n }\n\n public product(id):any {\n return this.getResources({router:'client/produto/' + id});\n }\n \n public createProduct(data):any {\n return this.createResource(data, {router:'loja/produto'});\n } \n\n public categories():any {\n return this.getResources({router:'client/categoria/' + this.global.clientID()});\n }\n\n public subCategories(category):any {\n return this.getResources({router:'client/subcategoria/' + this.global.clientID() + \"/\" + category});\n }\n\n public subCategoryProducts(id,page=null):any {\n let qryPage = null;\n if (page) {\n qryPage = \"page=\" + page;\n }\n return this.getResources({router:'client/showcasefilter/' + id, query: qryPage});\n } \n\n public mainProducts():any {\n return this.getResources({router:'client/produto/mais/vendidos/' + this.global.clientID()});\n }\n\n public getMyProducts():any {\n return this.getResources({router:'client/seller/' +this.global.loggedUser().id});\n }\n \n public spotlightProducts(page=null,search=\"\"):any {\n let qryPage = \"\";\n if (page) {\n qryPage = \"page=\" + page;\n }\n if (search != \"\") {\n if (qryPage != \"\") qryPage += \"&busca=\" + search;\n }\n return this.getResources({router:'client/showcase/' + this.global.clientID(), query: qryPage});\n }\n\n public order(id,orderData):any {\n return this.createResource(orderData,{router:'loja/pedido/' + id});\n }\n\n public searchCep(cep):any {\n return this.http.get('https://viacep.com.br/ws/'+cep+'/json/');\n }\n\n public checkUserExists(email):any{\n return this.getResources({router:'admin/verify/user?search='+email + '&client_id=' +this.global.clientID()});\n }\n\n\n}\n","import { Component, OnInit, Inject, Input, ViewChild, Output, EventEmitter, ElementRef } from '@angular/core';\nimport { Global, AsapService } from 'asap-crud';\nimport { ActivatedRoute } from '@angular/router';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { classToPlain } from 'class-transformer';\nimport { CdkStepper } from '@angular/cdk/stepper';\nimport { StreamService } from '../../services/stream.service';\nimport { ProductService } from '../../services/product.service';\nimport { ProductModel, FilesModel, FeedModel } from '../../models/feed.model';\nimport { UtilsService } from '../../services/utils.service';\nimport { path } from '../../constants/constants';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\ndeclare var swal: any;\n\n@Component({\n selector: 'modal-announce',\n templateUrl: './modal-announce.component.html',\n styleUrls: ['./modal-announce.component.scss', '../../asap-feed.beta.componente.scss'],\n providers: [AsapService, Global, StreamService, ProductService]\n})\nexport class ModalAnnounceComponent implements OnInit {\n @Input() images;\n @ViewChild('file', { static: false }) file: ElementRef;\n @Output() published = new EventEmitter<boolean>(false);\n\n public category: any;\n public subCategory: any;\n public error = false;\n public entity: any = {}\n public newProduct: boolean = true;\n public newAdversing: any;\n public myProducts: any;\n public selectedProduct: any = {};\n public tempProductData: ProductModel;\n public tmpFileArray: Array<FilesModel>;\n public uploading: boolean;\n public uploadingVideo: boolean;\n public progress;\n public title;\n\n constructor(\n public dialogRef: MatDialogRef<ModalAnnounceComponent>,\n public global: Global,\n public asapService: AsapService,\n public utilsService: UtilsService,\n public sanitizer: DomSanitizer,\n public streamService: StreamService,\n public productService: ProductService,\n public route: ActivatedRoute,\n public db: AngularFirestore,\n @Inject(MAT_DIALOG_DATA) public feed,\n ) { }\n\n ngOnInit() {\n this.tmpFileArray = [];\n this.progress = 0;\n this.newProduct = true;\n this.loadCategory();\n this.loadMyProducts();\n }\n\n close() {\n this.global.alert({\n title: 'Você quer mesmo fechar anúncio?',\n text: 'Você perderá todas as informações se confirmar...',\n type: \"warning\",\n showCancelButton: true,\n confirmButtonText: \"Sim\",\n cancelButtonText: \"Não\"\n }).then(async confirm => {\n if (confirm.value) {\n this.dialogRef.close();\n }\n });\n\n\n }\n\n public defaults() {\n return {\n fotos: []\n }\n }\n\n public loadSubCategory(event) {\n this.productService.subCategories(this.entity.categoria_id).subscribe((response: any) => {\n this.subCategory = response;\n });\n }\n\n public addPicture(image) {\n this.entity.fotos.push({ img: image.path });\n }\n\n public delPicture(index) {\n // this.global.swal({\n // title: 'Remover imagem...',\n // text: \"Você deseja remover essa imagem!\",\n // type: 'warning',\n // showCancelButton: true,\n // confirmButtonText: 'Sim',\n // cancelButtonText: 'Não',\n // reverseButtons: true\n // }).then((result) => {\n // if (result.value) {\n // this.entity.fotos.splice(index,1);\n // }\n // })\n }\n\n public categoryName(id) {\n if (this.category) {\n let cat = this.category.find(item => item.id == id);\n if (cat) {\n return cat.name;\n }\n }\n return \"NÃO SELECIONADO\";\n }\n\n public subCategoryName(id) {\n if (this.subCategory) {\n let cat = this.subCategory.find(item => item.id == id);\n if (cat) {\n return cat.subCategory;\n }\n }\n return \"NÃO SELECIONADO\";\n }\n\n public onSave() {\n this.uploading = true;\n this.progress = 1;\n this.images = this.tmpFileArray;\n if (!this.newProduct) {\n this.addPostOnFeed();\n this.global.notification.success('Seu produto foi anunciado com Sucesso!');\n\n }\n else if (this.newProduct) {\n this.tempProductData = this.entity;\n this.entity.fotos = [];\n\n for (let index = 0; index < this.images.length; index++) {\n this.entity.fotos[index] = {\n img: this.images[index].url\n };\n\n }\n\n this.productService.createProduct(this.entity).subscribe((response: any) => {\n console.log('ResponseFeed');\n this.tempProductData.id = response.produto.data.id;\n this.addPostOnFeed();\n this.global.notification.success('Produto, cadastrado e anunciado com Sucesso');\n },\n\n (error: any) => {\n console.error('Erro', error);\n });\n }\n }\n\n public loadCategory() {\n this.productService.categories().subscribe((response: any) => {\n console.log('loadSubCategories', response);\n this.category = response.data;\n\n })\n }\n\n public loadSubCategories(id_categorie) {\n console.log('loadSubCategories', id_categorie);\n this.productService.subCategories(id_categorie).subscribe((response: any) => {\n this.subCategory = response;\n\n });\n }\n\n public loadMyProducts() {\n this.productService.getMyProducts().subscribe((response: any) => {\n console.log('MyPrid', response);\n this.myProducts = response.data.produtos.data;\n },\n (error: any) => {\n this.global.notification.error('Ocorreu um problema ao processar sua requisição, entre em contato com o Administrador do Sistema')\n })\n }\n\n public addPostOnFeed() {\n console.log('Owner', this);\n console.log('Data Feed', this.tempProductData);\n this.share();\n // const feedCollection = this.db.collection(path().feed);\n // const images = []; \n\n // for (let index = 0; index < this.images.length; index++) {\n // images[index] = {\n // type:'image',\n // url:this.images[index].url || this.images[index].img\n // };\n // }\n\n // const post = {\n // likes: 0,\n // isLiked: false,\n // user_info: this.global.loggedUser(),\n // updated_at: Date.now(),\n // title: data.produto,\n // product:{\n // data\n // },\n // type: 'announce',\n // files: images,\n // };\n\n // console.log('DATA', post);\n\n // feedCollection.add(post).then(res => {\n // this.db.doc(`feed/${res.id}`).update({ id: res.id });\n // });\n }\n\n share(): any {\n console.log('New Prodct 1', this.newProduct);\n const data: FeedModel = new FeedModel();\n data.product = (this.newProduct) ? this.tempProductData : this.selectedProduct;\n data.updated_at = Date.now();\n data.type = 'announce';\n console.log('Post Data', data);\n console.log('New Prodct', this.newProduct);\n\n if (this.newProduct) {\n\n data.title = '<b>' + data.product.produto + '</b>' + '<br><br>' + data.product.descr;\n data.product = this.tempProductData;\n\n if (this.tmpFileArray || this.tmpFileArray.length > 0) {\n console.log(2);\n data.files = this.tmpFileArray;\n console.log('FILES ------------>', data.files);\n const videoFilter = data.files.filter(tmp => this.getTypeByMimeType(tmp.type) === 'video');\n\n if (videoFilter.length > 0) {\n console.log(3);\n data.files[0].video_rendering = true;\n data.files[0].video_low_rendering = true;\n data.files[0].thumb_rendering = true;\n\n this.streamService.status(videoFilter[0].url).subscribe((res: any) => {\n data.files[0].video_rendering = !res.p480;\n data.files[0].video_low_rendering = !res.p480_low;\n data.files[0].thumb_rendering = !res.thumb;\n });\n }\n }\n }\n\n\n else if (!this.newProduct) {\n data.title = '<b>' + data.product.produto + '</b>' + '<br><br>' + data.product.descr;\n if (data.product.fotos.length > 0) {\n for (let index = 0; index < data.product.fotos.length; index++) {\n console.log('Fotos ->', data.product.fotos[index]);\n data.product.fotos[index].url = data.product.fotos[index].img;\n data.product.fotos[index].type = 'image';\n delete data.product.fotos[index].img;\n data.files[index] = data.product.fotos[index];\n }\n\n if (data.files.length == data.product.fotos.length) {\n console.log('Fotos', data);\n }\n }\n\n }\n\n console.log('SHARE', data);\n this.publish(data);\n this.feed.owner.published.emit(true);\n\n }\n\n\n async uploadFile(event: any) {\n console.log('uploadFile(event)', event);\n for (const file of event.target.files) {\n console.log('Target Files', file);\n const fileGenerated = window.URL.createObjectURL(file);\n const fileSanitized = this.sanitizer.bypassSecurityTrustUrl(\n fileGenerated\n );\n\n const tmpFile: FilesModel = new FilesModel();\n tmpFile.type = this.getTypeByMimeType(file.type);\n tmpFile.status = 0;\n tmpFile.thumb_rendering = false;\n tmpFile.video_rendering = false;\n tmpFile.video_low_rendering = false;\n\n let error = false;\n\n if (\n this.getTypeByMimeType(file.type) === 'video' &&\n this.tmpFileArray.filter((tmp: any) => this.getTypeByMimeType(tmp.type) === 'video').length > 0\n ) {\n swal.fire('Ops...', 'Você só pode enviar 1 vídeo por postagem', 'error');\n error = true;\n }\n\n if (\n this.getTypeByMimeType(file.type) === 'image' &&\n this.tmpFileArray.filter((tmp: any) => this.getTypeByMimeType(tmp.type) === 'image').length > 8\n ) {\n swal.fire(\n 'Ops...',\n 'Você só pode enviar até 9 imagens por postagem',\n 'error'\n );\n error = true;\n }\n\n if (!error) {\n // this.uploading = true;\n\n if (this.getTypeByMimeType(file.type) === 'image') {\n if (file.type == 'image/gif') {\n tmpFile.name = `${this.utilsService.uid()}.gif`;\n tmpFile.url = await this.readGIF(file);\n this.tmpFileArray.push(tmpFile);\n }\n else {\n const getExtname = file.name.split('.');\n const extname = getExtname[getExtname.length - 1];\n\n tmpFile.url = await this.resizeImages(file, 800);\n tmpFile.name = `${this.utilsService.uid()}.${extname}`;\n this.tmpFileArray.push(tmpFile);\n }\n }\n else if (this.getTypeByMimeType(file.type) === 'video') {\n this.uploadingVideo = true;\n console.log('Realizar Upload de Video', tmpFile);\n let reader = event.target.files[0];\n if (reader) {\n let blobURL = this.sanitizer.bypassSecurityTrustResourceUrl(URL.createObjectURL(reader));\n tmpFile.name = blobURL as any;\n this.tmpFileArray.push(tmpFile);\n console.log('Result', blobURL);\n }\n this.streamService.uploadFile(file).subscribe(\n async response => {\n if (response['loaded']) {\n tmpFile.status = ((response['loaded'] * 100) / response['total']).toFixed(0) as any;\n }\n\n if (response['body']) {\n tmpFile.url = await response['body']['uuidVideo'];\n this.uploadingVideo = false;\n console.log('Pronto!', response);\n\n }\n }\n )\n }\n }\n }\n }\n\n resizeImages(file: any, width: number): Promise<string> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const MAX_WIDTH = width;\n\n let reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = (e: any) => {\n img.src = e.target.result;\n img.onload = () => {\n const scale = MAX_WIDTH / img.width;\n const canvas = document.createElement(\"canvas\");\n canvas.height = scale * img.height;\n canvas.width = MAX_WIDTH;\n let ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n\n console.log('IMG', img.width, img.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n let dataurl = canvas.toDataURL(file.type, 0.65);\n console.log('CANVAS ->', canvas.width, canvas.height);\n return resolve(dataurl);\n }\n }\n\n reader.onerror = reject;\n });\n\n }\n\n readGIF(file: any): Promise<any> {\n return new Promise((resolve, reject) => {\n\n let reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = (e: any) => {\n return resolve(reader.result);\n }\n\n reader.onerror = reject;\n });\n\n }\n\n getTypeByMimeType(mime: string): string {\n const split = mime.split('/');\n return split[0];\n }\n\n checkUploading(): boolean {\n const tmpFileUploading = this.tmpFileArray.filter((tmp: any) => tmp.url === '');\n return (tmpFileUploading.length > 0) ? true : false;\n }\n\n removeTmpFile(tmpFile: any): void {\n const index = this.tmpFileArray.indexOf(tmpFile);\n this.tmpFileArray.splice(index, 1);\n }\n\n checkIfHasEmbededVideo(value: string): any {\n if (value) {\n if (value.includes('vimeo')) {\n return { url: '//player.vimeo.com/video/' + value.split('/')[4] };\n } else if (value.includes('youtube')) {\n return { url: '//www.youtube.com/embed/' + value.split('=')[1] };\n } else {\n return value;\n }\n }\n }\n\n publish(data: FeedModel) {\n let image;\n\n console.log('Publish()', 1, data);\n this.uploading = true;\n this.progress = 0;\n\n\n let count = 0;\n data.user_info = {\n id: this.global.loggedUser().id,\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture,\n updated_at: Date.now()\n }\n\n if (this.tmpFileArray && this.tmpFileArray.length > 0) {\n console.log('this.tmpFileArray', this.getTypeByMimeType(this.tmpFileArray[0].type));\n console.log('Publish()', 2);\n const imagesFiles = this.tmpFileArray.filter(\n (tmp: any) => this.getTypeByMimeType(tmp.type) === 'image'\n );\n\n\n const step = 98 / imagesFiles.length;\n\n if (imagesFiles.length > 0) {\n console.log('Publish()', 3, imagesFiles)\n for (const file of imagesFiles) {\n setTimeout(() => {\n this.utilsService.uploadFile(`images/${file.name}`, file.url);\n this.utilsService.percentage.subscribe(percent => {\n console.log('TO RODANDO EIM', percent);\n file.status = percent;\n });\n\n this.utilsService.task.snapshotChanges().subscribe(\n async snap => {\n if (snap.bytesTransferred === snap.totalBytes) {\n count++;\n this.progress += step;\n console.log('PROGRESS', this.progress);\n const index = data.files.findIndex(item => item.name === file.name);\n if ((!image) && (data.files[index])) {\n this.utilsService.getFireStorageURL(`images/${data.files[index].name}`).subscribe((imageURL) => {\n image = imageURL;\n });\n\n }\n delete data.files[index].url;\n\n\n\n if (count == imagesFiles.length) {\n console.log('Criando Feed');\n\n const collection = this.db.collection(path().feed)\n collection.add(classToPlain(data)).then(response => {\n this.db.collection(path().feed).doc(response.id).update({ id: response.id });\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n\n console.log('Publish()', 4)\n console.log('Data ->', data);\n\n });\n }\n }\n },\n error => {\n console.error('Error', error);\n })\n });\n }\n }\n else {\n console.log('Publish()', 5)\n console.log(data, this.tmpFileArray)\n\n const collection = this.db.collection(path().feed)\n console.log('Data ->', data);\n collection.add(classToPlain(data)).then(response => {\n this.db.collection(path().feed).doc(response.id).update({ id: response.id });\n\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n })\n\n\n }\n }\n else {\n console.log('Publish()', 5);\n console.log(data, this.tmpFileArray);\n console.log('Data ->', data);\n const collection = this.db.collection(path().feed)\n collection.add(classToPlain(data)).then(response => {\n this.db.collection(path().feed).doc(response.id).update({ id: response.id });\n\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n })\n }\n\n\n console.log('Publish()', 0, path().feed);\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n this.dialogRef.close();\n this.global.toastService.show({\n title: 'Feito!',\n message: 'Seu post foi criado com sucesso',\n layout: 2\n });\n }\n\n\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { AsapService, Global } from 'asap-crud';\nimport { AsapFeedService } from '../services/asap-feed.service';\nimport { StreamService } from '../services/stream.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { FilesModel, FeedModel } from '../models/feed.model';\nimport { UtilsService } from '../services/utils.service';\nimport { path } from '../constants/constants';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { classToPlain } from 'class-transformer';\nimport { HttpClient } from '@angular/common/http';\nimport { ModalAnnounceComponent } from './modal-announce/modal-announce.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UserService } from '../services/user.service';\nimport Swal from 'sweetalert2';\n\ndeclare var $: any;\n\n@Component({\n selector: 'feed-publication',\n templateUrl: './feed-publication.component.html',\n styleUrls: ['./feed-publication.component.scss', '../asap-feed.beta.componente.scss'],\n providers: [ StreamService, UserService, AsapService ]\n})\nexport class FeedPublicationComponent implements OnInit {\n\n @Input() announce = false;\n @Input() hideFilterByMe = false;\n @Input() settings;\n @Output() feedCreated = new EventEmitter();\n @Output() filter = new EventEmitter();\n\n public users = [];\n\n public tmpFileArray: Array<FilesModel>;\n public uploading;\n public title = null;\n public progress;\n public notAnnounce;\n public newProduct;\n public ExpandImg;\n public type = 'post';\n public embedFile;\n public tmpEmbedFile;\n public videoSendedID;\n public disabled = false;\n public newfeed: any;\n\n public message = \"Digite acima o nome da pessoa que deseja marcar, em seguida pressione [ENTER]\";\n public selectedUsers: any = {};\n public listType: 'checked' | 'search' = 'search';\n\n public filterByMe = false;\n\n constructor(\n public global: Global,\n public feedService: AsapFeedService,\n public asapService: AsapService,\n public userService: UserService,\n public sanitizer: DomSanitizer,\n public streamService: StreamService,\n public utilsService: UtilsService,\n public db: AngularFirestore,\n public http: HttpClient,\n public dialog: MatDialog,\n ) { }\n\n ngOnInit() {\n this.tmpFileArray = [];\n console.log('Prefix Publication ->', path().feed);\n this.getNewFeed();\n }\n\n loadUsers(value: any) {\n const search = value;\n this.users = null;\n this.listType = 'search';\n if (search != '') {\n this.message = \"Nenhum usuário encontrado!\";\n this.userService.getAllUsers(search).subscribe((response) => {\n this.users = response.data.map((user) => {\n return {\n id: user.user_info.user_id,\n name: user.user_info.user_name,\n email: user.email,\n picture: user.picture\n }\n });\n })\n }\n }\n\n async uploadFile(event: any) {\n for (const file of event.target.files) {\n\n const tmpFile: FilesModel = new FilesModel();\n tmpFile.type = this.getTypeByMimeType(file.type);\n // tmpFile.status = 0;\n tmpFile.thumb_rendering = false;\n tmpFile.video_rendering = false;\n tmpFile.video_low_rendering = false;\n\n let error = false;\n if (this.getTypeByMimeType(file.type) === 'video' && this.tmpFileArray.filter((tmp: any) => this.getTypeByMimeType(tmp.type) === 'video').length > 0) {\n this.global.toastService.error({\n title: 'Ops',\n message: 'Você só pode enviar um vídeo por Post'\n });\n error = true;\n }\n\n if (this.getTypeByMimeType(file.type) === 'image' && this.tmpFileArray.filter((tmp: any) => this.getTypeByMimeType(tmp.type) === 'image').length > 4) {\n this.global.toastService.error({\n title: 'Ops',\n message: 'Você pode utilizar até no máximo 5 imagens no seu Post'\n });\n error = true;\n }\n\n if (!error) {\n // this.uploading = true;\n\n if (this.getTypeByMimeType(file.type) === 'image') {\n if (file.type == 'image/gif') {\n tmpFile.name = `${this.streamService.uid()}.gif`;\n tmpFile.url = await this.readGIF(file);\n this.tmpFileArray.push(tmpFile);\n }\n\n else {\n const getExtname = file.name.split('.');\n const extname = getExtname[getExtname.length - 1];\n\n tmpFile.url = await this.resizeImages(file, 800);\n tmpFile.name = `${this.streamService.uid()}.${extname}`;\n this.tmpFileArray.push(tmpFile);\n }\n }\n\n else if (this.getTypeByMimeType(file.type) === 'video') {\n this.uploading = true;\n console.log('Realizar Upload de Video', tmpFile);\n const reader = file;\n if (reader) {\n const blobURL = URL.createObjectURL(reader);\n tmpFile.name = blobURL as any;\n this.tmpFileArray.push(tmpFile);\n console.log('[uploadFile] if reader', blobURL);\n }\n\n this.uploading = true;\n await this.streamService.uploadFile(file).subscribe(\n response => {\n console.log('[uploadFile] Response', tmpFile);\n if (!response.body) {\n if (response['total']) {\n tmpFile.status = ((response['loaded'] * 100) / response['total']).toFixed(0) as any;\n }\n this.progress = tmpFile.status;\n }\n\n if (response.body && response.body.file) {\n console.log('[uploadFile] Response Uploaded', response);\n tmpFile.status = 101;\n tmpFile.url = response.body.file.secure_url;\n this.videoSendedID = tmpFile.url;\n this.uploading = false;\n this.progress = null;\n\n }\n }\n );\n console.log('tmpFile', tmpFile);\n }\n }\n }\n }\n\n resizeImages(file: any, width: number): Promise<string> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const MAX_WIDTH = width;\n const MAX_HEIGHT: any = 1334;\n\n const reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = (e: any) => {\n img.src = e.target.result;\n img.onload = () => {\n const scale = MAX_WIDTH / img.width;\n const canvas = document.createElement('canvas');\n canvas.height = scale * img.height;\n\n canvas.width = MAX_WIDTH;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0);\n\n console.log('IMG', img.width, img.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n const dataurl = canvas.toDataURL(file.type, 0.65);\n console.log('CANVAS ->', canvas.width, canvas.height);\n return resolve(dataurl);\n };\n };\n\n reader.onerror = reject;\n });\n\n }\n\n readGIF(file: any): Promise<any> {\n return new Promise((resolve, reject) => {\n\n const reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = (e: any) => {\n return resolve(reader.result);\n };\n\n reader.onerror = reject;\n });\n\n }\n\n getTypeByMimeType(mime: string): string {\n const split = mime.split('/');\n return split[0];\n }\n\n share(): any {\n const data: FeedModel = new FeedModel();\n data.updated_at = Date.now();\n data.title = this.title;\n data.type = this.type;\n data.selected_users = [];\n data.selected_users_data = [];\n\n for (const id in this.selectedUsers) {\n if (this.selectedUsers[id]) {\n data.selected_users.push(id);\n data.selected_users_data.push({\n id,\n name: this.selectedUsers[id].name,\n picture: this.selectedUsers[id].picture,\n email: this.selectedUsers[id].email\n });\n }\n }\n\n if (this.tmpFileArray || this.tmpFileArray.length > 0) {\n data.files = this.tmpFileArray;\n // const videoFilter = data.files.filter(tmp => this.getTypeByMimeType(tmp.type) === 'video');\n // if (videoFilter.length > 0) {\n // }\n data.files.map(item => {\n if (item.type === 'video') {\n console.log('Existe um video no Feed', item);\n if (!item.isCloudinary) {\n item.video_rendering = false;\n item.video_low_rendering = false;\n item.thumb_rendering = false;\n\n // Setando o ID do Feed igual ao ID do vídeo\n data.ref = item.url;\n data.status = false;\n this.streamService.status(item.url).subscribe((res: any) => {\n item.video_rendering = !res.p480;\n item.video_low_rendering = !res.p480_low;\n item.thumb_rendering = !res.thumb;\n });\n }\n }\n });\n }\n console.log(\"share\", data);\n \n this.publish(data).then((id) => {\n this.userService.usersChecked({post_id: id, user_id: data.selected_users, comment: data.title, type: 'post'}, {comments: true}).subscribe();\n });\n\n this.selectedUsers = [];\n }\n\n confirmShare() {\n const swall = Swal.fire({\n title: \"Podemos compartilhar seu post?\",\n type: \"warning\",\n showCancelButton: true,\n confirmButtonText: \"Sim\",\n cancelButtonText: \"Não\"\n });\n\n swall.then((confirmed) => {\n if (confirmed.value) {\n this.share();\n }\n });\n }\n\n publish(data: FeedModel) {\n return new Promise((resolve) => {\n\n let image;\n let id;\n console.log('Publish()', 1, data);\n \n if (!data.title || data.title === '') {\n // this.global.toastService.error({\n // title: 'Ops',\n // message: 'Você precisa adicionar um texto à sua imagem/vídeo.',\n // });\n Swal.fire({\n title: \"Podemos compartilhar seu post??\",\n type: \"warning\",\n showCancelButton: true,\n confirmButtonText: \"Sim\",\n cancelButtonText: \"Não\"\n })\n return;\n }\n this.uploading = true;\n this.progress = 0;\n \n \n let count = 0;\n data.user_info = {\n id: this.global.loggedUser().id,\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture,\n updated_at: Date.now()\n };\n \n if (this.type == 'embed') {\n const fileEmbed: any = {\n name: this.embedFile,\n url: this.embedFile,\n type: 'embed'\n };\n \n this.tmpFileArray.push(fileEmbed);\n }\n \n if (this.type != 'embed') {\n if (this.tmpFileArray && this.tmpFileArray.length > 0) {\n console.log('this.tmpFileArray', this.getTypeByMimeType(this.tmpFileArray[0].type));\n console.log('Publish()', 2);\n const imagesFiles = this.tmpFileArray.filter(\n (tmp: any) => this.getTypeByMimeType(tmp.type) === 'image'\n );\n \n \n const step = 98 / imagesFiles.length;\n \n if ((imagesFiles.length && data.title === '')) {\n this.global.toastService.error({\n title: 'Ops',\n message: 'Você precisa adicionar um texto junto à sua imagem/vídeo.',\n });\n return;\n }\n \n if (imagesFiles.length > 0) {\n for (const file of imagesFiles) {\n setTimeout(() => {\n this.utilsService.uploadFile(`images/${file.name}`, file.url);\n this.utilsService.percentage.subscribe(percent => {\n file.status = percent;\n });\n \n this.utilsService.task.snapshotChanges().subscribe(\n async snap => {\n if (snap.bytesTransferred === snap.totalBytes) {\n count++;\n this.progress += step;\n console.log('PROGRESS', this.progress);\n const index = data.files.findIndex(item => item.name === file.name);\n if ((!image) && (data.files[index])) {\n this.utilsService.getFireStorageURL(`images/${data.files[index].name}`).subscribe((imageURL) => {\n image = imageURL;\n });\n \n }\n delete data.files[index].url;\n \n \n \n if (count == imagesFiles.length) {\n console.log('Criando Feed');\n \n const collection = this.db.collection(path().feed);\n collection.add(classToPlain(data)).then(response => {\n this.db.collection(path().feed).doc(response.id).update({ id: response.id });\n this.feedCreated.emit(response.id);\n resolve(response.id);\n });\n \n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n \n console.log('Publish()', 4);\n }\n }\n },\n error => {\n console.error('Error', error);\n });\n });\n }\n }\n else {\n console.log('Publish()', 5);\n console.log(data, this.tmpFileArray);\n \n const collection = this.db.collection(path().feed);\n collection.add(classToPlain(data)).then(response => {\n this.db.collection(path().feed).doc(response.id).update({ id: response.id });\n this.feedCreated.emit(response.id);\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n resolve(response.id);\n });\n \n }\n }\n else {\n console.log('Publish()', 5);\n console.log(data, this.tmpFileArray);\n \n const collection = this.db.collection(path().feed);\n collection.add(classToPlain(data)).then(response => {\n this.db.collection(path().feed).doc(response.id).update({ id: response.id });\n this.feedCreated.emit(response.id);\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n resolve(response.id);\n });\n }\n }\n else {\n data.files = this.tmpFileArray;\n console.log('Publish(Embed)', 6);\n console.log(data, this.tmpFileArray);\n const collection = this.db.collection(path().feed);\n collection.add(classToPlain(data)).then(response => {\n const doc = this.db.collection(path().feed).doc(response.id);\n doc.update({ id: response.id });\n this.feedCreated.emit(response.id);\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n this.embedFile = null;\n this.type = 'post';\n resolve(response.id);\n });\n }\n \n \n console.log('Publish()', 0, path().feed);\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n this.global.toastService.show({\n title: 'Feito!',\n message: 'Seu post foi criado com sucesso',\n layout: 2\n });\n });\n }\n\n removeTmpFile(tmpFile: any): void {\n const index = this.tmpFileArray.indexOf(tmpFile);\n this.tmpFileArray.splice(index, 1);\n }\n\n checkPublicationType(title) {\n console.log('Event ->', event);\n if (title.length && title.length > 35) {\n if (this.isValidUrl(title)) {\n console.log('checkPublicationType', title);\n if (title.includes('youtu') || title.includes('youtube')) {\n this.uploading = true;\n this.type = 'embed';\n this.uploading = false;\n this.embedFile = title.replace('watch?v=', 'embed/');\n this.tmpEmbedFile = this.sanitizer.bypassSecurityTrustResourceUrl(this.embedFile);\n }\n else if (title.includes('spotify')) {\n this.uploading = true;\n this.type = 'embed';\n this.embedFile = title.replace('/episode', '/embed-podcast/episode');\n this.tmpEmbedFile = this.sanitizer.bypassSecurityTrustResourceUrl(this.embedFile);\n this.uploading = false;\n }\n }\n }\n }\n\n removeEmbedFiles() {\n this.title = '';\n this.embedFile = '';\n this.type = 'post';\n }\n\n isValidUrl(str) {\n const pattern = new RegExp('^(https?:\\\\/\\\\/)?' + // protocol\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|' + // domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*' + // port and path\n '(\\\\?[;&a-z\\\\d%_.~+=-]*)?' + // query string\n '(\\\\#[-a-z\\\\d_]*)?$', 'i'); // fragment locator\n return !!pattern.test(str);\n }\n\n openAnnounceModal() {\n const dialogRef = this.dialog.open(ModalAnnounceComponent, {\n width: '55%',\n minHeight: '95%',\n maxHeight: '100%',\n closeOnNavigation: false,\n disableClose: true,\n data: { owner: this, tmpFileArray: this.tmpFileArray }\n });\n\n }\n\n reload() {\n this.filter.emit(this.filterByMe);\n }\n\n selectUser(evt: any, user: any) {\n if (evt.target.checked) {\n this.selectedUsers[user.id] = user;\n }\n else {\n delete this.selectedUsers[user.id];\n }\n }\n\n showSelected() {\n this.listType = 'checked';\n this.users = [];\n for (const id in this.selectedUsers) {\n this.users.push(this.selectedUsers[id]);\n }\n }\n\n public openModal() {\n if (this.newfeed) {\n $('#publicationModal').modal();\n }\n else {\n this.confirmShare();\n }\n }\n\n public getNewFeed() {\n this.selectedUsers = [];\n this.asapService.basePath = \"api/v2/admin\";\n this.asapService.entityName = \"color\";\n this.asapService.getResource(this.global.loggedUser().client_id).subscribe((response) => {\n this.newfeed = response.data.newfeed;\n });\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Global, AsapBaseService } from 'asap-crud';\n\n@Injectable()\nexport class ChannelService extends AsapBaseService {\n\n public isSubscriber = false;\n\n constructor(\n public http: HttpClient,\n public global: Global\n ) {\n super(http);\n this.basePath = \"api/v2/admin\";\n this.entityName = \"channel\";\n this.isSubscriber = false;\n };\n\n public channelLibrary(search,page) {\n if (page == null) page = 1;\n return this.createResource({search:search},{router:\"videos\",query:\"page=\" + page});\n }\n\n public channeGrouplLibrary(search,page) {\n if (page == null) page = 1;\n return this.createResource({search:search},{router:\"videos\",query:\"page=\" + page +'&group'});\n }\n\n public fileLibrary(search,page) {\n if (page == null) page = 1;\n return this.createResource({search:search},{router:\"files\",query:\"page=\" + page});\n }\n\n public fileGroupLibrary(search,page) {\n if (page == null) page = 1;\n return this.createResource({search:search},{router:\"files\",query:\"page=\" + page+'&group'});\n }\n\n public subscribe(channel_id, callback = null) {\n this.createResource({},{router:\"subscribe/\" + channel_id}).subscribe(() => {\n this.global.notification.success('Pronto', 'Inscrição efetuada com sucesso!')\n this.isSubscriber = true;\n if (callback) {\n callback();\n }\n });\n }\n\n public like(video_id, like = true, type = 'video') {\n let data:any;\n\n data = (like) ? {like: 1} : {unlike: 1};\n data.type = type;\n\n return this.createResource(data,{router: 'like/' + video_id});\n }\n\n public likev2(video_id, dados, type = 'video') {\n dados.type = type;\n return this.createResource(dados,{router: 'like/' + video_id});\n }\n \n\n public unsubscribe(channel_id, callback = null) {\n this.global.alert({\n type: \"warning\",\n text:\"Você realmente deseja cancelar sua inscrição?\",\n position: 'top-right',\n showCancelButton: true,\n confirmButtonText: \"Sim\",\n cancelButtonText: \"Não\"\n }).then(\n confirm => {\n if (confirm) {\n this.createResource({},{router:\"subscribe/\" + channel_id}).subscribe(() => {\n this.global.notification.info('Pronto', 'Você não está mais inscrito no Canal!')\n this.isSubscriber = false;\n\n if (callback) {\n callback();\n }\n });\n }\n },\n cancel => {}\n );\n \n }\n\n public getPlaylists(user_id = null, type='home') {\n return this.getResources({router: 'playlist/' + user_id + '?type=' + type});\n }\n\n public getPlaylist(playlist_id, user_id) {\n return this.getResources({router: 'playlist/' + playlist_id + '/' + user_id});\n }\n\n public createPlaylist(playlist_name) {\n let data:any;\n data = {name:playlist_name}\n return this.createResource(data, {router: 'playlist'});\n }\n\n public deletePlaylist(playlist_id) {\n return this.deleteResource(playlist_id);\n }\n\n public addVideoPlaylist(video_id, playlist_id) {\n let data: any;\n data = {video_id: video_id};\n console.log('VideoID ->', data.video_id);\n console.log('playlist_id ->', playlist_id);\n return this.createResource(data, {router: 'playlist/'+playlist_id});\n }\n\n public updateChannel(data) {\n return this.updateResource(data);\n }\n}","import { Component, ViewChild, OnInit } from '@angular/core';\nimport { OwlOptions } from 'ngx-owl-carousel-o';\nimport { Global } from 'asap-crud';\nimport { ChannelService } from '../services/channel.service';\nimport { AngularFirestore } from '@angular/fire/firestore';\n\nimport SwiperCore, { Pagination, SwiperOptions } from 'swiper';\n\nSwiperCore.use([Pagination]);\n\n@Component({\n selector: 'app-stories',\n templateUrl: './stories.component.html',\n styleUrls: ['../asap-feed.beta.componente.scss', './stories.component.scss'],\n providers: [ChannelService]\n})\n\nexport class StoriesComponent implements OnInit {\n\n constructor(\n public _channelService: ChannelService,\n public global: Global,\n public db: AngularFirestore\n ) {\n\n }\n\n public channelArray: any;\n public loading = true;\n\n storiesOptions: OwlOptions = {\n loop: true,\n mouseDrag: true,\n touchDrag: true,\n pullDrag: false,\n dots: false,\n navSpeed: 700,\n navText: ['', ''],\n nav: true,\n responsive: {\n 0: {\n items: 2.4,\n },\n 500: {\n items: 3.5,\n }\n }\n }\n\n config: SwiperOptions = {\n navigation: true,\n pagination: { clickable: true },\n autoHeight: false,\n breakpoints: {\n 0: {\n slidesPerView: 2.5,\n slidesPerGroup: 2.5,\n spaceBetween: 10\n },\n 480: {\n slidesPerView: 3.5,\n slidesPerGroup: 3.5,\n spaceBetween: 10\n }\n }\n };\n\n\n\n ngOnInit() {\n this.getChannels();\n }\n\n getChannels() {\n this._channelService.getResources({ query: 'type=recommended' }).subscribe((res: any) => {\n console.log('getChannels', res.data);\n this.channelArray = [];\n\n if (res.data.length) {\n do {\n this.channelArray = [\n ... this.channelArray,\n ...res.data\n ];\n } while (this.channelArray.length < 10)\n\n }\n\n this.channelArray.map(item => {\n this.getNotificationForChannels(item);\n });\n\n this.loading = false;\n // console.log('channelArray', this.channelArray);\n });\n }\n\n getNotificationForChannels(item) {\n let notification;\n if (this.global.loggedUser()) {\n\n const collection = this.db.collection('notifications', (ref: any) => {\n let query = ref.orderBy('viewed', 'asc')\n .orderBy('create_at', 'desc')\n .where('receiver_id', '==', this.global.loggedUser().id)\n .where('channel_id', '==', item.id.toString())\n .where('read', '==', false);\n return query;\n });\n\n collection.snapshotChanges().subscribe((notificationDoc) => {\n console.log('Notifications for Channels ->', notificationDoc);\n item.notifications = [];\n notificationDoc.map(data => {\n let notificationData: any = data.payload.doc.data();\n item.notifications.push(notificationData);\n });\n });\n }\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { AsapFeedBetaService } from '../asap-feed-beta.service';\n\n\n@Component({\n selector: 'app-feed-posts',\n templateUrl: './feed-posts.component.html'\n})\n\nexport class FeedPostsComponent implements OnInit{\n\n constructor(\n public route: ActivatedRoute,\n public asapFeedBetaService: AsapFeedBetaService,\n ){\n }\n\n ngOnInit() {\n\n }\n\n get settings() {\n let layout:any = JSON.parse(localStorage.getItem('layout_home'));\n if (layout && layout.main && layout.main.length) {\n const feed = layout.main.find(layout => layout.type == 'feed');\n return {\n ... feed,\n template: feed.template || 'template-2'\n };\n }\n return {\n template: 'template-2'\n };\n }\n\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { UserService } from '../../services/user.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'asap-auto-complete',\n templateUrl: './auto-complete.component.html',\n styleUrls: ['./auto-complete.component.scss'],\n providers: [ UserService ]\n})\nexport class AutoCompleteComponent implements OnChanges {\n\n @Input() input: any;\n @Output() userSelected = new EventEmitter();\n\n public options: any[];\n public loading = false; \n public lastSearch: string;\n public message: string;\n public startPosition: number;\n public endPosition: number;\n \n public panelTop: number;\n public panelStart: number;\n public panelWidth: number;\n\n public searching: Subscription;\n\n constructor(public service: UserService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.input && this.input) {\n this.panelTop = this.input.nativeElement.offsetTop + this.input.nativeElement.offsetHeight;\n this.panelStart = this.input.nativeElement.offsetLeft;\n this.panelWidth = this.input.nativeElement.offsetWidth;\n }\n }\n\n public get mark() {\n if (this.input) {\n const position = this.input.nativeElement.selectionStart;\n const mark = this.getMarkAtPosition(position);\n if (mark) {\n this.loadUsers(mark);\n }\n return mark;\n }\n\n return null;\n }\n\n loadUsers(value: any) {\n const search = value.substring(1);\n if (search && this.lastSearch != search) {\n if (this.searching) {\n this.searching.unsubscribe();\n }\n this.lastSearch = search;\n this.message = \"Carregando...\";\n this.options = [];\n this.loading = true;\n this.searching = this.service.getAllUsers(search).subscribe((response) => {\n this.searching.unsubscribe();\n this.searching = null;\n\n this.loading = false;\n this.options = response.data.map((user) => {\n return {\n id: user.user_info.user_id,\n name: user.user_info.user_name,\n email: user.email,\n picture: user.picture\n }\n });\n\n if (this.options.length == 0) {\n this.message = 'Nenhum usuário encontrado!';\n } else {\n this.message = '';\n }\n })\n }\n }\n\n public onSelect(selected: any) {\n if (this.input) {\n const value = this.input.nativeElement.value;\n const shift = 1 + selected.name.length - this.mark.length;\n this.input.nativeElement.value = value.substring(0, this.startPosition) + `@${selected.name}` + value.substring(this.endPosition);\n \n const evento = new Event('input');\n this.input.nativeElement.dispatchEvent(evento); \n this.userSelected.emit(selected);\n \n this.input.nativeElement.selectionStart = this.endPosition + shift;\n this.input.nativeElement.selectionEnd = this.endPosition + shift;\n this.input.nativeElement.focus();\n }\n }\n\n getMarkAtPosition(position) {\n const cursorPosition = position;\n if (!this.input || !this.input.nativeElement.value || cursorPosition === 0) {\n return \"\";\n }\n \n const phrase = this.input.nativeElement.value;\n const words = phrase.split(' ');\n let startPosition = 0;\n let endPosition = 0;\n\n for (let i = 0; i < words.length; i++) {\n endPosition += words[i].length;\n\n if (cursorPosition >= startPosition && cursorPosition <= endPosition) {\n if (words[i].startsWith('@')) {\n this.startPosition = startPosition;\n this.endPosition = endPosition;\n return words[i];\n }\n return \"\";\n }\n\n startPosition = endPosition + 1;\n endPosition = startPosition;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AsapFeedBetaComponent } from './asap-feed-beta.component';\nimport { CommonModule } from '@angular/common';\nimport { FeedItemComponent } from './feed-item/feed-item.component';\nimport { MomentModule } from 'ngx-moment';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { AsapSkeletonModule } from 'asap-skeleton';\nimport { PipesModule } from './pipes/pipes.module';\nimport { NgxHmCarouselModule } from 'ngx-hm-carousel';\nimport { FormsModule } from '@angular/forms';\nimport { FeedCommentsComponent } from './feed-comments/feed-comments.component';\nimport { FeedActionsComponent } from './feed-actions/feed-actions.component';\nimport { FeedPublicationComponent } from './feed-publication/feed-publication.component';\nimport { FeedModalItemEditComponent } from './feed-publication/feed-modal-item-edit/feed-modal-item-edit.component';\nimport { UtilsService } from './services/utils.service';\nimport { StoriesComponent } from './stories/stories.component';\nimport { OwlModule } from 'ngx-owl-carousel';\nimport { CarouselModule } from 'ngx-owl-carousel-o';\nimport { RouterModule } from '@angular/router';\nimport { ModalAnnounceComponent } from './feed-publication/modal-announce/modal-announce.component';\nimport { PopoverModule } from 'ngx-smart-popover';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { Global } from 'asap-crud';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatListModule } from '@angular/material/list';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { SwiperModule } from 'ngx-swiper-wrapper';\nimport 'moment/locale/pt-br';\nimport { AsapTabFeedComponent } from './tab-feed/asap-tab-feed.component';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { FeedPostsComponent } from './feed-posts/feed-posts.component';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { AutoCompleteComponent } from './components/auto-complete/auto-complete.component';\n\n// import { NgAisModule } from 'angular-instantsearch';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n MatButtonModule,\n MatIconModule,\n MatMenuModule,\n MatListModule,\n MatCardModule,\n MatDialogModule,\n MatSelectModule,\n MatRadioModule,\n MatInputModule,\n MatTooltipModule,\n MatProgressBarModule,\n MatStepperModule,\n MatTabsModule,\n MomentModule,\n TranslateModule,\n InfiniteScrollModule,\n AsapSkeletonModule,\n PipesModule,\n NgxHmCarouselModule,\n OwlModule,\n CarouselModule,\n NgxSkeletonLoaderModule,\n PopoverModule,\n SwiperModule,\n MatAutocompleteModule\n ],\n declarations: [\n AsapFeedBetaComponent,\n FeedItemComponent,\n FeedCommentsComponent,\n FeedActionsComponent,\n FeedPublicationComponent,\n FeedModalItemEditComponent,\n FeedPostsComponent,\n StoriesComponent,\n ModalAnnounceComponent,\n AsapTabFeedComponent,\n AutoCompleteComponent\n ],\n exports: [\n AsapFeedBetaComponent,\n FeedItemComponent,\n AsapTabFeedComponent,\n ],\n entryComponents: [\n AsapFeedBetaComponent,\n FeedModalItemEditComponent,\n ModalAnnounceComponent\n ],\n providers: [\n UtilsService\n ]\n})\nexport class AsapFeedBetaModule {\n\n constructor(public global: Global) {\n console.log('[AsapFeedBetaModule]', new Date());\n this.global.getOrCreateSessionData('AsapMyPageModule.tabs',[]).push({\n label: 'Meus Posts',\n component: AsapFeedBetaComponent,\n condition: (component,type) => (this.global.loggedUser() && this.global.hasPermission('my-posts',type) && component.hasFeed),\n loading: (component) => component.loading\n });\n }\n}\n","import { Routes } from '@angular/router';\nimport { FeedPostsComponent } from './feed-posts/feed-posts.component';\n\nexport const AsapFeedBetaRoting: Routes = [\n {\n path: ':feed_id',\n component: FeedPostsComponent\n }\n]"]}
1
+ {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://asap-feed-beta/lib/asap-feed-beta.service.ts","ng://asap-feed-beta/lib/constants/constants.ts","ng://asap-feed-beta/lib/services/asap-feed.service.ts","ng://asap-feed-beta/lib/asap-feed-beta.component.ts","ng://asap-feed-beta/lib/tab-feed/asap-tab-feed.component.ts","ng://asap-feed-beta/lib/services/stream.service.ts","ng://asap-feed-beta/lib/models/feed.model.ts","ng://asap-feed-beta/lib/services/utils.service.ts","ng://asap-feed-beta/lib/feed-publication/feed-modal-item-edit/feed-modal-item-edit.component.ts","ng://asap-feed-beta/lib/feed-item/feed-item.component.ts","ng://asap-feed-beta/lib/pipes/stream.pipe.ts","ng://asap-feed-beta/lib/pipes/safe.pipe.ts","ng://asap-feed-beta/lib/pipes/currency.pipe.ts","ng://asap-feed-beta/lib/pipes/pipes.module.ts","ng://asap-feed-beta/lib/services/user.service.ts","ng://asap-feed-beta/lib/feed-comments/feed-comments.component.ts","ng://asap-feed-beta/lib/feed-actions/feed-actions.component.ts","ng://asap-feed-beta/lib/services/product.service.ts","ng://asap-feed-beta/lib/feed-publication/modal-announce/modal-announce.component.ts","ng://asap-feed-beta/lib/feed-publication/feed-publication.component.ts","ng://asap-feed-beta/lib/services/channel.service.ts","ng://asap-feed-beta/lib/stories/stories.component.ts","ng://asap-feed-beta/lib/feed-posts/feed-posts.component.ts","ng://asap-feed-beta/lib/components/auto-complete/auto-complete.component.ts","ng://asap-feed-beta/lib/asap-feed-beta.module.ts","ng://asap-feed-beta/lib/asap-feed-beta.routing.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__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","pop","push","__values","o","m","__read","r","ar","error","__spread","concat","AsapFeedBetaService","announce","publication","stories","query","options","console","log","Injectable","args","providedIn","prefix","localStorage","getItem","path","images","feed","likes","shareds","AsapFeedService","http","clientFirebaseServer","baseUrlAPI","client_id","getFeed","feed_id","user","filterByMe","url","me","key","post","createFeed","data","getMoreFeed","limit","last_documment","payload","searchBy","searchValue","sendComment","deleteComment","comment_id","delete","sendReplyComment","deleteReplyComment","reply_id","likeComment","likePost","deleteLikeComment","like_id","sendNotification","user_id","type","HttpClient","AsapFeedBetaComponent","feedService","db","route","controlService","global","hasFeed","loading","ignoreControl","hasID","topPosToStartShowing","showToTopButton","isSinglePost","ngOnInit","_this","params","subscribe","param","feedID","setTimeout","checkFeedChange","ngOnChanges","changes","id","feeds","loggedUser","response","paginate","pagination","getMore","next_document","map","item","permitted","checkScroll","window","pageYOffset","document","documentElement","scrollTop","gotoTop","scroll","top","left","behavior","permission","user_info","extras","_b","tslib_1.__values","_c","perm","field","onNewFeed","index","_d","focus","_e","_f","isHighlighted","slice","getElementsByClassName","scrollIntoView","sendVisible","postData","post_id","title","created_at","updated_at","Date","now","name","picture","documentID","doc","set","get","exists","ref","collection","add","reload","defineProperty","count","last_document","Component","selector","template","AngularFirestore","ActivatedRoute","Global","Input","HostListener","AsapTabFeedComponent","service","canShow","settings","tabs","channel_list","feedLoad","channel","allFeed","feed_users","onChangeTab","event","tab","textLabel","tabName","c","channel_id","join","typeValue","forEach","ViewChildren","StreamService","session","JSON","parse","streamVideoPath","link_company","link","getHeaders","headers","Accept","status","uploadFile","formData","FormData","append","req","HttpRequest","reportProgress","responseType","HttpHeaders","HttpParams","request","uid","s4","Math","floor","random","toString","substring","UserInfo","ProductModel","cod","descr","hashtag","produto","parcela","qtdMinimo","valorAte","valorDe","adaptation","desconto","fotos","FilesModel","thumb_rendering","video_rendering","video_low_rendering","isCloudinary","FilesModelEdit","new","FeedModel","product","source","files","UtilsService","firebaseStorage","firebase","fileName","base64","correctBase64","task","putString","percentage","percentageChanges","snapshot","snapshotChanges","getFireStorageURL","getDownloadURL","deleteFireStorage","toPromise","_a","isUrl","test","user_destination","AngularFireStorage","FirebaseApp","FeedModalItemEditComponent","dialogRef","streamService","sanitizer","utilsService","showAnnouncePublication","tmpFileArray","close","file","tmpFile","this_1","getTypeByMimeType","filter","tmp","toastService","message","readGIF","getExtname","split","extname","resizeImages","uploading","reader","blobURL","URL","createObjectURL","toFixed","progress","videoSendedID","target","share","comments","res","p480","p480_low","thumb","publish","fileEmbed","embedFile","images_2","image","step_1","percent","snap","bytesTransferred","totalBytes","index_1","findIndex","imageURL","update","classToPlain","images_1","images_1_1","mime","width","img","Image","MAX_WIDTH","FileReader","readAsDataURL","onload","src","scale","canvas","createElement","height","ctx","getContext","drawImage","dataurl","toDataURL","onerror","removeTmpFile","indexOf","splice","checkPublicationType","Event","isValidUrl","includes","replace","tmpEmbedFile","bypassSecurityTrustResourceUrl","removeEmbedFiles","str","RegExp","providers","MatDialogRef","Inject","MAT_DIALOG_DATA","DomSanitizer","SwiperCore","use","Navigation","Pagination","FeedItemComponent","dialog","translate","isVisible","EventEmitter","imageLoaded","imageDataLoaded","blurBackgroundIndex","loadVisibilityControls","linkifiedTitle","sanitizedLinkify","isYoutube","youtubeID","getYoutubeID","ngAfterViewInit","observer","observe","visibleControl","nativeElement","ngOnDestroy","disconnect","clearInterval","visibleTimer","setInterval","shotTimer","emit","IntersectionObserver","entries","entry","active","intersectionRatio","rootMargin","threshold","onloadImage","onErrorImage","playVideo","videoplayer","play","bypassSecurityTrustHtml","linkify","re","match","www","mail","twitler","encodeURIComponent","checkVideoRender","onEditItem","swal","text","instant","open","panelClass","preConvertNumber","parseFloat","onRemoveItem","showCancelButton","confirmButtonText","cancelButtonText","confirm","error_1","deleted","toast","checkFileOrigin","MatDialog","TranslateService","Output","ViewChild","static","read","ElementRef","StreamPipe","domSanitizer","transform","arg","getVideoUri","getVideoThumb","getVideoId","bypassSecurityTrustStyle","bypassSecurityTrustUrl","Pipe","SafePipe","bypassSecurityTrustScript","Error","_NUMBER_FORMAT_REGEXP","LooseCurrencyPipe","_currencyPipe","currencyCode","symbolDisplay","digits","CurrencyPipe","PipesModule","NgModule","declarations","imports","exports","UserService","_super","tslib_1.__extends","usersChecked","baseUrl","getForms","getAllUsers","search","getUserData","idUser","getUserForm","getAdressByCep","cep","Content-Type","remove","saveData","idCliente","headerOptions","Authorization","put","BaseService","FeedCommentsComponent","asapService","userService","replyingComment","replyingResponse","limitCommentsTo","limitReplysTo","onLoadingLike","onLoadingReply","onLoadingComment","isMarking","getComments","orderBy","comment","likeForMe","like","subItemLike","likeData","likeForMeID","reply","replys","subItem","replyData","onReplyComment","onReplyResponse","handleShowAllReplyResponse","commentIdx","unmentionRemovedUsers","mentions","mentionsList","selected_users","notification","description","redirect","replyComment","deleteReply","sendLikeComment","loadMoreComments","loadMoreReplys","onEditReply","editedReply","onEdit","onEditComment","editedComment","updateComment","edited","updateReply","old_reply","mentionUser","AsapService","FeedActionsComponent","sharedForMe","onSendLike","onSendShared","deviceInfo","getLikes","getShareds","where","valueChanges","sharedForMeID","sendLike","create_at","commentData","copyToClipBoard","val","selBox","style","position","opacity","appendChild","select","execCommand","removeChild","success","sharePost","meta_data","urlShare","location","origin","ProductService","router","entityName","basePath","getResources","createProduct","createResource","categories","clientID","subCategories","category","subCategoryProducts","page","qryPage","mainProducts","getMyProducts","spotlightProducts","order","orderData","searchCep","checkUserExists","email","Router","AsapBaseService","ModalAnnounceComponent","productService","published","entity","newProduct","selectedProduct","loadCategory","loadMyProducts","alert","defaults","loadSubCategory","categoria_id","subCategory","addPicture","delPicture","categoryName","cat","find","subCategoryName","onSave","tempProductData","addPostOnFeed","loadSubCategories","id_categorie","myProducts","produtos","videoFilter","owner","fileGenerated","fire","uploadingVideo","checkUploading","checkIfHasEmbededVideo","imagesFiles_2","imagesFiles_1","imagesFiles_1_1","show","layout","FeedPublicationComponent","hideFilterByMe","feedCreated","users","disabled","selectedUsers","listType","getNewFeed","loadUsers","user_name","secure_url","selected_users_data","confirmShare","Swal","confirmed","openAnnounceModal","minHeight","maxHeight","closeOnNavigation","disableClose","selectUser","evt","checked","showSelected","openModal","newfeed","$","modal","getResource","ChannelService","isSubscriber","channelLibrary","channeGrouplLibrary","fileLibrary","fileGroupLibrary","callback","video_id","unlike","likev2","dados","unsubscribe","info","cancel","getPlaylists","getPlaylist","playlist_id","createPlaylist","playlist_name","deletePlaylist","deleteResource","addVideoPlaylist","updateChannel","updateResource","StoriesComponent","_channelService","storiesOptions","loop","mouseDrag","touchDrag","pullDrag","dots","navSpeed","navText","nav","responsive","0","items","500","config","navigation","clickable","autoHeight","breakpoints","slidesPerView","slidesPerGroup","spaceBetween","480","getChannels","channelArray","getNotificationForChannels","notificationDoc","notifications","notificationData","FeedPostsComponent","asapFeedBetaService","main","AutoCompleteComponent","userSelected","input","panelTop","offsetTop","offsetHeight","panelStart","offsetLeft","panelWidth","offsetWidth","selectionStart","mark","getMarkAtPosition","lastSearch","searching","onSelect","selected","shift","startPosition","endPosition","evento","dispatchEvent","selectionEnd","cursorPosition","words","startsWith","AsapFeedBetaModule","getOrCreateSessionData","component","condition","hasPermission","CommonModule","FormsModule","RouterModule","MatButtonModule","MatIconModule","MatMenuModule","MatListModule","MatCardModule","MatDialogModule","MatSelectModule","MatRadioModule","MatInputModule","MatTooltipModule","MatProgressBarModule","MatStepperModule","MatTabsModule","MomentModule","TranslateModule","InfiniteScrollModule","AsapSkeletonModule","NgxHmCarouselModule","OwlModule","CarouselModule","NgxSkeletonLoaderModule","PopoverModule","SwiperModule","MatAutocompleteModule","entryComponents","AsapFeedBetaRoting"],"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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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 (g && (g = 0, op[0] && (_ = 0)), _) 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 var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(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, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, 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\n/** @deprecated */\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\n/** @deprecated */\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 __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\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\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\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 (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, 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, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AsapFeedBetaService {\n public announce = false;\n public publication = true;\n public stories = true;\n public query = null;\n public options = {};\n constructor() {\n console.log('[AsapFeedBetaService] ->', this);\n }\n}\n","const prefix = (localStorage.getItem('feed_prefix')) ? localStorage.getItem('feed_prefix') : '';\n\nexport function path() {\n return {\n images: `${prefix}images`,\n feed: `${prefix}feed`,\n likes: `${prefix}likes`,\n shareds: `${prefix}shareds`\n }\n}","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { path } from '../constants/constants';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AsapFeedService {\n public clientFirebaseServer = localStorage.getItem('firebase_server_id');\n private baseUrlAPI;\n private client_id;\n\n constructor(\n private http: HttpClient\n ) {\n this.baseUrlAPI = `https://us-central1-${this.clientFirebaseServer}.cloudfunctions.net/api`;\n this.client_id = localStorage.getItem('client');\n }\n\n public getFeed(feed_id, user=null, query = null, filterByMe: boolean = false) {\n let limit = 6;\n let url;\n let me = '';\n\n if (filterByMe) {\n me = 'filterByMe&'\n }\n\n if (!query) {\n url = `${this.baseUrlAPI}/mobile/feed/${feed_id}?${me}limit=${limit}&feed_path=${path().feed}&client_id=${this.client_id}`\n }\n else {\n url = `${this.baseUrlAPI}/mobile/feed/${feed_id}?${me}limit=${limit}&feed_path=${path().feed}&client_id=${this.client_id}`;\n for (const key in query) {\n url = `${url}&${key}=${query[key]}`;\n }\n }\n\n return this.http.post(url,{user: user});\n }\n\n public createFeed(data) {\n return this.http.post(`${this.baseUrlAPI}/feed?feed_path=${path().feed}&client_id=${this.client_id}`, data);\n }\n\n public getMoreFeed(limit, last_documment, user=null, query = null, filterByMe = false) {\n let url\n let me = '';\n let payload = null;\n\n console.log(\"[getMoreFeed] Starting...\", limit, last_documment, user, query, filterByMe);\n\n if (filterByMe) {\n me = '&filterByMe'\n }\n\n if (query && query.searchBy && query.searchValue) {\n url = `${this.baseUrlAPI}/mobile/feed?${me}limit=${limit}&last_doc=${last_documment}&searchBy=${query.searchBy}&searchValue=${query.searchValue}&feed_path=${path().feed}&client_id=${this.client_id}`\n }\n else {\n url = `${this.baseUrlAPI}/mobile/feed?${me}limit=${limit}&last_doc=${last_documment}&feed_path=${path().feed}&client_id=${this.client_id}`\n }\n\n if (user) {\n payload = {\n user\n }\n }\n\n console.log(\"[getMoreFeed] HTTP...\", url, payload);\n return this.http.post(url, payload);\n }\n\n public sendComment(feed_id, data) {\n return this.http.post(`${this.baseUrlAPI}/comment/${feed_id}`, data);\n }\n\n public deleteComment(feed_id, comment_id) {\n return this.http.delete(`${this.baseUrlAPI}/comment/${feed_id}/${comment_id}`);\n }\n\n public sendReplyComment(feed_id, comment_id, data) {\n return this.http.post(`${this.baseUrlAPI}/comment/reply/${feed_id}/${comment_id}`, data);\n }\n\n public deleteReplyComment(feed_id, comment_id, reply_id) {\n return this.http.delete(`${this.baseUrlAPI}/comment/reply/${feed_id}/${comment_id}/${reply_id}`);\n }\n\n public likeComment(feed_id, comment_id, data) {\n return this.http.post(`${this.baseUrlAPI}/comment/like/${feed_id}/${comment_id}`, data);\n }\n\n public likePost(feed_id, data) {\n return this.http.post(`${this.baseUrlAPI}/like/${feed_id}`, data);\n }\n\n public deleteLikeComment(feed_id, comment_id, like_id) {\n return this.http.delete(`${this.baseUrlAPI}/comment/like/${feed_id}/${comment_id}/${like_id}`);\n }\n\n public sendNotification(user_id, type, data) {\n console.log('[SendNotification] ->', user_id, type, data);\n return this.http.post(`${this.baseUrlAPI}/notification/${user_id}/${type}`, data);\n }\n\n\n\n}\n","import { Component, OnInit, Input, HostListener, OnChanges, SimpleChanges } from '@angular/core';\nimport { AsapFeedService } from './services/asap-feed.service';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { ActivatedRoute } from '@angular/router';\nimport { AsapFeedBetaService } from './asap-feed-beta.service';\nimport { Global } from 'asap-crud';\nimport { filter } from 'rxjs/operators';\n\n@Component({\n selector: 'asap-feed-beta',\n templateUrl: './asap-feed-beta.component.html',\n styles: ['./asap-feed.beta.componente.scss']\n})\nexport class AsapFeedBetaComponent implements OnInit, OnChanges {\n\n public hasFeed = true;\n public loading = true;\n\n @Input() id;\n @Input() ignoreControl = false;\n @Input() settings;\n\n public hasID = false;\n\n public stories = true;\n public announce = false;\n public publication = true;\n public query = null;\n public feedID;\n public feeds;\n public paginate;\n public topPosToStartShowing = 400;\n public showToTopButton = false;\n public isSinglePost = false;\n\n public filterByMe = false;\n\n constructor(\n private feedService: AsapFeedService,\n public db: AngularFirestore,\n public route: ActivatedRoute,\n public controlService: AsapFeedBetaService,\n public global: Global,\n ) {\n this.loading = true;\n this.query = null;\n }\n\n ngOnInit() {\n if (!this.ignoreControl) {\n this.announce = this.controlService.announce;\n this.stories = this.controlService.stories;\n this.publication = this.controlService.publication;\n this.query = this.controlService.query;\n }\n\n this.route.params.subscribe(param => {\n if (param) {\n if (param.feed_id) {\n this.feedID = param.feed_id;\n this.isSinglePost = true;\n\n setTimeout(() => {\n this.getFeed(this.feedID);\n }, 600);\n }\n else {\n this.getFeed();\n }\n }\n });\n this.checkFeedChange();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.feedID) {\n setTimeout(() => {\n this.getFeed(this.feedID);\n }, 600);\n }\n\n if (changes.id) {\n if (this.id) {\n this.hasID = true;\n if (!this.controlService.query) this.controlService.query = {};\n this.controlService.query.searchBy = 'user_info.id';\n this.controlService.query.searchValue = this.id + '&typeValue=number';\n }\n }\n }\n\n public getFeed(feed_id = '') {\n this.feeds = null;\n this.loading = true;\n this.feedService.getFeed(feed_id, this.global.loggedUser(), this.query, this.filterByMe).subscribe((response: any) => {\n this.feeds = response.data;\n this.paginate = response.pagination;\n this.loading = false;\n this.hasFeed = (this.feeds.length > 0);\n });\n }\n\n public getMore() {\n if (this.paginate.next_document) {\n this.loading = true;\n this.feedService.getMoreFeed(5, this.paginate.next_document, this.global.loggedUser(), this.query, this.filterByMe).subscribe((response: any) => {\n response.data.map(item => {\n if (this.permitted(item)) {\n this.feeds.push(item);\n }\n });\n\n this.paginate = response.pagination;\n this.loading = false;\n });\n }\n }\n\n public checkFeedChange() {\n // const collection = this.db.collection(path().feed, ref => {\n // return ref.orderBy('updated_at', 'desc');\n // });\n\n // collection.snapshotChanges().subscribe(response => {\n // console.log(\"[checkFeedChange]\",response);\n // if (response) {\n // setTimeout(() => {\n // console.log(\"[checkFeedChange]\")\n // this.getFeed(this.feedID);\n // }, 600);\n // }\n // })\n }\n\n @HostListener('window:scroll')\n checkScroll() {\n const scrollPosition = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n if (scrollPosition >= this.topPosToStartShowing) {\n this.showToTopButton = true;\n } else {\n this.showToTopButton = false;\n }\n }\n\n gotoTop() {\n window.scroll({\n top: 0,\n left: 0,\n behavior: 'smooth'\n });\n }\n\n permitted(post) {\n if (post.permission) {\n if (post.permission.length > 0) {\n let result = false;\n const user = this.global.loggedUser();\n if (user) {\n if (post.user_info && post.user_info.id == user.id) {\n result = true;\n }\n else if (user.extras) {\n const extras = user.extras[0];\n for (const perm of post.permission) {\n if ((perm.field == 'multi-conta') && (perm.value == user.client_id)) {\n result = true;\n break;\n }\n else if (extras[perm.field] == perm.value) {\n result = true;\n break;\n }\n }\n }\n }\n return result;\n }\n }\n return true;\n }\n\n public onNewFeed(id) {\n console.log('[onNewFeed]', id);\n this.feedService.getFeed(id).subscribe((response: any) => {\n let index = this.feeds.length;\n\n for (const feed of response.data) {\n feed.focus = true;\n }\n\n for (const feed of this.feeds) {\n feed.focus = false;\n }\n\n for (let i = 0; i < this.feeds.length; i++) {\n console.log('[onNewFeed] Feed', this.feeds[i]);\n if (!this.feeds[i].isHighlighted) {\n index = i;\n break;\n }\n }\n\n this.feeds = [\n ... this.feeds.slice(0, index),\n ... response.data,\n ... this.feeds.slice(index)\n ];\n\n setTimeout(() => {\n const el = document.getElementsByClassName('focus-on-me')[0];\n el.scrollIntoView({ behavior: 'smooth' });\n }, 500);\n\n });\n }\n\n public sendVisible(item) {\n console.log(\"[sendVisible] marcando como visualizado\", item);\n const user = this.global.loggedUser();\n\n let postData = {\n post_id: item.id,\n title: item.title,\n created_at: item.updated_at\n };\n\n let data = {\n post_id: item.id,\n created_at: Date.now(),\n updated_at: Date.now(),\n user_info: {\n id: user.id,\n updated_at: Date.now(),\n name: user.name,\n picture: user.picture\n }\n };\n\n const documentID = `feed-view/${item.id}`;\n const document = this.db.doc(documentID);\n document.set(postData).then((response) => {\n const documentID = `feed-view/${item.id}/views/${user.id}`;\n const document = this.db.doc(documentID);\n document.get().subscribe((doc) => {\n if (!doc.exists) {\n doc.ref.set(data).then((response) => {\n console.log(\"[sendVisible] marcado como visualizado\", response);\n });\n }\n else {\n console.log(\"[sendVisible] já foi marcado como visualizado\", doc);\n }\n });\n this.db.collection(`${documentID}/history`).add(data);\n });\n }\n\n reload(filterByMe: any) {\n this.filterByMe = filterByMe;\n this.getFeed();\n }\n\n get isScrollDisabled() {\n return this.loading || \n this.paginate.count >= this.paginate.limit || \n this.isSinglePost || \n this.paginate.last_document === this.paginate.next_document\n }\n\n}\n","import { Component, Input, OnChanges, OnInit, QueryList, SimpleChanges, ViewChild, ViewChildren } from '@angular/core';\nimport { AsapFeedBetaService } from '../asap-feed-beta.service';\nimport { Global } from 'asap-crud';\nimport { AsapFeedBetaComponent } from '../asap-feed-beta.component';\n\n@Component({\n selector: 'asap-tab-feed',\n templateUrl: './asap-tab-feed.component.html',\n styleUrls: ['./asap-tab-feed.component.scss']\n})\nexport class AsapTabFeedComponent implements OnInit, OnChanges {\n\n @ViewChildren(AsapFeedBetaComponent) feeds!: QueryList<AsapFeedBetaComponent>;\n\n @Input() settings: any;\n\n public canShow = -1;\n\n constructor(\n public global: Global,\n public service: AsapFeedBetaService\n ) {\n console.log(\"[AsapTabFeedComponent]\", this.settings);\n }\n\n ngOnInit() {\n this.service.publication = false;\n this.service.stories = false;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.settings && this.settings) {\n const tabs = this.settings.tabs;\n \n // ✅ Se o cliente tem canal, prioriza o channel\n if (tabs.channel_list && tabs.channel_list.length) {\n this.feedLoad(tabs.channel);\n }\n // ✅ Caso não tenha canal, mantém a ordem original\n else if (tabs.allFeed) {\n this.feedLoad(tabs.allFeed);\n } else if (tabs.feed) {\n this.feedLoad(tabs.feed);\n } else if (tabs.feed_users) {\n this.feedLoad(tabs.feed_users);\n }\n }\n }\n \n\n public onChangeTab(event: any) {\n this.feedLoad(event.tab.textLabel);\n }\n\n public feedLoad(tabName: string) {\n this.canShow = -1;\n if (tabName == this.settings.tabs.channel) {\n setTimeout(() => {\n this.service.query = {\n searchBy: 'channel_id',\n searchValue: this.settings.tabs.channel_list.map(c => c.channel_id).join(',')\n }\n this.canShow = 0;\n }, 100);\n }\n if (tabName == this.settings.tabs.feed) {\n setTimeout(() => {\n this.service.query = {\n searchBy: 'user_info.id',\n searchValue: this.global.loggedUser().id,\n typeValue: 'number'\n }\n this.canShow = 1;\n }, 100);\n }\n if (tabName == this.settings.tabs.feed_users) {\n setTimeout(() => {\n this.service.query = {\n searchBy: 'user_info.id',\n searchValue: 'all'\n }\n this.canShow = 2;\n }, 100);\n }\n if (tabName == this.settings.tabs.allFeed) {\n setTimeout(() => {\n this.service.query = {}\n this.canShow = 3;\n }, 100);\n }\n }\n\n public onNewFeed(id: any) {\n console.log('Chegou evento feedCreated com ID:', id);\n \n if (this.feeds) {\n this.feeds.forEach((feed) => {\n feed.getFeed();\n });\n }\n }\n \n\n}\n","import { HttpClient, HttpHeaders, HttpParams, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class StreamService {\n\n public streamVideoPath: string;\n\n constructor(public http: HttpClient) {\n if (localStorage.getItem('loggedUser')) {\n const session = JSON.parse(localStorage.getItem('loggedUser'));\n this.streamVideoPath = (session.data.link_company) ? session.data.link_company : session.data.link;\n console.log('streamVideoPath', this.streamVideoPath);\n }\n }\n\n private getHeaders() {\n let headers = {\n 'Accept': 'application/json'\n };\n if (localStorage.getItem('token')) {\n headers['Authorization'] = localStorage.getItem('token');\n }\n return headers;\n }\n\n public status(id: string): any {\n return this.http.get(this.streamVideoPath + 'videos/' + id, { headers: this.getHeaders() });\n }\n\n public uploadFile(data: any): any {\n const formData = new FormData();\n formData.append('file', data);\n\n let client_id = localStorage.getItem('client');\n\n const req = new HttpRequest('POST', 'http://api.tecnologiaasap.com.br/api/cloudinary/upload', formData, {\n reportProgress: true,\n responseType: 'json',\n headers: new HttpHeaders(this.getHeaders()),\n params: new HttpParams().set('client_id', client_id)\n });\n\n console.log('RESPONSE UPLOAD', req);\n return this.http.request(req);\n }\n\n uid() {\n return this.s4() + this.s4() + '-' + this.s4() + '-' + this.s4() + '-' +\n this.s4() + '-' + this.s4() + this.s4() + this.s4();\n }\n\n s4() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n\n}\n","export class UserInfo {\n id: number = null;\n name: string = null;\n updated_at: any = null;\n picture: string = null;\n}\n\nexport class ProductModel {\n cod: number = null;\n descr: string = null;\n hashtag: string = null;\n id: number = null;\n produto: string = null;\n parcela: string = null;\n qtdMinimo: number = null;\n valorAte: number = null;\n valorDe: number = null;\n adaptation: string = null;\n desconto: number = null;\n fotos = [];\n}\n\nexport class FilesModel {\n url: string = null;\n type: string = null;\n status: number = 1;\n thumb_rendering = false;\n video_rendering = false;\n video_low_rendering = false;\n name: string = null;\n isCloudinary:boolean = false;\n}\n\nexport class FilesModelEdit {\n url: string = null;\n type: string = null;\n status: number = null;\n thumb_rendering = false;\n video_rendering = false;\n video_low_rendering = false;\n name: string = null;\n new:boolean = true\n}\n\nexport class FeedModel {\n id: string = null;\n ref: string = null;\n status: boolean = true;\n product: ProductModel = new ProductModel();\n type: string = 'post';\n source: string = 'web';\n likes = 0;\n shareds = 0;\n user_info: UserInfo = new UserInfo();\n updated_at: any = null;\n title: string = null;\n files: Array<FilesModel> = [];\n selected_users: any;\n selected_users_data: any;\n newfeed: boolean;\n}","import { Injectable } from '@angular/core';\nimport { AngularFireStorage, AngularFireUploadTask } from '@angular/fire/storage';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { FirebaseApp } from '@angular/fire';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { AsapFeedService } from './asap-feed.service';\nimport { Global } from 'asap-crud';\n\n@Injectable()\n\nexport class UtilsService {\n\n public percentage: Observable<number>;\n public task: AngularFireUploadTask;\n public snapshot: Observable<any>;\n public lastDoc;\n\n constructor(\n public firebaseStorage: AngularFireStorage,\n public db: AngularFirestore,\n public firebase: FirebaseApp,\n public feedService:AsapFeedService,\n public global: Global\n ) { }\n\n public uploadFile(fileName: string, base64: string) {\n console.log('TO SUBINDO', fileName);\n try {\n let correctBase64 = base64;\n const ref = this.firebaseStorage.ref(fileName);\n this.task = ref.putString(correctBase64, 'data_url');\n this.percentage = this.task.percentageChanges();\n this.snapshot = this.task.snapshotChanges();\n } catch (error) {\n console.log(`ERRO DO SUBINDO`, error);\n }\n }\n\n getFireStorageURL(id: string) {\n return this.firebaseStorage.ref(id).getDownloadURL();\n }\n\n async deleteFireStorage(id: string) {\n return await this.firebaseStorage.ref(id).delete().toPromise();\n }\n\n uid() {\n return this.s4() + this.s4() + '-' + this.s4() + '-' + this.s4() + '-' +\n this.s4() + '-' + this.s4() + this.s4() + this.s4();\n }\n\n s4() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n\n isUrl(s: string): boolean {\n const regexp = /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/;\n return regexp.test(s);\n }\n\n public sendNotification(data, user_destination, type) {\n\n console.log('Destinatario', user_destination);\n console.log('Remetente', this.global.loggedUser());\n\n if (user_destination.id != this.global.loggedUser().id) {\n this.feedService.sendNotification(user_destination.id,type, data).subscribe( response => {\n console.log('Retorno Notificacao', response);\n });\n }\n }\n\n}\n","import { Component, OnInit, Inject } from '@angular/core';\nimport { Global } from 'asap-crud';\nimport { FilesModel, FeedModel, FilesModelEdit } from '../../models/feed.model';\nimport { StreamService } from '../../services/stream.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { classToPlain } from 'class-transformer';\nimport { path } from '../../constants/constants';\nimport { UtilsService } from '../../services/utils.service';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'lib-feed-modal-item-edit',\n templateUrl: './feed-modal-item-edit.component.html',\n styleUrls: ['../../asap-feed.beta.componente.scss','./feed-modal-item-edit.component.scss',],\n providers: [StreamService]\n})\nexport class FeedModalItemEditComponent implements OnInit {\n\n public showAnnouncePublication = false;\n public notAnnounce;\n public openAnnounceModal;\n public newProduct;\n public ExpandImg;\n // \n public title;\n public tmpFileArray: Array<FilesModelEdit>;\n public progress;\n public uploading;\n public type;\n public videoSendedID;\n public embedFile;\n public tmpEmbedFile;\n\n constructor(\n public dialogRef: MatDialogRef<FeedModalItemEditComponent>,\n @Inject(MAT_DIALOG_DATA) public item,\n public global: Global,\n public streamService: StreamService,\n public sanitizer: DomSanitizer,\n public utilsService: UtilsService,\n public db: AngularFirestore\n ) { }\n\n ngOnInit() {\n if (this.item) {\n this.title = this.item.title;\n this.type = this.item.type;\n this.tmpFileArray = this.item.files;\n console.log('Feed Modal ->', this.item);\n }\n }\n\n close() {\n this.dialogRef.close();\n }\n\n async uploadFile(event: any) {\n for (const file of event.target.files) {\n\n const tmpFile: FilesModelEdit = new FilesModelEdit();\n tmpFile.type = this.getTypeByMimeType(file.type);\n tmpFile.status = 0;\n tmpFile.thumb_rendering = false;\n tmpFile.video_rendering = false;\n tmpFile.video_low_rendering = false;\n\n let error = false;\n if (this.getTypeByMimeType(file.type) === 'video' && this.tmpFileArray.filter((tmp: any) => this.getTypeByMimeType(tmp.type) === 'video').length > 0) {\n this.global.toastService.error({\n title: 'Ops',\n message: 'Você só pode enviar um vídeo por Post'\n });\n error = true;\n }\n\n if (this.getTypeByMimeType(file.type) === 'image' && this.tmpFileArray.filter((tmp: any) => this.getTypeByMimeType(tmp.type) === 'image').length > 4) {\n this.global.toastService.error({\n title: 'Ops',\n message: 'Você pode utilizar até no máximo 5 imagens no seu Post'\n });\n error = true;\n }\n\n if (!error) {\n console.log('File Sended',file);\n // **********************************************\n // !file.name.includes('firebasestorage')\n // Este trecho de código, verifica se o arquivo que está no tmpFileArray já foi enviado para evitar\n // o reenvio\n // ***********************************************\n if (this.getTypeByMimeType(file.type) === 'image' && !file.new) {\n console.log('File do Upload ->', file);\n if (file.type == 'image/gif') {\n tmpFile.url = `${this.streamService.uid()}.gif`;\n tmpFile.name = await this.readGIF(file);\n this.tmpFileArray.push(tmpFile);\n }\n\n else {\n const getExtname = file.name.split('.');\n const extname = getExtname[getExtname.length - 1];\n\n tmpFile.url = `${this.streamService.uid()}.${extname}`;\n tmpFile.name = await this.resizeImages(file, 800);\n this.tmpFileArray.push(tmpFile);\n }\n }\n\n else if (this.getTypeByMimeType(file.type) === 'video' && !file.new) {\n this.uploading = true;\n console.log('Realizar Upload de Video', tmpFile);\n let reader = file\n if (reader) {\n let blobURL = URL.createObjectURL(reader);\n tmpFile.name = blobURL as any;\n this.tmpFileArray.push(tmpFile);\n }\n\n this.uploading = true;\n await this.streamService.uploadFile(file).subscribe(\n response => {\n if (response['loaded']) {\n tmpFile.status = ((response['loaded'] * 100) / response['total']).toFixed(0) as any;\n this.progress = tmpFile.status;\n console.log('Response', tmpFile);\n }\n\n if (response['body']) {\n tmpFile.url = response['body']['uuidVideo'];\n this.videoSendedID = tmpFile.url;\n this.uploading = false;\n this.progress = null;\n\n }\n }\n )\n console.log('tmpFile', tmpFile);\n }\n }\n }\n }\n\n share(): any {\n let data = null;\n data = this.item;\n delete data.likes;\n delete data.comments;\n data.title = this.title;\n\n\n if (this.tmpFileArray || this.tmpFileArray.length > 0) {\n data.files = this.tmpFileArray;\n data.files.map(item => {\n if (item.type === 'video' && !item.video_rendering) {\n console.log('Existe um video no Feed', item);\n item.video_rendering = false;\n item.video_low_rendering = false;\n item.thumb_rendering = false;\n\n // Setando o ID do Feed igual ao ID do vídeo\n data.ref = item.url;\n data.status = false;\n this.streamService.status(item.url).subscribe((res: any) => {\n item.video_rendering = !res.p480;\n item.video_low_rendering = !res.p480_low;\n item.thumb_rendering = !res.thumb;\n });\n }\n })\n }\n\n this.publish(data);\n\n }\n\n public publish(data: FeedModel) {\n let count = 0;\n if (this.type == 'embed') {\n let fileEmbed: any = {\n name: this.embedFile,\n url: this.embedFile,\n type: 'embed'\n }\n\n this.tmpFileArray.push(fileEmbed);\n }\n if (this.tmpFileArray && this.tmpFileArray.length > 0) {\n const images = this.tmpFileArray.filter(\n (image: any) => this.getTypeByMimeType(image.type) === 'image' && image.new\n );\n\n const step = 98 / images.length;\n\n if (images && images.length > 0) {\n console.log('Imagens para Publicar ->', images);\n\n for (const image of images) {\n console.log('Imagem ->', image);\n\n setTimeout(() => {\n this.utilsService.uploadFile(`images/${image.url}`, image.name);\n\n this.utilsService.percentage.subscribe(percent => {\n image.status = percent;\n image.name = image.url;\n });\n\n this.utilsService.task.snapshotChanges().subscribe(\n async snap => {\n if (snap.bytesTransferred === snap.totalBytes) {\n count++;\n this.progress += step;\n const index = data.files.findIndex(item => item.name === image.name);\n\n this.utilsService.getFireStorageURL(`images/${data.files[index].name}`).subscribe((imageURL) => {\n console.log('Image File Url ->', imageURL);\n data.files[index].name = imageURL;\n });\n\n delete data.files[index].url;\n\n if (count == images.length) {\n console.log('Imagens Pos Processaento ->', data.files);\n const collection = this.db.collection(path().feed).doc(this.item.id)\n collection.update(classToPlain(data)).then( response => {\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n this.close();\n });\n }\n }\n });\n })\n }\n }\n else {\n const collection = this.db.collection(path().feed).doc(this.item.id);\n collection.update(classToPlain(data)).then( response => {\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n this.close();\n });\n }\n }\n else {\n const collection = this.db.collection(path().feed).doc(this.item.id);\n collection.update(classToPlain(data)).then( response => {\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n this.close();\n });\n }\n }\n\n // publish(data: FeedModel) {\n // let image;\n\n // console.log('Publish()', 1, data);\n // this.uploading = true;\n // this.progress = 0;\n\n\n // let count = 0;\n\n // if (this.type == 'embed') {\n // let fileEmbed: any = {\n // name: this.embedFile,\n // url: this.embedFile,\n // type: 'embed'\n // }\n\n // this.tmpFileArray.push(fileEmbed);\n // }\n\n // if (this.type != 'embed') {\n // if (this.tmpFileArray && this.tmpFileArray.length > 0) {\n\n // const imagesFiles = this.tmpFileArray.filter(\n // (tmp: any) => this.getTypeByMimeType(tmp.type) === 'image'\n // );\n\n\n // const step = 98 / imagesFiles.length;\n\n // if (imagesFiles.length > 0) {\n // console.log('Publish()', 3, imagesFiles)\n // for (const file of imagesFiles) {\n // if (file.new) {\n // setTimeout(() => {\n // this.utilsService.uploadFile(`images/${file.url}`, file.name);\n // this.utilsService.percentage.subscribe(percent => {\n // file.status = percent;\n // // file.name = file.url;\n // delete file.new;\n // console.log(\"File\", file);\n // });\n\n // this.utilsService.task.snapshotChanges().subscribe(\n // async snap => {\n // if (snap.bytesTransferred === snap.totalBytes) {\n // count++;\n // this.progress += step;\n // console.log('PROGRESS', this.progress);\n // const index = data.files.findIndex(item => item.url === file.url);\n\n // if ((!image) && (data.files[index])) {\n // this.utilsService.getFireStorageURL(`images/${data.files[index].url}`).subscribe((imageURL) => {\n // image = imageURL;\n // });\n\n // }\n\n // data.files[index].name = data.files[index].url;\n\n\n // console.log('Data Files ->',data.files);\n // if (count == imagesFiles.length) {\n\n // const collection = this.db.collection(path().feed).doc(this.item.id)\n // collection.update(classToPlain(data));\n\n // this.title = '';\n // this.progress = null;\n // this.uploading = null;\n // this.tmpFileArray = [];\n\n // console.log('Publish()', 4)\n // }\n // }\n // },\n // error => {\n // console.error('Error', error);\n // })\n // });\n // }\n // }\n // }\n // else {\n // console.log('Publish()', 5)\n // console.log(data)\n\n // const collection = this.db.collection(path().feed).doc(this.item.id);\n // collection.update(classToPlain(data));\n\n // this.title = '';\n // this.progress = null;\n // this.uploading = null;\n // this.tmpFileArray = [];\n\n\n\n // }\n // }\n // else {\n // console.log('Publish()', 5);\n // console.log(data);\n\n // const collection = this.db.collection(path().feed).doc(this.item.id);\n // collection.update(classToPlain(data));\n\n // this.title = '';\n // this.progress = null;\n // this.uploading = null;\n // this.tmpFileArray = [];\n // }\n // }\n\n // else {\n // data.files = this.tmpFileArray;\n\n // console.log('Publish(Embed)', 6);\n // console.log(data);\n\n // const collection = this.db.collection(path().feed).doc(this.item.id);\n // collection.update(classToPlain(data));\n\n // this.title = '';\n // this.progress = null;\n // this.uploading = null;\n // this.tmpFileArray = [];\n // }\n\n\n // console.log('Publish()', 0, path().feed);\n\n // const collection = this.db.collection(path().feed).doc(this.item.id); \n // collection.update(classToPlain(data));\n\n // this.title = '';\n // this.progress = null;\n // this.uploading = null;\n // this.tmpFileArray = [];\n // this.global.toast('Publicação criada com sucesso.')\n // this.close();\n // }\n\n getTypeByMimeType(mime: string): string {\n const split = mime.split('/');\n return split[0];\n }\n\n resizeImages(file: any, width: number): Promise<string> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const MAX_WIDTH = width;\n const MAX_HEIGHT: any = 1334;\n\n let reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = (e: any) => {\n img.src = e.target.result;\n img.onload = () => {\n const scale = MAX_WIDTH / img.width;\n const canvas = document.createElement(\"canvas\");\n canvas.height = scale * img.height;\n\n canvas.width = MAX_WIDTH;\n let ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n\n console.log('IMG', img.width, img.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n let dataurl = canvas.toDataURL(file.type, 0.65);\n console.log('CANVAS ->', canvas.width, canvas.height);\n return resolve(dataurl);\n }\n }\n\n reader.onerror = reject;\n });\n\n }\n\n readGIF(file: any): Promise<any> {\n return new Promise((resolve, reject) => {\n\n let reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = (e: any) => {\n return resolve(reader.result);\n }\n\n reader.onerror = reject;\n });\n\n }\n\n removeTmpFile(tmpFile: any): void {\n const index = this.tmpFileArray.indexOf(tmpFile);\n this.tmpFileArray.splice(index, 1);\n }\n\n checkPublicationType(title) {\n console.log('Event ->', Event);\n if (title.length && title.length > 35) {\n if (this.isValidUrl(title)) {\n console.log('checkPublicationType', title);\n if (title.includes('youtube')) {\n this.tmpFileArray = [];\n this.uploading = true;\n this.type = 'embed';\n this.uploading = false;\n this.embedFile = title.replace('watch?v=', 'embed/');\n this.tmpEmbedFile = this.sanitizer.bypassSecurityTrustResourceUrl(this.embedFile);\n }\n else if (title.includes('spotify')) {\n this.tmpFileArray = [];\n this.uploading = true;\n this.type = 'embed';\n this.embedFile = title.replace('/episode', '/embed-podcast/episode');\n this.tmpEmbedFile = this.sanitizer.bypassSecurityTrustResourceUrl(this.embedFile);\n this.uploading = false;\n }\n\n let fileEmbed: any = {\n name: this.embedFile,\n url: this.embedFile,\n type: 'embed'\n }\n\n this.tmpFileArray.push(fileEmbed);\n }\n }\n }\n\n removeEmbedFiles() {\n this.title = \"\";\n this.embedFile = \"\";\n this.type = \"post\";\n this.tmpFileArray = [] \n }\n\n isValidUrl(str) {\n var pattern = new RegExp('^(https?:\\\\/\\\\/)?' + // protocol\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|' + // domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*' + // port and path\n '(\\\\?[;&a-z\\\\d%_.~+=-]*)?' + // query string\n '(\\\\#[-a-z\\\\d_]*)?$', 'i'); // fragment locator\n return !!pattern.test(str);\n }\n\n}\n","import { Component, OnInit, Input, ViewChild, ElementRef, OnDestroy, AfterViewInit, Output, EventEmitter } from '@angular/core';\nimport { StreamService } from '../services/stream.service';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { Global } from 'asap-crud';\nimport { FeedModalItemEditComponent } from '../feed-publication/feed-modal-item-edit/feed-modal-item-edit.component';\nimport { path } from '../constants/constants';\nimport { UtilsService } from '../services/utils.service';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport SwiperCore, { Navigation, Pagination } from 'swiper';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nSwiperCore.use([Navigation, Pagination]);\n\n@Component({\n selector: 'app-feed-item',\n templateUrl: './feed-item.component.html',\n styleUrls: ['../asap-feed.beta.componente.scss', './feed-item.component.scss'],\n providers: [StreamService]\n})\nexport class FeedItemComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @Input() item;\n @Input() settings;\n @Input() owner;\n @Output() isVisible = new EventEmitter();\n @ViewChild('videoPlayer', { static: true }) videoplayer: ElementRef\n @ViewChild('visibleControl', { static: false, read: ElementRef }) visibleControl;\n\n public currentIndex;\n public imageLoaded = false;\n public imageDataLoaded = false;\n public currentCarrouselIndex;\n public blurBackgroundIndex = Math.floor((Math.random() * 5) + 1);\n public observer;\n public visibleTimer;\n public shotTimer;\n\n constructor(\n public streamService: StreamService,\n public db: AngularFirestore,\n public global: Global,\n public dialog: MatDialog,\n public service: UtilsService,\n public translate: TranslateService,\n public sanitizer: DomSanitizer\n ) { }\n\n ngOnInit() {\n this.loadVisibilityControls();\n this.item.linkifiedTitle = this.sanitizedLinkify(this.item.title);\n\n if (this.item.files && this.item.files.length > 0) {\n this.item.files.map(feed => {\n if (feed.url && feed.url.includes('youtube')) {\n feed.isYoutube = true;\n let youtubeID = this.getYoutubeID(feed.url);\n feed.url = `https://www.youtube.com/embed/${youtubeID}`;\n }\n })\n }\n\n console.log('ITEM ->', this.item);\n }\n\n ngAfterViewInit(): void {\n this.observer.observe(this.visibleControl.nativeElement);\n }\n\n ngOnDestroy(): void {\n this.observer.disconnect();\n clearInterval(this.visibleTimer);\n }\n\n public loadVisibilityControls() {\n this.visibleTimer = setInterval(() => {\n this.shotTimer--;\n if (this.shotTimer == 0) {\n this.isVisible.emit(this.item);\n clearInterval(this.visibleTimer);\n this.observer.disconnect();\n }\n }, 1000);\n\n const options = {\n rootMargin: '0px',\n threshold: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]\n };\n\n this.observer = new IntersectionObserver((entries, observer) => {\n entries.forEach(entry => {\n this.shotTimer = -1;\n this.item.active = false;\n if (entry.intersectionRatio == 1) {\n this.shotTimer = 5;\n }\n });\n }, options);\n }\n\n public onloadImage(event) {\n this.imageLoaded = true;\n this.imageDataLoaded = true;\n }\n\n public onErrorImage(event) {\n }\n\n public playVideo(event) {\n if (this.videoplayer) {\n this.videoplayer.nativeElement.play();\n }\n }\n\n public sanitizedLinkify(str) {\n const sanitized = this.sanitizer.bypassSecurityTrustHtml(this.linkify(str));\n return sanitized;\n }\n\n public linkify(str) {\n var re: any;\n re = [\n \"\\\\b((?:https?|ftp)://[^\\\\s\\\"'<>]+)\\\\b\",\n \"\\\\b(www\\\\.[^\\\\s\\\"'<>]+)\\\\b\",\n \"\\\\b(\\\\w[\\\\w.+-]*@[\\\\w.-]+\\\\.[a-z]{2,6})\\\\b\",\n \"#([a-z0-9]+)\"];\n re = new RegExp(re.join('|'), \"gi\");\n\n if (str) {\n return str.replace(re, function (match, url, www, mail, twitler) {\n if (url)\n return \"<a class='text-primary' target='_blank' href=\\\"\" + url + \"\\\">\" + url + \"</a>\";\n if (www)\n return \"<a class='text-primary' href=\\\"http://\" + www + \"\\\">\" + www + \"</a>\";\n if (mail)\n return \"<a class='text-primary' href=\\\"mailto://\" + mail + \"\\\">\" + mail + \"</a>\";\n if (twitler)\n return \"<a class='text-primary' href=\\\"portal/search/\" + encodeURIComponent('#' + twitler) + \"\\\">#\" + twitler + \"</a>\";\n // return \"<a class='text-primary' href=\\\"#\\\">#\" + twitler + \"</a>\";\n\n // shouldnt get here, but just in case\n return match;\n });\n }\n }\n\n public checkVideoRender(item) {\n\n console.log('videoRender ->', item);\n this.streamService.status(item).subscribe((res: any) => {\n console.log('checkVideoRender', res);\n })\n }\n\n public onEditItem() {\n console.log(\"[onEditItem]\", this.item);\n if (this.item.channel_id) {\n this.global.swal({\n type: \"warning\",\n text: this.translate.instant('ThisFeedCanOnlyBeEditedOnChannel')\n });\n }\n else {\n // Preparar feed para editar\n let feed;\n feed = this.item;\n delete feed.comments;\n delete feed.likes;\n \n feed.files.map(file => {\n file.new = false;\n });\n \n this.dialog.open(FeedModalItemEditComponent, {\n width: '600px',\n data: feed,\n panelClass: 'modal-feed-publication'\n })\n }\n }\n\n preConvertNumber(value) {\n return parseFloat(value);\n }\n\n public onRemoveItem(item) {\n this.global.swal({\n title: 'Você realmente deseja remover este Post?',\n text: 'Você não poderá reverter essa ação depois de confirmado',\n type: \"warning\",\n showCancelButton: true,\n confirmButtonText: \"Sim\",\n cancelButtonText: \"Não\"\n }).then(async confirm => {\n if (confirm.value) {\n const collection = this.db.collection(path().feed).doc(item.id);\n\n if (item.files && item.files.length > 0) {\n for (const file of item.files) {\n if (file.type === 'image') {\n if (file.name) {\n try {\n await this.service.deleteFireStorage(`${path().images}/${file.name}`);\n } catch (error) {\n console.log('Removendo um post com imagem não referenciada', error);\n }\n }\n }\n }\n }\n\n collection.delete();\n item.deleted = true;\n this.global.toast('Post removido com Sucesso');\n }\n });\n }\n\n checkFileOrigin(file) {\n\n }\n\n isYoutube(file) {\n console.log('IsYoutube ->', file);\n if (file.includes('youtube')) {\n return true;\n }\n return false;\n }\n\n getYoutubeID(url) {\n var regExp = /^.*((youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#&?]*).*/;\n var match = url.match(regExp);\n return (match && match[7].length == 11) ? match[7] : false;\n }\n\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeUrl, SafeStyle } from '@angular/platform-browser';\n\n@Pipe({name: 'stream'})\nexport class StreamPipe implements PipeTransform {\n\n public url: string;\n\n constructor(private domSanitizer: DomSanitizer) {\n if (localStorage.getItem('loggedUser')) {\n const session = JSON.parse(localStorage.getItem('loggedUser')).data;\n this.url = (session.link_company) ? session.link_company : session.link;\n }\n else {\n // Carregar vídeos no Feed caso o usuário não esteja logado\n let link = localStorage.getItem('streamURL');\n this.url = link;\n }\n\n }\n\n transform(param: string, arg?: string): SafeResourceUrl | string {\n if (arg === 'link') {\n return this.getVideoUri(param);\n }\n if (arg === 'thumb') {\n return this.getVideoThumb(param);\n }\n if (arg === 'id') {\n return this.getVideoId(param);\n }\n if (arg === 'fire') {\n return this.getFireStorageURL(param);\n }\n if (arg === 'styleThumbUrl') {\n return this.domSanitizer.bypassSecurityTrustStyle(`url(${this.getVideoThumb(param)})`);\n }\n if (arg === 'backgroundImage') {\n return this.domSanitizer.bypassSecurityTrustStyle(`url(${param}`);\n }\n \n return param;\n }\n\n getVideoThumb(url: string): SafeResourceUrl {\n return this.url + 'videos/thumb/' + this.getVideoId(url);\n }\n\n getVideoUri(url: string): SafeResourceUrl {\n return this.domSanitizer.bypassSecurityTrustResourceUrl(this.url + 'videos/' + this.getVideoId(url) + '/480_low');\n }\n\n getFireStorageURL(url:string): SafeUrl {\n console.log('URL', url);\n return this.domSanitizer.bypassSecurityTrustUrl(url);\n }\n\n getVideoId(url: string): string {\n if (this.isUrl(url)) {\n const split = url.split('/');\n return split[4];\n }\n return url;\n }\n\n isUrl(s: string): boolean {\n const regexp = /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/;\n return regexp.test(s);\n }\n\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml, SafeStyle, SafeScript, SafeUrl, SafeResourceUrl } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safe'\n})\nexport class SafePipe implements PipeTransform {\n\n constructor(protected sanitizer: DomSanitizer) {}\n \n public transform(value: any, type: string): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {\n if (value) {\n switch (type) {\n case 'html': return this.sanitizer.bypassSecurityTrustHtml(value);\n case 'style': return this.sanitizer.bypassSecurityTrustStyle(value);\n case 'script': return this.sanitizer.bypassSecurityTrustScript(value);\n case 'url': return this.sanitizer.bypassSecurityTrustUrl(value);\n case 'resourceUrl': return this.sanitizer.bypassSecurityTrustResourceUrl(value);\n default: throw new Error(`Invalid safe type specified: ${type}`);\n }\n }\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { CurrencyPipe } from '@angular/common';\n\nconst _NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/;\n\n@Pipe({name: 'looseCurrency'})\nexport class LooseCurrencyPipe implements PipeTransform {\n constructor(private _currencyPipe: CurrencyPipe) {}\n\n transform(value: any, currencyCode: string, symbolDisplay: boolean, digits: string): string {\n if (typeof value === 'number' || _NUMBER_FORMAT_REGEXP.test(value)) {\n return this._currencyPipe.transform(value, currencyCode, symbolDisplay, digits);\n } else {\n return value;\n }\n }\n}","import { NgModule } from '@angular/core';\nimport { StreamPipe } from './stream.pipe';\nimport { SafePipe } from './safe.pipe';\nimport { LooseCurrencyPipe } from './currency.pipe';\nimport { CurrencyPipe } from '@angular/common';\n\n@NgModule({\n declarations: [\n SafePipe,\n StreamPipe,\n LooseCurrencyPipe\n ],\n imports: [\n\n ],\n exports: [\n SafePipe,\n StreamPipe,\n LooseCurrencyPipe\n ],\n providers:[\n CurrencyPipe\n ]\n})\nexport class PipesModule { }\n","import {Injectable} from '@angular/core';\nimport {Observable} from 'rxjs/Observable';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport { BaseService } from 'asap-crud';\n\n@Injectable()\nexport class UserService extends BaseService {\n\n constructor(public http: HttpClient) {\n super(http)\n }\n\n public usersChecked(payload, params?) {\n return this.http.post(this.baseUrl + '/api/v2/client/onesignal/user', payload, {headers: this.headers(false), params});\n }\n\n public getForms(): Observable<any> {\n return this.http.get(this.baseUrl + '/api/v2/admin/user/form', {headers: this.headers(false)});\n }\n\n public getAllUsers(search: string = ''): Observable<any> {\n let query = 'all';\n\n if (search) {\n query = `search=${search}`;\n }\n\n return this.http.get(`${this.baseUrl}/api/v2/admin/asap-user?${query}`, {headers: this.headers(false)});\n }\n\n public getUserData(idUser:number=null): Observable<any> {\n if (idUser !== null) {\n return this.http.get(this.baseUrl + '/api/v2/admin/asap-user/' + idUser, {headers: this.headers(false)});\n }\n return this.http.get(this.baseUrl + '/api/v2/admin/asap-user', {headers: this.headers(false)});\n }\n\n public getUserForm(): Observable<any> {\n return this.http.get(this.baseUrl + '/api/v2/admin/user/form' , {headers: this.headers(false)});\n }\n\n public getAdressByCep(cep: string): Observable<any> {\n const headerOptions = {\n 'Content-Type': 'application/x-www-form-urlencoded',\n };\n return this.http.get('http://viacep.com.br/ws/' + cep + '/json/', {headers: new HttpHeaders(headerOptions)});\n }\n\n public remove(id): Observable<any> {\n const url = this.baseUrl + '/api/v2/admin/user/delete/' + id;\n return this.http.delete(url, {headers: this.headers(false)});\n }\n\n public saveData(data: any, idCliente = null): Observable<any> {\n const headerOptions = {\n 'Authorization': localStorage.getItem('token'),\n 'Accept': 'application/json'\n };\n if (idCliente === null) {\n return this.http.post(this.baseUrl + '/api/v2/admin/asap-user/store',\n data,\n {headers: new HttpHeaders(headerOptions)});\n }\n return this.http.put(this.baseUrl + '/api/v2/admin/asap-user/' + idCliente + '/update',\n data,\n {headers: new HttpHeaders(headerOptions)});\n }\n\n\n}\n","import { Component, OnInit, Input, ViewChild, ElementRef } from '@angular/core';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { AsapFeedService } from '../services/asap-feed.service';\nimport { UtilsService } from '../services/utils.service';\nimport { path } from '../constants/constants';\nimport { Global, AsapService } from 'asap-crud';\nimport { UserService } from '../services/user.service';\n\n@Component({\n selector: 'feed-comments',\n templateUrl: './feed-comments.component.html',\n styleUrls: ['./feed-comments.component.scss', '../asap-feed.beta.componente.scss'],\n providers: [ UserService ]\n})\nexport class FeedCommentsComponent implements OnInit {\n\n @ViewChild('inputComment', {static: false}) inputComment: ElementRef;\n @ViewChild('replyInputComment', {static: false}) replyInputComment: ElementRef;\n @ViewChild('inputReply', {static: false}) inputReply: ElementRef;\n\n @Input() settings;\n @Input() feed_id;\n @Input() user;\n\n public comments = [];\n public replyingComment = [];\n public replyingResponse = [];\n public mentionsList;\n public limitCommentsTo = 3;\n public limitReplysTo = 1;\n public comment;\n public reply;\n public editedComment;\n public editedReply;\n public onLoadingLike = false;\n public onLoadingReply = false;\n public onLoadingComment = false;\n public isMarking = false;\n public users: any[];\n public loading = false;\n\n constructor(\n public global: Global,\n public db: AngularFirestore,\n public feedService: AsapFeedService,\n public service: UtilsService,\n public asapService: AsapService,\n public userService: UserService\n ) { }\n\n ngOnInit() {\n this.getComments(this.feed_id);\n }\n\n public getComments(feed_id) {\n const collection = this.db.collection(path().feed)\n .doc(feed_id)\n .collection('comments', (ref: any) => {\n let query = ref.orderBy(\"updated_at\", \"desc\");\n return query;\n });\n\n\n collection.snapshotChanges().subscribe((comment: any) => {\n this.comments = [];\n comment.map(item => {\n let data = item.payload.doc.data();\n data.id = item.payload.doc.id;\n data.likeForMe = false;\n data.limitReplysTo = 0;\n\n const likesCollection = this.db.collection(path().feed)\n .doc(feed_id)\n .collection('comments')\n .doc(data.id)\n .collection('like');\n\n\n likesCollection.snapshotChanges().subscribe(like => {\n data.likes = [];\n like.map(subItemLike => {\n let likeData = subItemLike.payload.doc.data();\n likeData.id = subItemLike.payload.doc['id'];\n\n if (this.global.loggedUser()) {\n if (likeData.user_info && likeData.user_info.id === this.global.loggedUser().id) {\n data.likeForMe = true;\n data.likeForMeID = likeData.id;\n }\n }\n\n data.likes.push(likeData);\n\n });\n });\n\n const replyCollection = this.db.collection(path().feed)\n .doc(feed_id)\n .collection('comments')\n .doc(data.id)\n .collection('reply', ref => {\n return ref.orderBy('updated_at', 'desc');\n });\n\n replyCollection.snapshotChanges().subscribe(reply => {\n data.replys = [];\n reply.map((subItem) => {\n let replyData = subItem.payload.doc.data();\n replyData.id = subItem.payload.doc['id'];\n\n data.replys.push(replyData);\n });\n\n });\n\n this.comments.push(data);\n });\n });\n }\n\n public onReplyComment(i) {\n if (!this.replyingComment[i]) {\n this.replyingComment[i] = true;\n }\n else {\n this.replyingComment[i] = false;\n }\n }\n\n public onReplyResponse(i) {\n if (!this.replyingResponse[i]) {\n this.replyingResponse[i] = true;\n }\n else {\n this.replyingResponse[i] = false;\n }\n\n }\n\n public handleShowAllReplyResponse(commentIdx: number) {\n if (this.comments[commentIdx].limitReplysTo === 0) {\n this.comments[commentIdx].limitReplysTo = this.comments[commentIdx].replys.length;\n } else {\n this.comments[commentIdx].limitReplysTo = 0;\n }\n }\n\n public unmentionRemovedUsers(comment: string) {\n const mentions: any = [];\n if (this.mentionsList && comment) {\n for (const user of this.mentionsList) {\n if (comment.includes(user.name)) {\n mentions.push(user);\n }\n }\n }\n this.mentionsList = mentions;\n }\n\n public sendComment(comment) {\n this.unmentionRemovedUsers(comment);\n let data = {\n comment: comment,\n updated_at: Date.now(),\n created_at: Date.now(),\n user_info: {\n id: this.global.loggedUser().id,\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture\n }\n }\n\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments');\n\n if (comment.length > 0) {\n const selected_users = this.mentionsList.map(user => user.id);\n this.userService.usersChecked({post_id: this.feed_id, user_id: selected_users, comment, type: 'comment'}, {comments: true}).subscribe();\n\n this.onLoadingComment = true;\n collection.add(data);\n\n const notification = {\n source:'web',\n title: `Novo comentário`,\n description: `${this.global.loggedUser().name}: ${comment}`,\n user: this.global.loggedUser(),\n client_id:this.global.loggedUser().client_id,\n redirect: `/portal/${this.feed_id}`\n }\n\n this.service.sendNotification(notification, this.user, 'feed');\n\n this.comment = \"\";\n this.mentionsList = [];\n this.onLoadingComment = false;\n }\n }\n\n public replyComment(comment_id, comment, user_info, i) {\n this.unmentionRemovedUsers(comment);\n let data = {\n comment: comment,\n created_at: Date.now(),\n updated_at: Date.now(),\n user_info: {\n id: this.global.loggedUser().id,\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture\n }\n }\n\n if (comment.length > 0) {\n this.onLoadingReply = true;\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(comment_id)\n .collection('reply');\n\n collection.add(data);\n\n const notification = {\n source:'web',\n title: `Nova Resposta`,\n description: `${this.global.loggedUser().name} respondeu: ${comment}`,\n client_id:this.global.loggedUser().client_id,\n user: this.global.loggedUser(),\n redirect: `/portal/${this.feed_id}`\n }\n\n const selected_users = this.mentionsList.map(user => user.id);\n this.userService.usersChecked({post_id: this.feed_id, user_id: selected_users}, {comments: true}).subscribe();\n this.service.sendNotification(notification, user_info, 'feed');\n\n this.reply = \"\";\n this.onLoadingReply = false;\n this.replyingComment[i] = false;\n this.replyingResponse = [];\n }\n }\n\n public deleteReply(comment_id, reply_id) {\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(comment_id)\n .collection('reply')\n .doc(reply_id);\n\n collection.delete();\n }\n\n public deleteComment(comment_id) {\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(comment_id);\n\n collection.delete();\n }\n\n public sendLikeComment(comment_id, like_id = null, item) {\n this.onLoadingLike = true;\n if (!item.likeForMe) {\n let data = {\n created_at: Date.now(),\n updated_at: Date.now(),\n user_info: {\n id: this.global.loggedUser().id,\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture\n }\n }\n\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(comment_id)\n .collection('like');\n\n collection.add(data);\n\n\n const notification = {\n source:'web',\n title: `Nova Curtida`,\n description: `${this.global.loggedUser().name} curtiu seu comentário: ${item.comment}`,\n client_id:this.global.loggedUser().client_id,\n user: this.global.loggedUser(),\n redirect: `/portal/${this.feed_id}`\n }\n\n this.service.sendNotification(notification, item.user_info, 'feed');\n\n item.likeForMe = true;\n this.onLoadingLike = false;\n }\n else {\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(comment_id)\n .collection('like')\n .doc(like_id);\n\n collection.delete();\n item.likeForMe = false;\n this.onLoadingLike = false;\n }\n }\n\n public loadMoreComments() {\n this.limitCommentsTo = this.limitCommentsTo + 3;\n }\n\n public loadMoreReplys(item) {\n item.limitReplysTo = item.limitReplysTo + 3;\n }\n\n public linkify(str) {\n var re: any;\n re = [\n \"\\\\b((?:https?|ftp)://[^\\\\s\\\"'<>]+)\\\\b\",\n \"\\\\b(www\\\\.[^\\\\s\\\"'<>]+)\\\\b\",\n \"\\\\b(\\\\w[\\\\w.+-]*@[\\\\w.-]+\\\\.[a-z]{2,6})\\\\b\",\n \"#([a-z0-9]+)\"];\n re = new RegExp(re.join('|'), \"gi\");\n\n if (str) {\n return str.replace(re, function (match, url, www, mail, twitler) {\n if (url)\n return \"<a class='text-primary' target='_blank' (click)='redirectNewLink(url)' href=\\\"\" + url + \"\\\">\" + url + \"</a>\";\n if (www)\n return \"<a class='text-primary' href=\\\"http://\" + www + \"\\\">\" + www + \"</a>\";\n if (mail)\n return \"<a class='text-primary' href=\\\"#</a>\";\n if (twitler)\n return \"<a class='text-primary' href=\\\"portal/search/\" + encodeURIComponent('#' + twitler) + \"\\\">#\" + twitler + \"</a>\";\n // return \"<a class='text-primary' href=\\\"#\\\">#\" + twitler + \"</a>\";\n\n // shouldnt get here, but just in case\n return match;\n });\n }\n }\n\n public onEditReply(reply) {\n this.editedReply = reply.comment;\n if (reply.onEdit) {\n reply.onEdit = false;\n }\n else {\n reply.onEdit = true;\n }\n }\n\n public onEditComment(comment) {\n this.editedComment = comment.comment;\n\n if (comment.onEdit) {\n comment.onEdit = false;\n }\n else {\n comment.onEdit = true;\n }\n }\n\n public updateComment(id, comment) {\n this.onLoadingComment = true;\n let data = {\n comment: this.editedComment,\n edited: true,\n updated_at: Date.now()\n }\n\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(id);\n\n if (comment.length > 0) {\n collection.update(data);\n this.editedComment = \"\";\n this.onLoadingComment = false;\n }\n }\n\n public updateReply(comment_id, old_reply, reply) {\n this.onLoadingReply = true;\n let data = {\n comment: reply,\n updated_at: Date.now(),\n }\n\n const collection = this.db.collection(path().feed)\n .doc(this.feed_id)\n .collection('comments')\n .doc(comment_id)\n .collection('reply')\n .doc(old_reply.id);\n collection.update(data);\n this.editedComment = \"\";\n this.onLoadingReply = false;\n old_reply.onEdit = false;\n }\n\n public mentionUser(user: any) {\n this.mentionsList = this.mentionsList || [];\n this.mentionsList.push(user);\n }\n\n}\n","import { Component, OnInit, Input, isDevMode } from '@angular/core';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { AsapFeedService } from '../services/asap-feed.service';\nimport { UtilsService } from '../services/utils.service';\nimport { path } from '../constants/constants';\nimport { Global } from 'asap-crud';\nimport { TranslateService } from '@ngx-translate/core';\n\n\n@Component({\n selector: 'feed-actions',\n templateUrl: './feed-actions.component.html',\n styleUrls: ['./feed-actions.component.scss', '../asap-feed.beta.componente.scss']\n})\nexport class FeedActionsComponent implements OnInit {\n\n @Input() item;\n @Input() settings;\n @Input() portalName;\n\n public likes = [];\n public listUsersLikes;\n public comments = [];\n public shareds = [];\n public likeForMe = false;\n public sharedForMe = false;\n public likeForMeID;\n public sharedForMeID;\n public disabledLike;\n public onSendLike = false;\n public onSendShared = false;\n public deviceInfo = null;\n\n constructor(\n public global: Global,\n public db: AngularFirestore,\n public feedService: AsapFeedService,\n public service: UtilsService,\n public translate: TranslateService\n ) { }\n\n ngOnInit() {\n this.getLikes();\n this.getComments();\n this.getShareds();\n }\n\n public getLikes() {\n const collection = this.db.collection('likes', ref => {\n return ref.where('post_id', '==', this.item.id);\n });\n\n collection.snapshotChanges().subscribe(likes => {\n this.likes = [];\n // this.listUsersLikes = likes.map( (item:any) => item.user_info.name);\n // this.listUsersLikes = this.listUsersLikes.toString();\n likes.map((item: any) => {\n let data = item.payload.doc.data();\n data.id = item.payload.doc.id;\n\n if (this.global.loggedUser()) {\n // Este condição é para a versão antiga da Collection Likes\n if (data.uid && data.uid == this.global.loggedUser().id) {\n this.likeForMe = true;\n this.likeForMeID = data.id;\n }\n\n // Este condição é para a versão nova da Collection Likes\n if (data.user_info && data.user_info.id == this.global.loggedUser().id) {\n this.likeForMe = true;\n this.likeForMeID = data.id;\n }\n }\n\n this.likes.push(data);\n })\n });\n }\n\n public getComments() {\n const collection = this.db.collection(path().feed)\n .doc(this.item.id)\n .collection('comments');\n\n collection.valueChanges().subscribe(response => {\n this.comments = response;\n })\n }\n\n public getShareds() {\n const collection = this.db.collection('shareds', ref => {\n return ref.where('post_id', '==', this.item.id);\n });\n\n collection.snapshotChanges().subscribe(shareds => {\n this.shareds = [];\n shareds.map((item: any) => {\n console.log('Shareds ->', item);\n let data = item.payload.doc.data();\n data.id = item.payload.doc.id;\n\n if (this.global.loggedUser()) {\n // Este condição é para a versão antiga da Collection Shareds\n if (data.uid && data.uid == this.global.loggedUser().id) {\n this.sharedForMe = true;\n this.sharedForMeID = data.id;\n }\n\n // Este condição é para a versão nova da Collection Shareds\n if (data.user_info && data.user_info.id == this.global.loggedUser().id) {\n this.likeForMe = true;\n this.likeForMeID = data.id;\n }\n }\n\n this.shareds.push(data);\n })\n });\n }\n\n public sendLike() {\n if (this.onSendLike) {\n console.log(\"[sendLike] bloqueio...\")\n }\n else {\n this.onSendLike = true;\n setTimeout(() => {\n console.log(\"[sendLike] enviando like...\")\n let data = {\n post_id: this.item.id,\n create_at: Date.now(),\n updated_at: Date.now(),\n user_info: {\n id: this.global.loggedUser().id,\n updated_at: Date.now(),\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture\n }\n }\n \n if (!this.likeForMe) {\n \n const notification = {\n title: `Nova curtida`,\n description: `${this.global.loggedUser().name} curtiu seu post`,\n user: this.global.loggedUser(),\n redirect: `/portal/${this.item.id}`,\n client_id: this.global.loggedUser().client_id,\n }\n \n this.service.sendNotification(notification, this.item.user_info, 'feed');\n \n const collection = this.db.collection('likes');\n const commentData = collection.add(data);\n console.log(commentData);\n // const \n // const feedDataCollection = await db.collection('feed').doc(feed_id).collection('comments').doc(comment_id);\n // await feedDataCollection.update({ reply_count: admin.firestore.FieldValue.increment(1) });\n setTimeout(() => {\n this.onSendLike = false;\n }, 1000);\n }\n else {\n const collection = this.db.collection('likes').doc(this.likeForMeID);\n collection.delete();\n setTimeout(() => {\n this.onSendLike = false;\n }, 1000);\n this.likeForMe = false;\n }\n }, 100);\n }\n }\n\n public copyToClipBoard(val: string) {\n const selBox = document.createElement('textarea');\n selBox.style.position = 'fixed';\n selBox.style.left = '0';\n selBox.style.top = '0';\n selBox.style.opacity = '0';\n selBox.value = val;\n document.body.appendChild(selBox);\n selBox.focus();\n selBox.select();\n document.execCommand('copy');\n document.body.removeChild(selBox);\n //alert(\"Link copiado para a área de transferencia\")\n this.global.notification.success('Pronto!', 'Link copiado para a área de transferencia');\n }\n\n sharePost(type = 'link') {\n this.onSendShared = false;\n\n let data = {\n post_id: this.item.id,\n create_at: Date.now(),\n updated_at: Date.now(),\n uid: this.global.loggedUser().id,\n user_info: {\n id: this.global.loggedUser().id,\n updated_at: Date.now(),\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture\n }\n }\n\n if (!this.sharedForMe) {\n\n\n\n const notification = {\n title: `Novo Compartilhamento`,\n description: `${this.global.loggedUser().name} compartilhou seu post através do ${type}`,\n meta_data: this.global.loggedUser(),\n redirect: `/portal/${this.item.id}`,\n client_id: this.global.loggedUser().client_id,\n }\n\n\n\n this.service.sendNotification(notification, this.item.user_info, 'feed');\n\n\n const collection = this.db.collection('shareds');\n collection.add(data);\n }\n\n this.onSendShared = false;\n var base_url = window.location.origin;\n let urlShare = base_url + `/post/${this.item.id}`;\n\n // this.deviceInfo = this.deviceService.getDeviceInfo();\n const isMobile = false;//this.deviceService.isMobile();\n //const canShare = window.navigator.canShare(data);\n //console.log(\"canShare\",canShare)\n\n if (isMobile) {\n let myNavigator: any;\n myNavigator = window.navigator;\n\n\n if (myNavigator.share) {\n myNavigator.share({\n title: 'Gostei deste post',\n text: 'Veja esse poste de *' + this.item.user_info.name + '* que gostei ' + '\\n\\n' + urlShare,\n url: urlShare,\n })\n .then(() => console.log('Successful share'))\n .catch((error) => console.log('Error sharing', error));\n }\n\n } else {\n let url = '';\n if (type == 'whatsapp') {\n let original = this.translate.instant('LookThisPostThatIFound');\n url = `${original.split(\"{{user_name}}\").join(this.item.user_info.name)}\\n\\n${urlShare}`;\n url = `https://wa.me/?text=${encodeURIComponent(url)}`;\n window.open(url);\n }\n else if (type == 'linkedin') {\n url = `https://www.linkedin.com/shareArticle?mini=true&url=${urlShare}&title=${encodeURIComponent('Gostei deste post do *' + this.item.user_info.name + '* que encontrei no ' + 'Portal ' + '\\n\\n' + urlShare)}`\n window.open(url);\n }\n else if (type == 'telegram') {\n url = `https://telegram.me/share/url?url=${urlShare}`;\n window.open(url);\n }\n else if (type == 'link') {\n this.copyToClipBoard(urlShare);\n }\n else if (type == 'facebook') {\n url = `https://www.facebook.com/sharer/sharer.php?u=${urlShare}`;\n window.open(url);\n }\n\n }\n }\n\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Global, AsapBaseService } from 'asap-crud';\nimport { Router } from '@angular/router';\n\n@Injectable()\nexport class ProductService extends AsapBaseService {\n\n constructor(\n public http: HttpClient,\n public global: Global,\n public router: Router\n ) {\n super(http);\n this.entityName = \"\";\n this.basePath = \"api/v2\";\n }\n\n public product(id):any {\n return this.getResources({router:'client/produto/' + id});\n }\n \n public createProduct(data):any {\n return this.createResource(data, {router:'loja/produto'});\n } \n\n public categories():any {\n return this.getResources({router:'client/categoria/' + this.global.clientID()});\n }\n\n public subCategories(category):any {\n return this.getResources({router:'client/subcategoria/' + this.global.clientID() + \"/\" + category});\n }\n\n public subCategoryProducts(id,page=null):any {\n let qryPage = null;\n if (page) {\n qryPage = \"page=\" + page;\n }\n return this.getResources({router:'client/showcasefilter/' + id, query: qryPage});\n } \n\n public mainProducts():any {\n return this.getResources({router:'client/produto/mais/vendidos/' + this.global.clientID()});\n }\n\n public getMyProducts():any {\n return this.getResources({router:'client/seller/' +this.global.loggedUser().id});\n }\n \n public spotlightProducts(page=null,search=\"\"):any {\n let qryPage = \"\";\n if (page) {\n qryPage = \"page=\" + page;\n }\n if (search != \"\") {\n if (qryPage != \"\") qryPage += \"&busca=\" + search;\n }\n return this.getResources({router:'client/showcase/' + this.global.clientID(), query: qryPage});\n }\n\n public order(id,orderData):any {\n return this.createResource(orderData,{router:'loja/pedido/' + id});\n }\n\n public searchCep(cep):any {\n return this.http.get('https://viacep.com.br/ws/'+cep+'/json/');\n }\n\n public checkUserExists(email):any{\n return this.getResources({router:'admin/verify/user?search='+email + '&client_id=' +this.global.clientID()});\n }\n\n\n}\n","import { Component, OnInit, Inject, Input, ViewChild, Output, EventEmitter, ElementRef } from '@angular/core';\nimport { Global, AsapService } from 'asap-crud';\nimport { ActivatedRoute } from '@angular/router';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { classToPlain } from 'class-transformer';\nimport { CdkStepper } from '@angular/cdk/stepper';\nimport { StreamService } from '../../services/stream.service';\nimport { ProductService } from '../../services/product.service';\nimport { ProductModel, FilesModel, FeedModel } from '../../models/feed.model';\nimport { UtilsService } from '../../services/utils.service';\nimport { path } from '../../constants/constants';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\ndeclare var swal: any;\n\n@Component({\n selector: 'modal-announce',\n templateUrl: './modal-announce.component.html',\n styleUrls: ['./modal-announce.component.scss', '../../asap-feed.beta.componente.scss'],\n providers: [AsapService, Global, StreamService, ProductService]\n})\nexport class ModalAnnounceComponent implements OnInit {\n @Input() images;\n @ViewChild('file', { static: false }) file: ElementRef;\n @Output() published = new EventEmitter<boolean>(false);\n\n public category: any;\n public subCategory: any;\n public error = false;\n public entity: any = {}\n public newProduct: boolean = true;\n public newAdversing: any;\n public myProducts: any;\n public selectedProduct: any = {};\n public tempProductData: ProductModel;\n public tmpFileArray: Array<FilesModel>;\n public uploading: boolean;\n public uploadingVideo: boolean;\n public progress;\n public title;\n\n constructor(\n public dialogRef: MatDialogRef<ModalAnnounceComponent>,\n public global: Global,\n public asapService: AsapService,\n public utilsService: UtilsService,\n public sanitizer: DomSanitizer,\n public streamService: StreamService,\n public productService: ProductService,\n public route: ActivatedRoute,\n public db: AngularFirestore,\n @Inject(MAT_DIALOG_DATA) public feed,\n ) { }\n\n ngOnInit() {\n this.tmpFileArray = [];\n this.progress = 0;\n this.newProduct = true;\n this.loadCategory();\n this.loadMyProducts();\n }\n\n close() {\n this.global.alert({\n title: 'Você quer mesmo fechar anúncio?',\n text: 'Você perderá todas as informações se confirmar...',\n type: \"warning\",\n showCancelButton: true,\n confirmButtonText: \"Sim\",\n cancelButtonText: \"Não\"\n }).then(async confirm => {\n if (confirm.value) {\n this.dialogRef.close();\n }\n });\n\n\n }\n\n public defaults() {\n return {\n fotos: []\n }\n }\n\n public loadSubCategory(event) {\n this.productService.subCategories(this.entity.categoria_id).subscribe((response: any) => {\n this.subCategory = response;\n });\n }\n\n public addPicture(image) {\n this.entity.fotos.push({ img: image.path });\n }\n\n public delPicture(index) {\n // this.global.swal({\n // title: 'Remover imagem...',\n // text: \"Você deseja remover essa imagem!\",\n // type: 'warning',\n // showCancelButton: true,\n // confirmButtonText: 'Sim',\n // cancelButtonText: 'Não',\n // reverseButtons: true\n // }).then((result) => {\n // if (result.value) {\n // this.entity.fotos.splice(index,1);\n // }\n // })\n }\n\n public categoryName(id) {\n if (this.category) {\n let cat = this.category.find(item => item.id == id);\n if (cat) {\n return cat.name;\n }\n }\n return \"NÃO SELECIONADO\";\n }\n\n public subCategoryName(id) {\n if (this.subCategory) {\n let cat = this.subCategory.find(item => item.id == id);\n if (cat) {\n return cat.subCategory;\n }\n }\n return \"NÃO SELECIONADO\";\n }\n\n public onSave() {\n this.uploading = true;\n this.progress = 1;\n this.images = this.tmpFileArray;\n if (!this.newProduct) {\n this.addPostOnFeed();\n this.global.notification.success('Seu produto foi anunciado com Sucesso!');\n\n }\n else if (this.newProduct) {\n this.tempProductData = this.entity;\n this.entity.fotos = [];\n\n for (let index = 0; index < this.images.length; index++) {\n this.entity.fotos[index] = {\n img: this.images[index].url\n };\n\n }\n\n this.productService.createProduct(this.entity).subscribe((response: any) => {\n console.log('ResponseFeed');\n this.tempProductData.id = response.produto.data.id;\n this.addPostOnFeed();\n this.global.notification.success('Produto, cadastrado e anunciado com Sucesso');\n },\n\n (error: any) => {\n console.error('Erro', error);\n });\n }\n }\n\n public loadCategory() {\n this.productService.categories().subscribe((response: any) => {\n console.log('loadSubCategories', response);\n this.category = response.data;\n\n })\n }\n\n public loadSubCategories(id_categorie) {\n console.log('loadSubCategories', id_categorie);\n this.productService.subCategories(id_categorie).subscribe((response: any) => {\n this.subCategory = response;\n\n });\n }\n\n public loadMyProducts() {\n this.productService.getMyProducts().subscribe((response: any) => {\n console.log('MyPrid', response);\n this.myProducts = response.data.produtos.data;\n },\n (error: any) => {\n this.global.notification.error('Ocorreu um problema ao processar sua requisição, entre em contato com o Administrador do Sistema')\n })\n }\n\n public addPostOnFeed() {\n console.log('Owner', this);\n console.log('Data Feed', this.tempProductData);\n this.share();\n // const feedCollection = this.db.collection(path().feed);\n // const images = []; \n\n // for (let index = 0; index < this.images.length; index++) {\n // images[index] = {\n // type:'image',\n // url:this.images[index].url || this.images[index].img\n // };\n // }\n\n // const post = {\n // likes: 0,\n // isLiked: false,\n // user_info: this.global.loggedUser(),\n // updated_at: Date.now(),\n // title: data.produto,\n // product:{\n // data\n // },\n // type: 'announce',\n // files: images,\n // };\n\n // console.log('DATA', post);\n\n // feedCollection.add(post).then(res => {\n // this.db.doc(`feed/${res.id}`).update({ id: res.id });\n // });\n }\n\n share(): any {\n console.log('New Prodct 1', this.newProduct);\n const data: FeedModel = new FeedModel();\n data.product = (this.newProduct) ? this.tempProductData : this.selectedProduct;\n data.updated_at = Date.now();\n data.type = 'announce';\n console.log('Post Data', data);\n console.log('New Prodct', this.newProduct);\n\n if (this.newProduct) {\n\n data.title = '<b>' + data.product.produto + '</b>' + '<br><br>' + data.product.descr;\n data.product = this.tempProductData;\n\n if (this.tmpFileArray || this.tmpFileArray.length > 0) {\n console.log(2);\n data.files = this.tmpFileArray;\n console.log('FILES ------------>', data.files);\n const videoFilter = data.files.filter(tmp => this.getTypeByMimeType(tmp.type) === 'video');\n\n if (videoFilter.length > 0) {\n console.log(3);\n data.files[0].video_rendering = true;\n data.files[0].video_low_rendering = true;\n data.files[0].thumb_rendering = true;\n\n this.streamService.status(videoFilter[0].url).subscribe((res: any) => {\n data.files[0].video_rendering = !res.p480;\n data.files[0].video_low_rendering = !res.p480_low;\n data.files[0].thumb_rendering = !res.thumb;\n });\n }\n }\n }\n\n\n else if (!this.newProduct) {\n data.title = '<b>' + data.product.produto + '</b>' + '<br><br>' + data.product.descr;\n if (data.product.fotos.length > 0) {\n for (let index = 0; index < data.product.fotos.length; index++) {\n console.log('Fotos ->', data.product.fotos[index]);\n data.product.fotos[index].url = data.product.fotos[index].img;\n data.product.fotos[index].type = 'image';\n delete data.product.fotos[index].img;\n data.files[index] = data.product.fotos[index];\n }\n\n if (data.files.length == data.product.fotos.length) {\n console.log('Fotos', data);\n }\n }\n\n }\n\n console.log('SHARE', data);\n this.publish(data);\n this.feed.owner.published.emit(true);\n\n }\n\n\n async uploadFile(event: any) {\n console.log('uploadFile(event)', event);\n for (const file of event.target.files) {\n console.log('Target Files', file);\n const fileGenerated = window.URL.createObjectURL(file);\n const fileSanitized = this.sanitizer.bypassSecurityTrustUrl(\n fileGenerated\n );\n\n const tmpFile: FilesModel = new FilesModel();\n tmpFile.type = this.getTypeByMimeType(file.type);\n tmpFile.status = 0;\n tmpFile.thumb_rendering = false;\n tmpFile.video_rendering = false;\n tmpFile.video_low_rendering = false;\n\n let error = false;\n\n if (\n this.getTypeByMimeType(file.type) === 'video' &&\n this.tmpFileArray.filter((tmp: any) => this.getTypeByMimeType(tmp.type) === 'video').length > 0\n ) {\n swal.fire('Ops...', 'Você só pode enviar 1 vídeo por postagem', 'error');\n error = true;\n }\n\n if (\n this.getTypeByMimeType(file.type) === 'image' &&\n this.tmpFileArray.filter((tmp: any) => this.getTypeByMimeType(tmp.type) === 'image').length > 8\n ) {\n swal.fire(\n 'Ops...',\n 'Você só pode enviar até 9 imagens por postagem',\n 'error'\n );\n error = true;\n }\n\n if (!error) {\n // this.uploading = true;\n\n if (this.getTypeByMimeType(file.type) === 'image') {\n if (file.type == 'image/gif') {\n tmpFile.name = `${this.utilsService.uid()}.gif`;\n tmpFile.url = await this.readGIF(file);\n this.tmpFileArray.push(tmpFile);\n }\n else {\n const getExtname = file.name.split('.');\n const extname = getExtname[getExtname.length - 1];\n\n tmpFile.url = await this.resizeImages(file, 800);\n tmpFile.name = `${this.utilsService.uid()}.${extname}`;\n this.tmpFileArray.push(tmpFile);\n }\n }\n else if (this.getTypeByMimeType(file.type) === 'video') {\n this.uploadingVideo = true;\n console.log('Realizar Upload de Video', tmpFile);\n let reader = event.target.files[0];\n if (reader) {\n let blobURL = this.sanitizer.bypassSecurityTrustResourceUrl(URL.createObjectURL(reader));\n tmpFile.name = blobURL as any;\n this.tmpFileArray.push(tmpFile);\n console.log('Result', blobURL);\n }\n this.streamService.uploadFile(file).subscribe(\n async response => {\n if (response['loaded']) {\n tmpFile.status = ((response['loaded'] * 100) / response['total']).toFixed(0) as any;\n }\n\n if (response['body']) {\n tmpFile.url = await response['body']['uuidVideo'];\n this.uploadingVideo = false;\n console.log('Pronto!', response);\n\n }\n }\n )\n }\n }\n }\n }\n\n resizeImages(file: any, width: number): Promise<string> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const MAX_WIDTH = width;\n\n let reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = (e: any) => {\n img.src = e.target.result;\n img.onload = () => {\n const scale = MAX_WIDTH / img.width;\n const canvas = document.createElement(\"canvas\");\n canvas.height = scale * img.height;\n canvas.width = MAX_WIDTH;\n let ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n\n console.log('IMG', img.width, img.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n let dataurl = canvas.toDataURL(file.type, 0.65);\n console.log('CANVAS ->', canvas.width, canvas.height);\n return resolve(dataurl);\n }\n }\n\n reader.onerror = reject;\n });\n\n }\n\n readGIF(file: any): Promise<any> {\n return new Promise((resolve, reject) => {\n\n let reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = (e: any) => {\n return resolve(reader.result);\n }\n\n reader.onerror = reject;\n });\n\n }\n\n getTypeByMimeType(mime: string): string {\n const split = mime.split('/');\n return split[0];\n }\n\n checkUploading(): boolean {\n const tmpFileUploading = this.tmpFileArray.filter((tmp: any) => tmp.url === '');\n return (tmpFileUploading.length > 0) ? true : false;\n }\n\n removeTmpFile(tmpFile: any): void {\n const index = this.tmpFileArray.indexOf(tmpFile);\n this.tmpFileArray.splice(index, 1);\n }\n\n checkIfHasEmbededVideo(value: string): any {\n if (value) {\n if (value.includes('vimeo')) {\n return { url: '//player.vimeo.com/video/' + value.split('/')[4] };\n } else if (value.includes('youtube')) {\n return { url: '//www.youtube.com/embed/' + value.split('=')[1] };\n } else {\n return value;\n }\n }\n }\n\n publish(data: FeedModel) {\n let image;\n\n console.log('Publish()', 1, data);\n this.uploading = true;\n this.progress = 0;\n\n\n let count = 0;\n data.user_info = {\n id: this.global.loggedUser().id,\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture,\n updated_at: Date.now()\n }\n\n if (this.tmpFileArray && this.tmpFileArray.length > 0) {\n console.log('this.tmpFileArray', this.getTypeByMimeType(this.tmpFileArray[0].type));\n console.log('Publish()', 2);\n const imagesFiles = this.tmpFileArray.filter(\n (tmp: any) => this.getTypeByMimeType(tmp.type) === 'image'\n );\n\n\n const step = 98 / imagesFiles.length;\n\n if (imagesFiles.length > 0) {\n console.log('Publish()', 3, imagesFiles)\n for (const file of imagesFiles) {\n setTimeout(() => {\n this.utilsService.uploadFile(`images/${file.name}`, file.url);\n this.utilsService.percentage.subscribe(percent => {\n console.log('TO RODANDO EIM', percent);\n file.status = percent;\n });\n\n this.utilsService.task.snapshotChanges().subscribe(\n async snap => {\n if (snap.bytesTransferred === snap.totalBytes) {\n count++;\n this.progress += step;\n console.log('PROGRESS', this.progress);\n const index = data.files.findIndex(item => item.name === file.name);\n if ((!image) && (data.files[index])) {\n this.utilsService.getFireStorageURL(`images/${data.files[index].name}`).subscribe((imageURL) => {\n image = imageURL;\n });\n\n }\n delete data.files[index].url;\n\n\n\n if (count == imagesFiles.length) {\n console.log('Criando Feed');\n\n const collection = this.db.collection(path().feed)\n collection.add(classToPlain(data)).then(response => {\n this.db.collection(path().feed).doc(response.id).update({ id: response.id });\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n\n console.log('Publish()', 4)\n console.log('Data ->', data);\n\n });\n }\n }\n },\n error => {\n console.error('Error', error);\n })\n });\n }\n }\n else {\n console.log('Publish()', 5)\n console.log(data, this.tmpFileArray)\n\n const collection = this.db.collection(path().feed)\n console.log('Data ->', data);\n collection.add(classToPlain(data)).then(response => {\n this.db.collection(path().feed).doc(response.id).update({ id: response.id });\n\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n })\n\n\n }\n }\n else {\n console.log('Publish()', 5);\n console.log(data, this.tmpFileArray);\n console.log('Data ->', data);\n const collection = this.db.collection(path().feed)\n collection.add(classToPlain(data)).then(response => {\n this.db.collection(path().feed).doc(response.id).update({ id: response.id });\n\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n })\n }\n\n\n console.log('Publish()', 0, path().feed);\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n this.dialogRef.close();\n this.global.toastService.show({\n title: 'Feito!',\n message: 'Seu post foi criado com sucesso',\n layout: 2\n });\n }\n\n\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { AsapService, Global } from 'asap-crud';\nimport { AsapFeedService } from '../services/asap-feed.service';\nimport { StreamService } from '../services/stream.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { FilesModel, FeedModel } from '../models/feed.model';\nimport { UtilsService } from '../services/utils.service';\nimport { path } from '../constants/constants';\nimport { AngularFirestore } from '@angular/fire/firestore';\nimport { classToPlain } from 'class-transformer';\nimport { HttpClient } from '@angular/common/http';\nimport { ModalAnnounceComponent } from './modal-announce/modal-announce.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UserService } from '../services/user.service';\nimport Swal from 'sweetalert2';\n\ndeclare var $: any;\n\n@Component({\n selector: 'feed-publication',\n templateUrl: './feed-publication.component.html',\n styleUrls: ['./feed-publication.component.scss', '../asap-feed.beta.componente.scss'],\n providers: [ StreamService, UserService, AsapService ]\n})\nexport class FeedPublicationComponent implements OnInit {\n\n @Input() announce = false;\n @Input() hideFilterByMe = false;\n @Input() settings;\n @Output() feedCreated = new EventEmitter();\n @Output() filter = new EventEmitter();\n\n public users = [];\n\n public tmpFileArray: Array<FilesModel>;\n public uploading;\n public title = null;\n public progress;\n public notAnnounce;\n public newProduct;\n public ExpandImg;\n public type = 'post';\n public embedFile;\n public tmpEmbedFile;\n public videoSendedID;\n public disabled = false;\n public newfeed: any;\n\n public message = \"Digite acima o nome da pessoa que deseja marcar, em seguida pressione [ENTER]\";\n public selectedUsers: any = {};\n public listType: 'checked' | 'search' = 'search';\n\n public filterByMe = false;\n\n constructor(\n public global: Global,\n public feedService: AsapFeedService,\n public asapService: AsapService,\n public userService: UserService,\n public sanitizer: DomSanitizer,\n public streamService: StreamService,\n public utilsService: UtilsService,\n public db: AngularFirestore,\n public http: HttpClient,\n public dialog: MatDialog,\n ) { }\n\n ngOnInit() {\n this.tmpFileArray = [];\n console.log('Prefix Publication ->', path().feed);\n this.getNewFeed();\n }\n\n loadUsers(value: any) {\n const search = value;\n this.users = null;\n this.listType = 'search';\n if (search != '') {\n this.message = \"Nenhum usuário encontrado!\";\n this.userService.getAllUsers(search).subscribe((response) => {\n this.users = response.data.map((user) => {\n return {\n id: user.user_info.user_id,\n name: user.user_info.user_name,\n email: user.email,\n picture: user.picture\n }\n });\n })\n }\n }\n\n async uploadFile(event: any) {\n for (const file of event.target.files) {\n\n const tmpFile: FilesModel = new FilesModel();\n tmpFile.type = this.getTypeByMimeType(file.type);\n // tmpFile.status = 0;\n tmpFile.thumb_rendering = false;\n tmpFile.video_rendering = false;\n tmpFile.video_low_rendering = false;\n\n let error = false;\n if (this.getTypeByMimeType(file.type) === 'video' && this.tmpFileArray.filter((tmp: any) => this.getTypeByMimeType(tmp.type) === 'video').length > 0) {\n this.global.toastService.error({\n title: 'Ops',\n message: 'Você só pode enviar um vídeo por Post'\n });\n error = true;\n }\n\n if (this.getTypeByMimeType(file.type) === 'image' && this.tmpFileArray.filter((tmp: any) => this.getTypeByMimeType(tmp.type) === 'image').length > 4) {\n this.global.toastService.error({\n title: 'Ops',\n message: 'Você pode utilizar até no máximo 5 imagens no seu Post'\n });\n error = true;\n }\n\n if (!error) {\n // this.uploading = true;\n\n if (this.getTypeByMimeType(file.type) === 'image') {\n if (file.type == 'image/gif') {\n tmpFile.name = `${this.streamService.uid()}.gif`;\n tmpFile.url = await this.readGIF(file);\n this.tmpFileArray.push(tmpFile);\n }\n\n else {\n const getExtname = file.name.split('.');\n const extname = getExtname[getExtname.length - 1];\n\n tmpFile.url = await this.resizeImages(file, 800);\n tmpFile.name = `${this.streamService.uid()}.${extname}`;\n this.tmpFileArray.push(tmpFile);\n }\n }\n\n else if (this.getTypeByMimeType(file.type) === 'video') {\n this.uploading = true;\n console.log('Realizar Upload de Video', tmpFile);\n const reader = file;\n if (reader) {\n const blobURL = URL.createObjectURL(reader);\n tmpFile.name = blobURL as any;\n this.tmpFileArray.push(tmpFile);\n console.log('[uploadFile] if reader', blobURL);\n }\n\n this.uploading = true;\n await this.streamService.uploadFile(file).subscribe(\n response => {\n console.log('[uploadFile] Response', tmpFile);\n if (!response.body) {\n if (response['total']) {\n tmpFile.status = ((response['loaded'] * 100) / response['total']).toFixed(0) as any;\n }\n this.progress = tmpFile.status;\n }\n\n if (response.body && response.body.file) {\n console.log('[uploadFile] Response Uploaded', response);\n tmpFile.status = 101;\n tmpFile.url = response.body.file.secure_url;\n this.videoSendedID = tmpFile.url;\n this.uploading = false;\n this.progress = null;\n\n }\n }\n );\n console.log('tmpFile', tmpFile);\n }\n }\n }\n }\n\n resizeImages(file: any, width: number): Promise<string> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const MAX_WIDTH = width;\n const MAX_HEIGHT: any = 1334;\n\n const reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = (e: any) => {\n img.src = e.target.result;\n img.onload = () => {\n const scale = MAX_WIDTH / img.width;\n const canvas = document.createElement('canvas');\n canvas.height = scale * img.height;\n\n canvas.width = MAX_WIDTH;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0);\n\n console.log('IMG', img.width, img.height);\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n const dataurl = canvas.toDataURL(file.type, 0.65);\n console.log('CANVAS ->', canvas.width, canvas.height);\n return resolve(dataurl);\n };\n };\n\n reader.onerror = reject;\n });\n\n }\n\n readGIF(file: any): Promise<any> {\n return new Promise((resolve, reject) => {\n\n const reader = new FileReader();\n\n reader.readAsDataURL(file);\n\n reader.onload = (e: any) => {\n return resolve(reader.result);\n };\n\n reader.onerror = reject;\n });\n\n }\n\n getTypeByMimeType(mime: string): string {\n const split = mime.split('/');\n return split[0];\n }\n\n share(): any {\n const data: FeedModel = new FeedModel();\n data.updated_at = Date.now();\n data.title = this.title;\n data.type = this.type;\n data.selected_users = [];\n data.selected_users_data = [];\n\n for (const id in this.selectedUsers) {\n if (this.selectedUsers[id]) {\n data.selected_users.push(id);\n data.selected_users_data.push({\n id,\n name: this.selectedUsers[id].name,\n picture: this.selectedUsers[id].picture,\n email: this.selectedUsers[id].email\n });\n }\n }\n\n if (this.tmpFileArray || this.tmpFileArray.length > 0) {\n data.files = this.tmpFileArray;\n // const videoFilter = data.files.filter(tmp => this.getTypeByMimeType(tmp.type) === 'video');\n // if (videoFilter.length > 0) {\n // }\n data.files.map(item => {\n if (item.type === 'video') {\n console.log('Existe um video no Feed', item);\n if (!item.isCloudinary) {\n item.video_rendering = false;\n item.video_low_rendering = false;\n item.thumb_rendering = false;\n\n // Setando o ID do Feed igual ao ID do vídeo\n data.ref = item.url;\n data.status = false;\n this.streamService.status(item.url).subscribe((res: any) => {\n item.video_rendering = !res.p480;\n item.video_low_rendering = !res.p480_low;\n item.thumb_rendering = !res.thumb;\n });\n }\n }\n });\n }\n console.log(\"share\", data);\n \n this.publish(data).then((id) => {\n this.userService.usersChecked({post_id: id, user_id: data.selected_users, comment: data.title, type: 'post'}, {comments: true}).subscribe();\n });\n\n this.selectedUsers = [];\n }\n\n confirmShare() {\n const swall = Swal.fire({\n title: \"Podemos compartilhar seu post?\",\n type: \"warning\",\n showCancelButton: true,\n confirmButtonText: \"Sim\",\n cancelButtonText: \"Não\"\n });\n\n swall.then((confirmed) => {\n if (confirmed.value) {\n this.share();\n }\n });\n }\n\n publish(data: FeedModel) {\n return new Promise((resolve) => {\n\n let image;\n let id;\n console.log('Publish()', 1, data);\n \n if (!data.title || data.title === '') {\n // this.global.toastService.error({\n // title: 'Ops',\n // message: 'Você precisa adicionar um texto à sua imagem/vídeo.',\n // });\n Swal.fire({\n title: \"Podemos compartilhar seu post??\",\n type: \"warning\",\n showCancelButton: true,\n confirmButtonText: \"Sim\",\n cancelButtonText: \"Não\"\n })\n return;\n }\n this.uploading = true;\n this.progress = 0;\n \n \n let count = 0;\n data.user_info = {\n id: this.global.loggedUser().id,\n name: this.global.loggedUser().name,\n picture: this.global.loggedUser().picture,\n updated_at: Date.now()\n };\n \n if (this.type == 'embed') {\n const fileEmbed: any = {\n name: this.embedFile,\n url: this.embedFile,\n type: 'embed'\n };\n \n this.tmpFileArray.push(fileEmbed);\n }\n \n if (this.type != 'embed') {\n if (this.tmpFileArray && this.tmpFileArray.length > 0) {\n console.log('this.tmpFileArray', this.getTypeByMimeType(this.tmpFileArray[0].type));\n console.log('Publish()', 2);\n const imagesFiles = this.tmpFileArray.filter(\n (tmp: any) => this.getTypeByMimeType(tmp.type) === 'image'\n );\n \n \n const step = 98 / imagesFiles.length;\n \n if ((imagesFiles.length && data.title === '')) {\n this.global.toastService.error({\n title: 'Ops',\n message: 'Você precisa adicionar um texto junto à sua imagem/vídeo.',\n });\n return;\n }\n \n if (imagesFiles.length > 0) {\n for (const file of imagesFiles) {\n setTimeout(() => {\n this.utilsService.uploadFile(`images/${file.name}`, file.url);\n this.utilsService.percentage.subscribe(percent => {\n file.status = percent;\n });\n \n this.utilsService.task.snapshotChanges().subscribe(\n async snap => {\n if (snap.bytesTransferred === snap.totalBytes) {\n count++;\n this.progress += step;\n console.log('PROGRESS', this.progress);\n const index = data.files.findIndex(item => item.name === file.name);\n if ((!image) && (data.files[index])) {\n this.utilsService.getFireStorageURL(`images/${data.files[index].name}`).subscribe((imageURL) => {\n image = imageURL;\n });\n \n }\n delete data.files[index].url;\n \n \n \n if (count == imagesFiles.length) {\n console.log('Criando Feed');\n \n const collection = this.db.collection(path().feed);\n collection.add(classToPlain(data)).then(response => {\n this.db.collection(path().feed).doc(response.id).update({ id: response.id });\n this.feedCreated.emit(response.id);\n resolve(response.id);\n });\n \n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n \n console.log('Publish()', 4);\n }\n }\n },\n error => {\n console.error('Error', error);\n });\n });\n }\n }\n else {\n console.log('Publish()', 5);\n console.log(data, this.tmpFileArray);\n \n const collection = this.db.collection(path().feed);\n collection.add(classToPlain(data)).then(response => {\n this.db.collection(path().feed).doc(response.id).update({ id: response.id });\n this.feedCreated.emit(response.id);\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n resolve(response.id);\n });\n \n }\n }\n else {\n console.log('Publish()', 5);\n console.log(data, this.tmpFileArray);\n \n const collection = this.db.collection(path().feed);\n collection.add(classToPlain(data)).then(response => {\n this.db.collection(path().feed).doc(response.id).update({ id: response.id });\n this.feedCreated.emit(response.id);\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n resolve(response.id);\n });\n }\n }\n else {\n data.files = this.tmpFileArray;\n console.log('Publish(Embed)', 6);\n console.log(data, this.tmpFileArray);\n const collection = this.db.collection(path().feed);\n collection.add(classToPlain(data)).then(response => {\n const doc = this.db.collection(path().feed).doc(response.id);\n doc.update({ id: response.id });\n this.feedCreated.emit(response.id);\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n this.embedFile = null;\n this.type = 'post';\n resolve(response.id);\n });\n }\n \n \n console.log('Publish()', 0, path().feed);\n this.title = '';\n this.progress = null;\n this.uploading = null;\n this.tmpFileArray = [];\n this.global.toastService.show({\n title: 'Feito!',\n message: 'Seu post foi criado com sucesso',\n layout: 2\n });\n });\n }\n\n removeTmpFile(tmpFile: any): void {\n const index = this.tmpFileArray.indexOf(tmpFile);\n this.tmpFileArray.splice(index, 1);\n }\n\n checkPublicationType(title) {\n console.log('Event ->', event);\n if (title.length && title.length > 35) {\n if (this.isValidUrl(title)) {\n console.log('checkPublicationType', title);\n if (title.includes('youtu') || title.includes('youtube')) {\n this.uploading = true;\n this.type = 'embed';\n this.uploading = false;\n this.embedFile = title.replace('watch?v=', 'embed/');\n this.tmpEmbedFile = this.sanitizer.bypassSecurityTrustResourceUrl(this.embedFile);\n }\n else if (title.includes('spotify')) {\n this.uploading = true;\n this.type = 'embed';\n this.embedFile = title.replace('/episode', '/embed-podcast/episode');\n this.tmpEmbedFile = this.sanitizer.bypassSecurityTrustResourceUrl(this.embedFile);\n this.uploading = false;\n }\n }\n }\n }\n\n removeEmbedFiles() {\n this.title = '';\n this.embedFile = '';\n this.type = 'post';\n }\n\n isValidUrl(str) {\n const pattern = new RegExp('^(https?:\\\\/\\\\/)?' + // protocol\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|' + // domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*' + // port and path\n '(\\\\?[;&a-z\\\\d%_.~+=-]*)?' + // query string\n '(\\\\#[-a-z\\\\d_]*)?$', 'i'); // fragment locator\n return !!pattern.test(str);\n }\n\n openAnnounceModal() {\n const dialogRef = this.dialog.open(ModalAnnounceComponent, {\n width: '55%',\n minHeight: '95%',\n maxHeight: '100%',\n closeOnNavigation: false,\n disableClose: true,\n data: { owner: this, tmpFileArray: this.tmpFileArray }\n });\n\n }\n\n reload() {\n this.filter.emit(this.filterByMe);\n }\n\n selectUser(evt: any, user: any) {\n if (evt.target.checked) {\n this.selectedUsers[user.id] = user;\n }\n else {\n delete this.selectedUsers[user.id];\n }\n }\n\n showSelected() {\n this.listType = 'checked';\n this.users = [];\n for (const id in this.selectedUsers) {\n this.users.push(this.selectedUsers[id]);\n }\n }\n\n public openModal() {\n if (this.newfeed) {\n $('#publicationModal').modal();\n }\n else {\n this.confirmShare();\n }\n }\n\n public getNewFeed() {\n this.selectedUsers = [];\n this.asapService.basePath = \"api/v2/admin\";\n this.asapService.entityName = \"color\";\n this.asapService.getResource(this.global.loggedUser().client_id).subscribe((response) => {\n this.newfeed = response.data.newfeed;\n });\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Global, AsapBaseService } from 'asap-crud';\n\n@Injectable()\nexport class ChannelService extends AsapBaseService {\n\n public isSubscriber = false;\n\n constructor(\n public http: HttpClient,\n public global: Global\n ) {\n super(http);\n this.basePath = \"api/v2/admin\";\n this.entityName = \"channel\";\n this.isSubscriber = false;\n };\n\n public channelLibrary(search,page) {\n if (page == null) page = 1;\n return this.createResource({search:search},{router:\"videos\",query:\"page=\" + page});\n }\n\n public channeGrouplLibrary(search,page) {\n if (page == null) page = 1;\n return this.createResource({search:search},{router:\"videos\",query:\"page=\" + page +'&group'});\n }\n\n public fileLibrary(search,page) {\n if (page == null) page = 1;\n return this.createResource({search:search},{router:\"files\",query:\"page=\" + page});\n }\n\n public fileGroupLibrary(search,page) {\n if (page == null) page = 1;\n return this.createResource({search:search},{router:\"files\",query:\"page=\" + page+'&group'});\n }\n\n public subscribe(channel_id, callback = null) {\n this.createResource({},{router:\"subscribe/\" + channel_id}).subscribe(() => {\n this.global.notification.success('Pronto', 'Inscrição efetuada com sucesso!')\n this.isSubscriber = true;\n if (callback) {\n callback();\n }\n });\n }\n\n public like(video_id, like = true, type = 'video') {\n let data:any;\n\n data = (like) ? {like: 1} : {unlike: 1};\n data.type = type;\n\n return this.createResource(data,{router: 'like/' + video_id});\n }\n\n public likev2(video_id, dados, type = 'video') {\n dados.type = type;\n return this.createResource(dados,{router: 'like/' + video_id});\n }\n \n\n public unsubscribe(channel_id, callback = null) {\n this.global.alert({\n type: \"warning\",\n text:\"Você realmente deseja cancelar sua inscrição?\",\n position: 'top-right',\n showCancelButton: true,\n confirmButtonText: \"Sim\",\n cancelButtonText: \"Não\"\n }).then(\n confirm => {\n if (confirm) {\n this.createResource({},{router:\"subscribe/\" + channel_id}).subscribe(() => {\n this.global.notification.info('Pronto', 'Você não está mais inscrito no Canal!')\n this.isSubscriber = false;\n\n if (callback) {\n callback();\n }\n });\n }\n },\n cancel => {}\n );\n \n }\n\n public getPlaylists(user_id = null, type='home') {\n return this.getResources({router: 'playlist/' + user_id + '?type=' + type});\n }\n\n public getPlaylist(playlist_id, user_id) {\n return this.getResources({router: 'playlist/' + playlist_id + '/' + user_id});\n }\n\n public createPlaylist(playlist_name) {\n let data:any;\n data = {name:playlist_name}\n return this.createResource(data, {router: 'playlist'});\n }\n\n public deletePlaylist(playlist_id) {\n return this.deleteResource(playlist_id);\n }\n\n public addVideoPlaylist(video_id, playlist_id) {\n let data: any;\n data = {video_id: video_id};\n console.log('VideoID ->', data.video_id);\n console.log('playlist_id ->', playlist_id);\n return this.createResource(data, {router: 'playlist/'+playlist_id});\n }\n\n public updateChannel(data) {\n return this.updateResource(data);\n }\n}","import { Component, ViewChild, OnInit } from '@angular/core';\nimport { OwlOptions } from 'ngx-owl-carousel-o';\nimport { Global } from 'asap-crud';\nimport { ChannelService } from '../services/channel.service';\nimport { AngularFirestore } from '@angular/fire/firestore';\n\nimport SwiperCore, { Pagination, SwiperOptions } from 'swiper';\n\nSwiperCore.use([Pagination]);\n\n@Component({\n selector: 'app-stories',\n templateUrl: './stories.component.html',\n styleUrls: ['../asap-feed.beta.componente.scss', './stories.component.scss'],\n providers: [ChannelService]\n})\n\nexport class StoriesComponent implements OnInit {\n\n constructor(\n public _channelService: ChannelService,\n public global: Global,\n public db: AngularFirestore\n ) {\n\n }\n\n public channelArray: any;\n public loading = true;\n\n storiesOptions: OwlOptions = {\n loop: true,\n mouseDrag: true,\n touchDrag: true,\n pullDrag: false,\n dots: false,\n navSpeed: 700,\n navText: ['', ''],\n nav: true,\n responsive: {\n 0: {\n items: 2.4,\n },\n 500: {\n items: 3.5,\n }\n }\n }\n\n config: SwiperOptions = {\n navigation: true,\n pagination: { clickable: true },\n autoHeight: false,\n breakpoints: {\n 0: {\n slidesPerView: 2.5,\n slidesPerGroup: 2.5,\n spaceBetween: 10\n },\n 480: {\n slidesPerView: 3.5,\n slidesPerGroup: 3.5,\n spaceBetween: 10\n }\n }\n };\n\n\n\n ngOnInit() {\n this.getChannels();\n }\n\n getChannels() {\n this._channelService.getResources({ query: 'type=recommended' }).subscribe((res: any) => {\n console.log('getChannels', res.data);\n this.channelArray = [];\n\n if (res.data.length) {\n do {\n this.channelArray = [\n ... this.channelArray,\n ...res.data\n ];\n } while (this.channelArray.length < 10)\n\n }\n\n this.channelArray.map(item => {\n this.getNotificationForChannels(item);\n });\n\n this.loading = false;\n // console.log('channelArray', this.channelArray);\n });\n }\n\n getNotificationForChannels(item) {\n let notification;\n if (this.global.loggedUser()) {\n\n const collection = this.db.collection('notifications', (ref: any) => {\n let query = ref.orderBy('viewed', 'asc')\n .orderBy('create_at', 'desc')\n .where('receiver_id', '==', this.global.loggedUser().id)\n .where('channel_id', '==', item.id.toString())\n .where('read', '==', false);\n return query;\n });\n\n collection.snapshotChanges().subscribe((notificationDoc) => {\n console.log('Notifications for Channels ->', notificationDoc);\n item.notifications = [];\n notificationDoc.map(data => {\n let notificationData: any = data.payload.doc.data();\n item.notifications.push(notificationData);\n });\n });\n }\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { AsapFeedBetaService } from '../asap-feed-beta.service';\n\n\n@Component({\n selector: 'app-feed-posts',\n templateUrl: './feed-posts.component.html'\n})\n\nexport class FeedPostsComponent implements OnInit{\n\n constructor(\n public route: ActivatedRoute,\n public asapFeedBetaService: AsapFeedBetaService,\n ){\n }\n\n ngOnInit() {\n\n }\n\n get settings() {\n let layout:any = JSON.parse(localStorage.getItem('layout_home'));\n if (layout && layout.main && layout.main.length) {\n const feed = layout.main.find(layout => layout.type == 'feed');\n return {\n ... feed,\n template: feed.template || 'template-2'\n };\n }\n return {\n template: 'template-2'\n };\n }\n\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { UserService } from '../../services/user.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'asap-auto-complete',\n templateUrl: './auto-complete.component.html',\n styleUrls: ['./auto-complete.component.scss'],\n providers: [ UserService ]\n})\nexport class AutoCompleteComponent implements OnChanges {\n\n @Input() input: any;\n @Output() userSelected = new EventEmitter();\n\n public options: any[];\n public loading = false; \n public lastSearch: string;\n public message: string;\n public startPosition: number;\n public endPosition: number;\n \n public panelTop: number;\n public panelStart: number;\n public panelWidth: number;\n\n public searching: Subscription;\n\n constructor(public service: UserService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.input && this.input) {\n this.panelTop = this.input.nativeElement.offsetTop + this.input.nativeElement.offsetHeight;\n this.panelStart = this.input.nativeElement.offsetLeft;\n this.panelWidth = this.input.nativeElement.offsetWidth;\n }\n }\n\n public get mark() {\n if (this.input) {\n const position = this.input.nativeElement.selectionStart;\n const mark = this.getMarkAtPosition(position);\n if (mark) {\n this.loadUsers(mark);\n }\n return mark;\n }\n\n return null;\n }\n\n loadUsers(value: any) {\n const search = value.substring(1);\n if (search && this.lastSearch != search) {\n if (this.searching) {\n this.searching.unsubscribe();\n }\n this.lastSearch = search;\n this.message = \"Carregando...\";\n this.options = [];\n this.loading = true;\n this.searching = this.service.getAllUsers(search).subscribe((response) => {\n this.searching.unsubscribe();\n this.searching = null;\n\n this.loading = false;\n this.options = response.data.map((user) => {\n return {\n id: user.user_info.user_id,\n name: user.user_info.user_name,\n email: user.email,\n picture: user.picture\n }\n });\n\n if (this.options.length == 0) {\n this.message = 'Nenhum usuário encontrado!';\n } else {\n this.message = '';\n }\n })\n }\n }\n\n public onSelect(selected: any) {\n if (this.input) {\n const value = this.input.nativeElement.value;\n const shift = 1 + selected.name.length - this.mark.length;\n this.input.nativeElement.value = value.substring(0, this.startPosition) + `@${selected.name}` + value.substring(this.endPosition);\n \n const evento = new Event('input');\n this.input.nativeElement.dispatchEvent(evento); \n this.userSelected.emit(selected);\n \n this.input.nativeElement.selectionStart = this.endPosition + shift;\n this.input.nativeElement.selectionEnd = this.endPosition + shift;\n this.input.nativeElement.focus();\n }\n }\n\n getMarkAtPosition(position) {\n const cursorPosition = position;\n if (!this.input || !this.input.nativeElement.value || cursorPosition === 0) {\n return \"\";\n }\n \n const phrase = this.input.nativeElement.value;\n const words = phrase.split(' ');\n let startPosition = 0;\n let endPosition = 0;\n\n for (let i = 0; i < words.length; i++) {\n endPosition += words[i].length;\n\n if (cursorPosition >= startPosition && cursorPosition <= endPosition) {\n if (words[i].startsWith('@')) {\n this.startPosition = startPosition;\n this.endPosition = endPosition;\n return words[i];\n }\n return \"\";\n }\n\n startPosition = endPosition + 1;\n endPosition = startPosition;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AsapFeedBetaComponent } from './asap-feed-beta.component';\nimport { CommonModule } from '@angular/common';\nimport { FeedItemComponent } from './feed-item/feed-item.component';\nimport { MomentModule } from 'ngx-moment';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { AsapSkeletonModule } from 'asap-skeleton';\nimport { PipesModule } from './pipes/pipes.module';\nimport { NgxHmCarouselModule } from 'ngx-hm-carousel';\nimport { FormsModule } from '@angular/forms';\nimport { FeedCommentsComponent } from './feed-comments/feed-comments.component';\nimport { FeedActionsComponent } from './feed-actions/feed-actions.component';\nimport { FeedPublicationComponent } from './feed-publication/feed-publication.component';\nimport { FeedModalItemEditComponent } from './feed-publication/feed-modal-item-edit/feed-modal-item-edit.component';\nimport { UtilsService } from './services/utils.service';\nimport { StoriesComponent } from './stories/stories.component';\nimport { OwlModule } from 'ngx-owl-carousel';\nimport { CarouselModule } from 'ngx-owl-carousel-o';\nimport { RouterModule } from '@angular/router';\nimport { ModalAnnounceComponent } from './feed-publication/modal-announce/modal-announce.component';\nimport { PopoverModule } from 'ngx-smart-popover';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { Global } from 'asap-crud';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatListModule } from '@angular/material/list';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { SwiperModule } from 'ngx-swiper-wrapper';\nimport 'moment/locale/pt-br';\nimport { AsapTabFeedComponent } from './tab-feed/asap-tab-feed.component';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { FeedPostsComponent } from './feed-posts/feed-posts.component';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { AutoCompleteComponent } from './components/auto-complete/auto-complete.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n MatButtonModule,\n MatIconModule,\n MatMenuModule,\n MatListModule,\n MatCardModule,\n MatDialogModule,\n MatSelectModule,\n MatRadioModule,\n MatInputModule,\n MatTooltipModule,\n MatProgressBarModule,\n MatStepperModule,\n MatTabsModule,\n MomentModule,\n TranslateModule,\n InfiniteScrollModule,\n AsapSkeletonModule,\n PipesModule,\n NgxHmCarouselModule,\n OwlModule,\n CarouselModule,\n NgxSkeletonLoaderModule,\n PopoverModule,\n SwiperModule,\n MatAutocompleteModule\n ],\n declarations: [\n AsapFeedBetaComponent,\n FeedItemComponent,\n FeedCommentsComponent,\n FeedActionsComponent,\n FeedPublicationComponent,\n FeedModalItemEditComponent,\n FeedPostsComponent,\n StoriesComponent,\n ModalAnnounceComponent,\n AsapTabFeedComponent,\n AutoCompleteComponent\n ],\n exports: [\n AsapFeedBetaComponent,\n FeedItemComponent,\n AsapTabFeedComponent,\n ],\n entryComponents: [\n AsapFeedBetaComponent,\n FeedModalItemEditComponent,\n ModalAnnounceComponent\n ],\n providers: [\n UtilsService\n ]\n})\nexport class AsapFeedBetaModule {\n\n constructor(public global: Global) {\n console.log('[AsapFeedBetaModule]', new Date());\n this.global.getOrCreateSessionData('AsapMyPageModule.tabs',[]).push({\n label: 'Meus Posts',\n component: AsapFeedBetaComponent,\n condition: (component,type) => (this.global.loggedUser() && this.global.hasPermission('my-posts',type) && component.hasFeed),\n loading: (component) => component.loading\n });\n }\n}\n","import { Routes } from '@angular/router';\nimport { FeedPostsComponent } from './feed-posts/feed-posts.component';\n\nexport const AsapFeedBetaRoting: Routes = [\n {\n path: ':feed_id',\n component: FeedPostsComponent\n }\n]"]}