asap-feed-beta 12.7.1 → 12.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/asap-feed-beta.umd.js +1 -1
- package/bundles/asap-feed-beta.umd.js.map +1 -1
- package/bundles/asap-feed-beta.umd.min.js +1 -1
- package/bundles/asap-feed-beta.umd.min.js.map +1 -1
- package/esm2015/lib/feed-comments/feed-comments.component.js +2 -2
- package/esm5/lib/feed-comments/feed-comments.component.js +2 -2
- package/fesm2015/asap-feed-beta.js +1 -1
- package/fesm2015/asap-feed-beta.js.map +1 -1
- package/fesm5/asap-feed-beta.js +1 -1
- package/fesm5/asap-feed-beta.js.map +1 -1
- package/package.json +1 -1
|
@@ -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","feed_users","allFeed","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","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","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","bypassSecurityTrustHtml","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 if (this.settings.tabs.channel_list.length) {\n this.feedLoad(this.settings.tabs.channel);\n }\n else {\n if (this.settings.tabs.feed) {\n this.feedLoad(this.settings.tabs.feed);\n } else if (this.settings.tabs.feed_users) {\n this.feedLoad(this.settings.tabs.feed_users);\n } else if (this.settings.tabs.allFeed) {\n this.feedLoad(this.settings.tabs.allFeed);\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';\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 ) { }\n\n ngOnInit() {\n this.loadVisibilityControls();\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 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 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(), params});\n }\n\n public getForms(): Observable<any> {\n return this.http.get(this.baseUrl + '/api/v2/admin/user/form', {headers: this.headers()});\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()});\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()});\n }\n return this.http.get(this.baseUrl + '/api/v2/admin/asap-user', {headers: this.headers()});\n }\n\n public getUserForm(): Observable<any> {\n return this.http.get(this.baseUrl + '/api/v2/admin/user/form' , {headers: this.headers()});\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()});\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}, {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\n this.publish(data).then((id) => {\n if (data.selected_users.length) {\n this.userService.usersChecked({post_id: id, user_id: data.selected_users}).subscribe();\n }\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","Component","selector","template","AngularFirestore","ActivatedRoute","Global","Input","HostListener","AsapTabFeedComponent","service","canShow","settings","tabs","channel_list","feedLoad","channel","feed_users","allFeed","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","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","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","bypassSecurityTrustHtml","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 if (this.settings.tabs.channel_list.length) {\n this.feedLoad(this.settings.tabs.channel);\n }\n else {\n if (this.settings.tabs.feed) {\n this.feedLoad(this.settings.tabs.feed);\n } else if (this.settings.tabs.feed_users) {\n this.feedLoad(this.settings.tabs.feed_users);\n } else if (this.settings.tabs.allFeed) {\n this.feedLoad(this.settings.tabs.allFeed);\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';\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 ) { }\n\n ngOnInit() {\n this.loadVisibilityControls();\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 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 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(), params});\n }\n\n public getForms(): Observable<any> {\n return this.http.get(this.baseUrl + '/api/v2/admin/user/form', {headers: this.headers()});\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()});\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()});\n }\n return this.http.get(this.baseUrl + '/api/v2/admin/asap-user', {headers: this.headers()});\n }\n\n public getUserForm(): Observable<any> {\n return this.http.get(this.baseUrl + '/api/v2/admin/user/form' , {headers: this.headers()});\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()});\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: 'post'}, {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\n this.publish(data).then((id) => {\n if (data.selected_users.length) {\n this.userService.usersChecked({post_id: id, user_id: data.selected_users}).subscribe();\n }\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]"]}
|