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