@clickview/lite 0.48.0-rc.7 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/scripts/{170-1f815b85a1-lite.chunk.js → 170-2d124965b7-lite.chunk.js} +2 -2
- package/dist/scripts/{170-1f815b85a1-lite.chunk.js.map → 170-2d124965b7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js → 1818-72409e60a9-lite.chunk.js} +1 -1
- package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js.map → 1818-72409e60a9-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1863-cf9df40052-lite.chunk.js → 1863-e7c4a6f342-lite.chunk.js} +1 -1
- package/dist/scripts/{1863-cf9df40052-lite.chunk.js.map → 1863-e7c4a6f342-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1958-9889c1ad24-lite.chunk.js → 1958-5336189397-lite.chunk.js} +1 -1
- package/dist/scripts/{1958-9889c1ad24-lite.chunk.js.map → 1958-5336189397-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2086-a247f6e201-lite.chunk.js → 2086-f7082703d0-lite.chunk.js} +1 -1
- package/dist/scripts/{2086-a247f6e201-lite.chunk.js.map → 2086-f7082703d0-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2118-462a279c5a-lite.chunk.js → 2118-ec2a5f1e9b-lite.chunk.js} +2 -2
- package/dist/scripts/{2118-462a279c5a-lite.chunk.js.map → 2118-ec2a5f1e9b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js → 2182-8e4d603a1b-lite.chunk.js} +1 -1
- package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js.map → 2182-8e4d603a1b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2279-5e92c84310-lite.chunk.js → 2279-252e92e1d8-lite.chunk.js} +1 -1
- package/dist/scripts/{2279-5e92c84310-lite.chunk.js.map → 2279-252e92e1d8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js → 2355-c588dc3ce2-lite.chunk.js} +1 -1
- package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js.map → 2355-c588dc3ce2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js → 2469-46411b862e-lite.chunk.js} +1 -1
- package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js.map → 2469-46411b862e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js → 2672-b01985cee8-lite.chunk.js} +1 -1
- package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js.map → 2672-b01985cee8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js → 2734-6a7beb2ce2-lite.chunk.js} +1 -1
- package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js.map → 2734-6a7beb2ce2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{287-ba98be7f21-lite.chunk.js → 287-3cbed16363-lite.chunk.js} +1 -1
- package/dist/scripts/{287-ba98be7f21-lite.chunk.js.map → 287-3cbed16363-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2875-0e5f209e47-lite.chunk.js → 2875-aefd69a61f-lite.chunk.js} +1 -1
- package/dist/scripts/{2875-0e5f209e47-lite.chunk.js.map → 2875-aefd69a61f-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3042-6650521d8b-lite.chunk.js → 3042-7c1b5e4ff7-lite.chunk.js} +1 -1
- package/dist/scripts/{3042-6650521d8b-lite.chunk.js.map → 3042-7c1b5e4ff7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3158-31baada6cc-lite.chunk.js → 3158-2147de456d-lite.chunk.js} +1 -1
- package/dist/scripts/{3158-31baada6cc-lite.chunk.js.map → 3158-2147de456d-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js → 3296-f3732c93d9-lite.chunk.js} +1 -1
- package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js.map → 3296-f3732c93d9-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3541-7ebd9db295-lite.chunk.js → 3541-15581012d3-lite.chunk.js} +1 -1
- package/dist/scripts/{3541-7ebd9db295-lite.chunk.js.map → 3541-15581012d3-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3841-95df66e647-lite.chunk.js → 3841-bfae79638b-lite.chunk.js} +2 -2
- package/dist/scripts/{3841-95df66e647-lite.chunk.js.map → 3841-bfae79638b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3888-0bee9a9309-lite.chunk.js → 3888-87c1075a1b-lite.chunk.js} +1 -1
- package/dist/scripts/{3888-0bee9a9309-lite.chunk.js.map → 3888-87c1075a1b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js → 4138-b9b03c9900-lite.chunk.js} +1 -1
- package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js.map → 4138-b9b03c9900-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4778-ebe369973c-lite.chunk.js → 4778-3c9f2b7f76-lite.chunk.js} +2 -2
- package/dist/scripts/{4778-ebe369973c-lite.chunk.js.map → 4778-3c9f2b7f76-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4942-a27a31e79e-lite.chunk.js → 4942-acce40b333-lite.chunk.js} +2 -2
- package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.map → 4942-acce40b333-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5075-f8719465be-lite.chunk.js → 5075-53172298fe-lite.chunk.js} +1 -1
- package/dist/scripts/{5075-f8719465be-lite.chunk.js.map → 5075-53172298fe-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5157-cd12e2e443-lite.chunk.js → 5157-47a0f5c088-lite.chunk.js} +1 -1
- package/dist/scripts/{5157-cd12e2e443-lite.chunk.js.map → 5157-47a0f5c088-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5268-f4db3933ff-lite.chunk.js → 5268-9b7560f3b1-lite.chunk.js} +2 -2
- package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.map → 5268-9b7560f3b1-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5442-01ffd95162-lite.chunk.js → 5442-5ddfa2d951-lite.chunk.js} +1 -1
- package/dist/scripts/{5442-01ffd95162-lite.chunk.js.map → 5442-5ddfa2d951-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js → 5591-119d72ede5-lite.chunk.js} +1 -1
- package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js.map → 5591-119d72ede5-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5595-3763b14d77-lite.chunk.js → 5595-628d4f252c-lite.chunk.js} +2 -2
- package/dist/scripts/5595-628d4f252c-lite.chunk.js.map +1 -0
- package/dist/scripts/{6102-4d948a5e48-lite.chunk.js → 6102-751dbbbf33-lite.chunk.js} +3 -3
- package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.map → 6102-751dbbbf33-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6158-0c5e44f800-lite.chunk.js → 6158-d123add596-lite.chunk.js} +1 -1
- package/dist/scripts/{6158-0c5e44f800-lite.chunk.js.map → 6158-d123add596-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6263-8957d50afe-lite.chunk.js → 6263-24e67b7df2-lite.chunk.js} +1 -1
- package/dist/scripts/{6263-8957d50afe-lite.chunk.js.map → 6263-24e67b7df2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6330-c66465bd6d-lite.chunk.js → 6330-9a2a5fc07e-lite.chunk.js} +1 -1
- package/dist/scripts/{6330-c66465bd6d-lite.chunk.js.map → 6330-9a2a5fc07e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{671-003843ca84-lite.chunk.js → 671-5571f33165-lite.chunk.js} +1 -1
- package/dist/scripts/{671-003843ca84-lite.chunk.js.map → 671-5571f33165-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7167-efe85af16e-lite.chunk.js → 7167-dc4c954c2b-lite.chunk.js} +1 -1
- package/dist/scripts/{7167-efe85af16e-lite.chunk.js.map → 7167-dc4c954c2b-lite.chunk.js.map} +1 -1
- package/dist/scripts/7293-58f4a7cf47-lite.chunk.js +2 -0
- package/dist/scripts/{7293-afd3349468-lite.chunk.js.map → 7293-58f4a7cf47-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js → 7301-7c9342ef0c-lite.chunk.js} +1 -1
- package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js.map → 7301-7c9342ef0c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7708-ece31b78a9-lite.chunk.js → 7708-e91903481a-lite.chunk.js} +1 -1
- package/dist/scripts/{7708-ece31b78a9-lite.chunk.js.map → 7708-e91903481a-lite.chunk.js.map} +1 -1
- package/dist/scripts/{771-eb60e33941-lite.chunk.js → 771-5612b4ffc2-lite.chunk.js} +2 -2
- package/dist/scripts/{771-eb60e33941-lite.chunk.js.map → 771-5612b4ffc2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7855-37bcdd134e-lite.chunk.js → 7855-4b69540a71-lite.chunk.js} +1 -1
- package/dist/scripts/{7855-37bcdd134e-lite.chunk.js.map → 7855-4b69540a71-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8024-66413cc05b-lite.chunk.js → 8024-765a4170c7-lite.chunk.js} +2 -2
- package/dist/scripts/{8024-66413cc05b-lite.chunk.js.map → 8024-765a4170c7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{823-58d27c255b-lite.chunk.js → 823-33c5207c68-lite.chunk.js} +1 -1
- package/dist/scripts/{823-58d27c255b-lite.chunk.js.map → 823-33c5207c68-lite.chunk.js.map} +1 -1
- package/dist/scripts/8261-69854ff4d5-lite.chunk.js +2 -0
- package/dist/scripts/8261-69854ff4d5-lite.chunk.js.map +1 -0
- package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js → 8466-cea62163e8-lite.chunk.js} +1 -1
- package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js.map → 8466-cea62163e8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8681-41edd08b98-lite.chunk.js → 8681-49db3daae6-lite.chunk.js} +2 -2
- package/dist/scripts/{8681-41edd08b98-lite.chunk.js.map → 8681-49db3daae6-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8772-9ae4d77363-lite.chunk.js → 8772-6c11095cea-lite.chunk.js} +1 -1
- package/dist/scripts/{8772-9ae4d77363-lite.chunk.js.map → 8772-6c11095cea-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js → 8906-2f6b5e4c5c-lite.chunk.js} +2 -2
- package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.map → 8906-2f6b5e4c5c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{920-4de8efbcf1-lite.chunk.js → 920-acc6596891-lite.chunk.js} +1 -1
- package/dist/scripts/{920-4de8efbcf1-lite.chunk.js.map → 920-acc6596891-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js → 9212-cc987a13bf-lite.chunk.js} +1 -1
- package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js.map → 9212-cc987a13bf-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js → 9242-144e7728ad-lite.chunk.js} +1 -1
- package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js.map → 9242-144e7728ad-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9264-d2285d4310-lite.chunk.js → 9264-518952f13f-lite.chunk.js} +1 -1
- package/dist/scripts/{9264-d2285d4310-lite.chunk.js.map → 9264-518952f13f-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js → 9478-4b3c088537-lite.chunk.js} +2 -2
- package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.map → 9478-4b3c088537-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9484-be04a34bbf-lite.chunk.js → 9484-b85011dbea-lite.chunk.js} +2 -2
- package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.map → 9484-b85011dbea-lite.chunk.js.map} +1 -1
- package/dist/scripts/{bundle-8f540a1154.min.js → bundle-c158cdd3a9.min.js} +3 -3
- package/dist/scripts/{bundle-8f540a1154.min.js.map → bundle-c158cdd3a9.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/5595-3763b14d77-lite.chunk.js.map +0 -1
- package/dist/scripts/7293-afd3349468-lite.chunk.js +0 -2
- package/dist/scripts/8261-72453f1978-lite.chunk.js +0 -2
- package/dist/scripts/8261-72453f1978-lite.chunk.js.map +0 -1
- /package/dist/scripts/{170-1f815b85a1-lite.chunk.js.LICENSE.txt → 170-2d124965b7-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2118-462a279c5a-lite.chunk.js.LICENSE.txt → 2118-ec2a5f1e9b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{3841-95df66e647-lite.chunk.js.LICENSE.txt → 3841-bfae79638b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4778-ebe369973c-lite.chunk.js.LICENSE.txt → 4778-3c9f2b7f76-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.LICENSE.txt → 4942-acce40b333-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.LICENSE.txt → 5268-9b7560f3b1-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.LICENSE.txt → 6102-751dbbbf33-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{771-eb60e33941-lite.chunk.js.LICENSE.txt → 771-5612b4ffc2-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8024-66413cc05b-lite.chunk.js.LICENSE.txt → 8024-765a4170c7-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8681-41edd08b98-lite.chunk.js.LICENSE.txt → 8681-49db3daae6-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.LICENSE.txt → 8906-2f6b5e4c5c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.LICENSE.txt → 9478-4b3c088537-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.LICENSE.txt → 9484-b85011dbea-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-8f540a1154.min.js.LICENSE.txt → bundle-c158cdd3a9.min.js.LICENSE.txt} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3888],{78259:(e,t,a)=>{a.d(t,{O:()=>c});var n=a(58176),r=a.n(n),i=a(39479),s={className:"info-link",defaultProtocol:"https"},c={linkifyText:function(e,t){if(e){var a=t?i.extend({},s,t):s;return r()(e,a)}}}},94644:(e,t,a)=>{a.d(t,{r:()=>o});var n=a(50242),r=a(81886),i=a(67058),s=a(14553),c=a(49267),d=a(49075),l={notFound:i.d,forbidden:{rating:s.q,yearLevel:s.q,region:c.a,privacy:s.q},badRequest:d._};function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},l),t);i&&r.Q.Ry.isStatusCodeError(i)&&(i!==n.o.NotFound?i!==n.o.Forbidden?a.badRequest||r.Q.Ry.throw(new s.badRequest):a.forbidden||r.Q.Ry.throw(new s.forbidden.privacy):a.notFound||r.Q.Ry.throw(new s.notFound))}}},91286:(e,t,a)=>{a.d(t,{v:()=>s});var n=a(32735),r=a(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function s(e,t,a){var s=Array.isArray(e)?e:[e];(0,n.useEffect)((function(){s.forEach((function(e){(0,r.r)(e.statusCode,t,a)}))}),[i(s),t,a])}},64554:(e,t,a)=>{a.r(t),a.d(t,{StudentsVideoView:()=>k});var n=a(32735),r=a(23481),i=a(20354),s=a(36848),c=a(83914),d=a(83345),l=a(4594),o=a(60051),m=a(43012),u=a(39151),v=a(20768),f=a(47812),p=a(31949),g=a(1575),E=a(91286),b=a(35223),h=a(64818),y=a(99719),N=a(14070),w=a(97291),S=a(57245),x=a(47288),C="userManager.studentsVideo",F=r.T.encloseNamespace(C);function k(e){var t,a,r,k=i.a.useBasicFetch(x.N.getUser(e.userId)),I=i.a.useBasicFetch((a=e.id,(r=e.typeId).toString()===l.E.Clip.toString()?m.e.clip(a):r.toString()===l.E.Interactive.toString()?v.b.interactiveMetadata(a):g.R.video(a))),R=i.a.useBasicFetch(f.k.createViewKey(e.id,o.f.MasterObject)),_=i.a.useBasicFetch(u.L.config()),j=i.a.useBasicFetch(p.N.currentUser());return(0,E.v)([k,I]),k.hasCompleted&&I.hasCompleted&&R.hasCompleted&&_.hasCompleted&&j.hasCompleted?n.createElement("div",{className:"px-3"},n.createElement("div",{className:"alert text-dark bg-light-blue px-2 rounded d-flex flex-column flex-lg-row justify-content-between mb-3 align-items-center",role:"alert"},n.createElement("div",{className:"d-flex align-items-center"},n.createElement(c.x,{svgName:b.vn.Info,size:c.S.Standard,className:"me-2 svg-container"}),n.createElement("div",{className:"w-100"},n.createElement("p",{className:"fw-semibold mb-0"},F(function(e){return e.toString()===l.E.Clip.toString()?"messageClip":e.toString()===l.E.Interactive.toString()?"messageInteractive":"messageVideo"}(e.typeId),{name:h.l.getFullName(k.data),yearGroup:null===(t=k.data.masterYearGroup)||void 0===t?void 0:t.name}))))),n.createElement("div",{className:"mb-3"},n.createElement(S._,{config:_.data,video:I.data,currentUser:j.data,viewKey:R.data})),n.createElement("div",{className:"d-flex justify-content-between align-items-center mb-2"},n.createElement("div",null,n.createElement("h1",{className:"h3 d-inline-flex m-0 mb-2"},I.data.name)),n.createElement(s.F,{appLink:{application:w.O.USER_MANAGER,action:N.e.UserManager.DELETE_STUDENTS_VIDEO,args:[e.userId,e.id],params:{typeId:e.typeId}},className:"btn btn-outline-dark"},n.createElement(d.x,{namespace:C,phrase:"delete"}))),n.createElement(y.X,{video:I.data})):n.createElement(n.Fragment,null)}}}]);
|
|
2
|
-
//# sourceMappingURL=3888-
|
|
2
|
+
//# sourceMappingURL=3888-87c1075a1b-lite.chunk.js.map
|
package/dist/scripts/{3888-0bee9a9309-lite.chunk.js.map → 3888-87c1075a1b-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/3888-0bee9a9309-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/react/utils/LinkifyHelper.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/projects/lite/src/apps/user-manager/views/students-video/StudentsVideoView.tsx"],"sourcesContent":["import { ObjectHash } from 'backbone';\nimport linkifyStr from 'linkifyjs/string';\nimport * as _ from 'underscore';\n\nconst BaseLinkifyOptions = {\n className: 'info-link',\n defaultProtocol: 'https'\n};\n\nexport const LinkifyHelper = {\n /**\n * The underlying linkifyStr interface escapes text within the input string\n */\n linkifyText(text: string, options?: ObjectHash): string {\n if (!text) return;\n const ops = options ? _.extend({}, BaseLinkifyOptions, options) : BaseLinkifyOptions;\n return linkifyStr(text, ops);\n }\n};","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { Config, CurrentUser, PlayerViewKey, User, VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { VideoDetailsWithScrollbar } from 'shared/components/video-details/VideoDetails';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { LitePlayerView } from 'shared/views/lite-player/LitePlayerView';\n\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\n\nconst namespace = 'userManager.studentsVideo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getRequest(id: string, typeId: string): Flight.Request {\n if (typeId.toString() === MasterType.Clip.toString())\n return ClipRequests.clip(id);\n\n if (typeId.toString() === MasterType.Interactive.toString())\n return InteractiveRequests.interactiveMetadata(id);\n\n return VideoRequests.video(id);\n}\n\nfunction getMessagePhrase(typeId: string): string {\n if (typeId.toString() === MasterType.Clip.toString())\n return 'messageClip';\n\n if (typeId.toString() === MasterType.Interactive.toString())\n return 'messageInteractive';\n\n return 'messageVideo';\n}\n\ninterface StudentsVideoProps {\n userId: string;\n id: string;\n typeId: string;\n}\n\nexport function StudentsVideoView(props: StudentsVideoProps): JSX.Element {\n const user = Flight.useBasicFetch<User>(UserManagerRequests.getUser(props.userId));\n\n const video = Flight.useBasicFetch<VideoTypes>(getRequest(props.id, props.typeId));\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(PlayerRequests.createViewKey(props.id, MediaIdType.MasterObject));\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n useHandleObjectError([ user, video ]);\n\n const dataLoaded = (\n user.hasCompleted &&\n video.hasCompleted &&\n viewKey.hasCompleted &&\n config.hasCompleted &&\n currentUser.hasCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <div className='px-3'>\n <div className='alert text-dark bg-light-blue px-2 rounded d-flex flex-column flex-lg-row justify-content-between mb-3 align-items-center' role='alert'>\n <div className='d-flex align-items-center'>\n <SvgContainer\n svgName={cvSvgLibrary.Info}\n size={SvgContainerSize.Standard}\n className='me-2 svg-container'\n />\n \n <div className='w-100'>\n <p className='fw-semibold mb-0'>\n {getPhrase(\n getMessagePhrase(props.typeId),\n { name: UserHelper.getFullName(user.data), yearGroup: user.data.masterYearGroup?.name }\n )}\n </p>\n </div>\n </div>\n </div>\n <div className='mb-3'>\n <LitePlayerView\n config={config.data}\n video={video.data}\n currentUser={currentUser.data}\n viewKey={viewKey.data}\n />\n </div>\n <div className='d-flex justify-content-between align-items-center mb-2'>\n <div>\n <h1 className='h3 d-inline-flex m-0 mb-2'>\n {video.data.name}\n </h1>\n </div>\n <AppLink\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.DELETE_STUDENTS_VIDEO,\n args: [ props.userId, props.id ],\n params: { typeId: props.typeId }\n }}\n className='btn btn-outline-dark'\n >\n <Text namespace={namespace} phrase='delete' />\n </AppLink>\n </div>\n <VideoDetailsWithScrollbar video={video.data} />\n </div>\n );\n}"],"names":["BaseLinkifyOptions","className","defaultProtocol","LinkifyHelper","linkifyText","text","options","ops","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","namespace","getPhrase","StudentsVideoView","props","id","typeId","user","userId","video","toString","viewKey","config","currentUser","hasCompleted","role","svgName","size","S","getMessagePhrase","name","data","yearGroup","masterYearGroup","appLink","application","action","args","params","phrase"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/3888-87c1075a1b-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/react/utils/LinkifyHelper.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/projects/lite/src/apps/user-manager/views/students-video/StudentsVideoView.tsx"],"sourcesContent":["import { ObjectHash } from 'backbone';\nimport linkifyStr from 'linkifyjs/string';\nimport * as _ from 'underscore';\n\nconst BaseLinkifyOptions = {\n className: 'info-link',\n defaultProtocol: 'https'\n};\n\nexport const LinkifyHelper = {\n /**\n * The underlying linkifyStr interface escapes text within the input string\n */\n linkifyText(text: string, options?: ObjectHash): string {\n if (!text) return;\n const ops = options ? _.extend({}, BaseLinkifyOptions, options) : BaseLinkifyOptions;\n return linkifyStr(text, ops);\n }\n};","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { Config, CurrentUser, PlayerViewKey, User, VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { VideoDetailsWithScrollbar } from 'shared/components/video-details/VideoDetails';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { LitePlayerView } from 'shared/views/lite-player/LitePlayerView';\n\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\n\nconst namespace = 'userManager.studentsVideo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getRequest(id: string, typeId: string): Flight.Request {\n if (typeId.toString() === MasterType.Clip.toString())\n return ClipRequests.clip(id);\n\n if (typeId.toString() === MasterType.Interactive.toString())\n return InteractiveRequests.interactiveMetadata(id);\n\n return VideoRequests.video(id);\n}\n\nfunction getMessagePhrase(typeId: string): string {\n if (typeId.toString() === MasterType.Clip.toString())\n return 'messageClip';\n\n if (typeId.toString() === MasterType.Interactive.toString())\n return 'messageInteractive';\n\n return 'messageVideo';\n}\n\ninterface StudentsVideoProps {\n userId: string;\n id: string;\n typeId: string;\n}\n\nexport function StudentsVideoView(props: StudentsVideoProps): JSX.Element {\n const user = Flight.useBasicFetch<User>(UserManagerRequests.getUser(props.userId));\n\n const video = Flight.useBasicFetch<VideoTypes>(getRequest(props.id, props.typeId));\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(PlayerRequests.createViewKey(props.id, MediaIdType.MasterObject));\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n useHandleObjectError([ user, video ]);\n\n const dataLoaded = (\n user.hasCompleted &&\n video.hasCompleted &&\n viewKey.hasCompleted &&\n config.hasCompleted &&\n currentUser.hasCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <div className='px-3'>\n <div className='alert text-dark bg-light-blue px-2 rounded d-flex flex-column flex-lg-row justify-content-between mb-3 align-items-center' role='alert'>\n <div className='d-flex align-items-center'>\n <SvgContainer\n svgName={cvSvgLibrary.Info}\n size={SvgContainerSize.Standard}\n className='me-2 svg-container'\n />\n \n <div className='w-100'>\n <p className='fw-semibold mb-0'>\n {getPhrase(\n getMessagePhrase(props.typeId),\n { name: UserHelper.getFullName(user.data), yearGroup: user.data.masterYearGroup?.name }\n )}\n </p>\n </div>\n </div>\n </div>\n <div className='mb-3'>\n <LitePlayerView\n config={config.data}\n video={video.data}\n currentUser={currentUser.data}\n viewKey={viewKey.data}\n />\n </div>\n <div className='d-flex justify-content-between align-items-center mb-2'>\n <div>\n <h1 className='h3 d-inline-flex m-0 mb-2'>\n {video.data.name}\n </h1>\n </div>\n <AppLink\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.DELETE_STUDENTS_VIDEO,\n args: [ props.userId, props.id ],\n params: { typeId: props.typeId }\n }}\n className='btn btn-outline-dark'\n >\n <Text namespace={namespace} phrase='delete' />\n </AppLink>\n </div>\n <VideoDetailsWithScrollbar video={video.data} />\n </div>\n );\n}"],"names":["BaseLinkifyOptions","className","defaultProtocol","LinkifyHelper","linkifyText","text","options","ops","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","namespace","getPhrase","StudentsVideoView","props","id","typeId","user","userId","video","toString","viewKey","config","currentUser","hasCompleted","role","svgName","size","S","getMessagePhrase","name","data","yearGroup","masterYearGroup","appLink","application","action","args","params","phrase"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4138],{38365:(e,t,n)=>{n.d(t,{n:()=>C,W:()=>O});var a=n(32735),r=n(80247),i=n(80130),o=n(92802),l=n(91967),c=n(1048),s=n(36848),u=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function m(e){var t=e.label,n=e.checkboxLabelClassName,r=e.checkboxLabelFontWeight,o=e.className,l=u(e,["label","checkboxLabelClassName","checkboxLabelFontWeight","className"]);return a.createElement(i.Z.Group,{className:"form-group"},a.createElement("div",{className:"form-check ".concat(o||"")},a.createElement(C,Object.assign({className:"form-check-input"},l)),a.createElement(i.Z.Label,{className:"form-check-label cursor-pointer ".concat("normal"===r?"fw-normal":""," \n ").concat(n),htmlFor:l.id},t),e.checkboxAppLink&&e.checkboxAppLinkText&&a.createElement(a.Fragment,null,a.createElement("span",null," "),a.createElement(s.F,{appLink:e.checkboxAppLink,className:"info-link"},e.checkboxAppLinkText))))}var d=n(83914),p=n(83345),f=n(73814),v=n(35223);function b(e){var t=(0,o.u6)().values[e.fieldName];return"string"!=typeof t?a.createElement(a.Fragment,null):a.createElement("div",{className:"float-end text-secondary fw-normal"},t.length,"/",e.limit," characters")}const h={revealPassword:"jCfI0",passwordInput:"RBJnf",passwordContainer:"d78lK",passwordContainerDisabled:"asbVo",infoTooltip:"wzyOG",spinner:"CycFx"};function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var g=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n},w="shared.formField";function C(e){var t,n,i=e.children,s=e.showLoadingSpinner,u=g(e,["children","showLoadingSpinner"]),m=(t=a.useState(e.type),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return y(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),p=m[0],f=m[1],b=l.q.isFunction(i)?function(e){return i(e)}:a.Children.count(i)?i:null;if("password"!==u.type)return s?a.createElement("div",{className:"position-relative"},a.createElement(o.gN,Object.assign({},c.t.omit(u,["formSize"])),b),a.createElement("div",{className:h.spinner},a.createElement(r.Z,{animation:"border",size:"sm"}))):a.createElement(o.gN,Object.assign({},c.t.omit(u,["formSize"])),b);var w="position-relative ".concat(h.passwordContainer);return u.className&&(w+=" ".concat(u.className)),u.disabled&&(w+=" ".concat(h.passwordContainerDisabled)),a.createElement("div",{className:w},a.createElement(o.gN,Object.assign({},c.t.omit(u,["formSize","type","className"]),{type:p,className:"".concat(h.passwordInput," border-0 w-100 h-100 outline-none rounded")}),b),"password"===u.type&&a.createElement(d.x,{svgName:"password"===p?v.vn.VisibleOn:v.vn.VisibleOff,className:"svg-container cursor-pointer ".concat(h.revealPassword),onClick:function(){f("password"===p?"text":"password")}}))}function O(e){var t=e.label,n=e.className,r=e.showCharacterCounter,l=e.showRequiredStar,s=e.infoTooltip,u=e.infoTooltipPlacement,y=e.infoText,O=e.formSize,E=e.showOptionalLabel,N=g(e,["label","className","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel"]),S=(0,o.u6)(),x=S.errors,j=S.touched,k=function(){};if("checkbox"===N.type){var P=c.t.omit(e,["formSize","infoTooltipPlacement"]);return e.disabled&&(P.onChange=k),a.createElement(m,Object.assign({},P))}var T=Object.assign(Object.assign({},N),{className:f.w.getCustomFormControlClassName(x,j,N.name,O,n,"string"==typeof e.as?e.as:null)});return e.disabled&&(T.onChange=k),a.createElement(i.Z.Group,{className:"form-group"},!!t&&a.createElement(i.Z.Label,{htmlFor:N.id,className:"d-flex align-items-center"},t,l&&a.createElement("span",{className:"text-danger"},"*"),s&&a.createElement(d.x,{className:"svg-container text-secondary ".concat(h.infoTooltip),svgName:v.vn.Info,title:s,tooltipPlacement:u,tooltipSpanHack:!0}),E&&a.createElement("span",{className:"text-secondary"}," ",a.createElement(p.x,{namespace:w,phrase:"optional"})),!!r&&!!N.maxLength&&a.createElement("div",{className:"ms-auto"},a.createElement(b,{fieldName:N.name,limit:N.maxLength}))),a.createElement(C,Object.assign({},T)),!!y&&a.createElement(i.Z.Text,{className:"text-secondary"},y),a.createElement(o.Bc,{name:N.name},(function(e){return a.createElement(i.Z.Control.Feedback,{type:"invalid"},e)})))}C.defaultProps={autoComplete:"off"},O.defaultProps={autoComplete:"off",infoTooltipPlacement:"top"}},82644:(e,t,n)=>{n.d(t,{b:()=>u,n:()=>s});var a=n(32735),r=n(92802),i=n(91967),o=n(1048);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var c=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function s(e){var t=e.castInitialValues,n=e.castValuesOnSubmit,s=e.initialValues,u=e.onSubmit,m=c(e,["castInitialValues","castValuesOnSubmit","initialValues","onSubmit"]),d=t&&e.validationSchema?e.validationSchema.cast(function(e){if(!e)return{};var t=o.t.deepClone(e);return function e(n){Object.keys(t).forEach((function(a){t.hasOwnProperty(a)&&(o.t.isObject(n[a])?e(n[a]):null===t[a]&&delete t[a])}))}(t),t}(s)):s,p={allowInitialSubmit:e.allowInitialSubmit};return a.createElement(r.J9,Object.assign({enableReinitialize:!0},m,{initialValues:d,onSubmit:function(t,a){var r=a.setSubmitting,i=a.resetForm,o=a.setFieldError,c=n&&e.validationSchema?e.validationSchema.cast(t):t;u(c,(function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(n.reset&&i(),n.errors)for(var a=0,c=Object.entries(n.errors);a<c.length;a++){var s=(e=c[a],t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=s[0],m=s[1];o(u,m)}r(!1)}))},initialStatus:p}),i.q.isFunction(e.children)?function(t){return e.children(t)}:a.Children.count(e.children)?e.children:null)}function u(){return(0,r.u6)()}s.defaultProps={castInitialValues:!0,castValuesOnSubmit:!0}},73814:(e,t,n)=>{n.d(t,{w:()=>r});var a=n(92802),r={getCustomFormControlClassName:function(e,t,n,r,i,o){var l="";return l=function(e,t){var n="";return n="select"===e?"form-select":"form-control","sm"===t&&(n+=" ".concat(n,"-sm")),"lg"===t&&(n+=" ".concat(n,"-lg")),n}(o,r),(0,a.u9)(t,n)&&(0,a.u9)(e,n)&&(l+=" is-invalid"),i&&(l+=" ".concat(i)),l}}},12174:(e,t,n)=>{n.r(t),n.d(t,{EditClipDetailsView:()=>L});var a=n(32735),r=n(70680),i=n(23481),o=n(81886),l=n(20354),c=n(28400),s=n(49985),u=n(74254),m=n(92802),d=n(5173),p=n(38365),f=n(82644),v=n(13876),b=n(72355),h=n(54610),y=n(4594),g=n(68626),w=i.T.encloseNamespace("shared.editClipDetails"),C=d.Ry().shape({name:d.Z_().trim().max(255,(function(){return w("titleTooLong")})).required((function(){return w("titleRequired")})).default(""),description:d.Z_().trim().max(16e3,(function(){return w("descriptionTooLong")})).default(""),startTime:d.Rx().required(),endTime:d.Rx().required(),status:d.nK()}).noUnknown();function O(e){var t=(0,f.b)();return a.createElement(m.l0,null,a.createElement("div",{className:"row form-group"},a.createElement("div",{className:"col-5"},a.createElement(b.u,{video:Object.assign({_parentVideo:e.video,typeId:y.E.Clip},t.values),type:"cosmetic",imageOptions:{size:h.h2.Small},textPosition:g.z.Independent,preload:!0})),a.createElement("div",{className:"col-7"},a.createElement("h2",{className:"h6"},t.values.name))),a.createElement(p.W,{label:w("nameLabel"),type:"text",name:"name",id:"name",placeholder:w("namePlaceholder"),autoFocus:!0,value:t.values.name}),a.createElement(p.W,{label:w("descriptionLabel"),component:"textarea",name:"description",id:"description",placeholder:w("descriptionPlaceholder"),value:t.values.description}),a.createElement(v.u,null,a.createElement(v.u.Cancel,{onClick:e.onClickCancel}),a.createElement(v.u.Submit,{isNew:e.isNew,text:e.isNew&&w("createClip"),variant:"dark"})))}function E(e){var t;return a.createElement(f.n,{initialValues:e.clip,validationSchema:C,onSubmit:e.saveClip,allowInitialSubmit:e.allowInitialSubmit},a.createElement(O,{video:e.video,isNew:!(null===(t=e.clip)||void 0===t?void 0:t.id)||e.isCopying,onClickCancel:e.onClickCancel}))}var N=n(9111),S=n(5960),x=n(43012),j=n(1575),k=n(69883),P=n(14070),T=n(97291),I=i.T.encloseNamespace("shared.editClipDetailsView");function L(e){var t,n,i,m,d,p,f,v,b,h=(0,r.I0)(),y=(0,k.Z)(),g=l.a.useBasicFetch(!!e.id&&x.e.clip(e.id)),w=(null===(n=null===(t=g.data)||void 0===t?void 0:t._parentVideo)||void 0===n?void 0:n.id)||e.videoId,C=l.a.useBasicFetch(!!w&&j.R.video(w)),O=isNaN(e.startTime)?null===(i=null==g?void 0:g.data)||void 0===i?void 0:i.startTime:e.startTime,L=isNaN(e.endTime)?null===(m=null==g?void 0:g.data)||void 0===m?void 0:m.endTime:e.endTime;if(!e.id&&!e.videoId)return a.createElement(a.Fragment,null);var F=!(!C.data||e.id&&!g.data);return a.createElement(N.G,{title:I(e.id?"editPopupHeading":"createPopupHeading"),closePopup:e.closePopup,showLoadingSpinner:!F},a.createElement(E,{video:C.data,clip:{id:null===(d=null==g?void 0:g.data)||void 0===d?void 0:d.id,name:e.isCopying?"".concat(I("copyPrefix")," ").concat(null===(p=null==g?void 0:g.data)||void 0===p?void 0:p.name):null===(f=null==g?void 0:g.data)||void 0===f?void 0:f.name,description:null===(v=null==g?void 0:g.data)||void 0===v?void 0:v.description,startTime:O,endTime:L,status:S.X.Published,thumbnail:null===(b=null==g?void 0:g.data)||void 0===b?void 0:b._thumbnail},saveClip:function(t){var n=function(n){y.success(I("success",{name:t.name,escapeText:!0})),s.k.logUserAction(Object.assign(Object.assign({},n),{videoId:w}),{actionType:e.id?u.Vw.Edit:u.Vw.Create,entity:u.py.Clip,location:u.LZ.Popup,workflowPhase:u.eu.Complete}),o.Q.C$.trigger({application:T.O.CLIPS,action:P.e.Clips.PLAY_CLIP,args:[n.id,c.m.slugify(n.name)]})},a=function(){y.error(I("error"))},r=function(){e.closePopup()},i=e.id&&!e.isCopying?x.e.updateClip(e.id,t,n,a,r):x.e.createClip(w,t,n,a,r);l.a.fetch(h,i)},onClickCancel:e.closePopup,isCopying:!!e.isCopying,allowInitialSubmit:!0}))}}}]);
|
|
2
|
-
//# sourceMappingURL=4138-
|
|
2
|
+
//# sourceMappingURL=4138-b9b03c9900-lite.chunk.js.map
|
package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js.map → 4138-b9b03c9900-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/4138-75a2bb69ab-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/libs/shared/src/apps/clips/components/edit-clip-details/EditClipDetails.tsx","file:///app/packages/projects/lite/src/shared/views/edit-clip-details/EditClipDetailsView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span> </span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = values[props.fieldName];\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className='form-group'>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className='d-flex align-items-center'>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'> <Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n\n <FieldWrapper {...fieldWrapperProps} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback type='invalid'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\n }\n};","import * as React from 'react';\nimport { Form } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper, useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Clip, CreateOrUpdateClipRequest, Video } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.editClipDetails';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst ClipValidationSchema = Yup.object().shape<CreateOrUpdateClipRequest>({\n name: Yup.string()\n .trim()\n .max(255, () => getPhrase('titleTooLong'))\n .required(() => getPhrase('titleRequired'))\n .default(''),\n\n description: Yup.string()\n .trim()\n .max(16000, () => getPhrase('descriptionTooLong'))\n .default(''),\n\n startTime: Yup.number()\n .required(),\n\n endTime: Yup.number()\n .required(),\n\n status: Yup.mixed<CurationStatus>()\n\n}).noUnknown();\n\ninterface EditClipDetailsFormProps {\n video: Video;\n onClickCancel: () => void;\n isNew?: boolean;\n}\n\nfunction EditClipDetailsForm(props: EditClipDetailsFormProps): React.ReactElement {\n const formikProps = useFormikContextWrapper<CreateOrUpdateClipRequest>();\n\n return (\n <Form>\n <div className='row form-group'>\n <div className='col-5'>\n <VideoThumbnail\n video={{\n _parentVideo: props.video,\n typeId: MasterType.Clip,\n ...formikProps.values as Clip\n }}\n type='cosmetic'\n imageOptions={{ size: ImageSize.Small }}\n textPosition={ThumbnailTextPosition.Independent}\n preload\n />\n </div>\n <div className='col-7'>\n <h2 className='h6'>{formikProps.values.name}</h2>\n </div>\n </div>\n <FormField\n label={getPhrase('nameLabel')}\n type='text'\n name='name'\n id ='name'\n placeholder={getPhrase('namePlaceholder')}\n autoFocus\n value={formikProps.values.name}\n />\n <FormField\n label={getPhrase('descriptionLabel')}\n component='textarea'\n name='description'\n id ='description'\n placeholder={getPhrase('descriptionPlaceholder')}\n value={formikProps.values.description}\n />\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.onClickCancel} />\n <PopupButtons.Submit\n isNew={props.isNew}\n text={props.isNew && getPhrase('createClip')}\n variant='dark'\n />\n </PopupButtons>\n </Form>\n );\n}\n\ninterface EditClipDetailsProps {\n video: Video;\n clip: Clip;\n saveClip: (data: CreateOrUpdateClipRequest, onDone: () => void) => void;\n onClickCancel: () => void;\n allowInitialSubmit?: boolean;\n isCopying: boolean;\n}\n\nexport function EditClipDetails(props: EditClipDetailsProps): React.ReactElement {\n return (\n <FormWrapper<CreateOrUpdateClipRequest>\n initialValues={props.clip}\n validationSchema={ClipValidationSchema}\n onSubmit={props.saveClip}\n allowInitialSubmit={props.allowInitialSubmit}\n >\n <EditClipDetailsForm\n video={props.video}\n isNew={!props.clip?.id || props.isCopying}\n onClickCancel={props.onClickCancel}\n />\n </FormWrapper>\n );\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { EditClipDetails } from 'libs/shared/apps/clips/components/edit-clip-details/EditClipDetails';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Clip, CreateOrUpdateClipRequest, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.editClipDetailsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface EditClipDetailsViewProps extends PopupViewProps {\n id?: string;\n videoId?: string;\n startTime?: number;\n endTime?: number;\n isCopying?: boolean;\n}\n\nexport function EditClipDetailsView(props: EditClipDetailsViewProps): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const clip = Flight.useBasicFetch<Clip>(!!props.id && ClipRequests.clip(props.id));\n const videoId = clip.data?._parentVideo?.id || props.videoId;\n const video = Flight.useBasicFetch<Video>(!!videoId && VideoRequests.video(videoId));\n\n const startTime = isNaN(props.startTime) ? clip?.data?.startTime : props.startTime;\n const endTime = isNaN(props.endTime) ? clip?.data?.endTime : props.endTime;\n \n function saveClip(data: CreateOrUpdateClipRequest): void {\n const success = (savedClip: Clip) => {\n alerts.success(getPhrase('success', { name: data.name, escapeText: true }));\n\n AnalyticsHelper.logUserAction({ ...savedClip, videoId }, {\n actionType: props.id ? UserAction.Edit : UserAction.Create,\n entity: EntityType.Clip,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ savedClip.id, TextHelper.slugify(savedClip.name) ]\n });\n };\n\n const error = () => {\n alerts.error(getPhrase('error'));\n };\n\n const always = () => {\n props.closePopup();\n };\n\n const request = props.id && !props.isCopying\n ? ClipRequests.updateClip(props.id, data, success, error, always)\n : ClipRequests.createClip(videoId, data, success, error, always);\n\n Flight.fetch(dispatch, request);\n }\n\n if (!props.id && !props.videoId)\n return <></>;\n\n const dataLoaded = !!video.data && (!props.id || !!clip.data);\n\n return (\n <Popup\n title={getPhrase(props.id ? 'editPopupHeading' : 'createPopupHeading')}\n closePopup={props.closePopup}\n showLoadingSpinner={!dataLoaded}\n >\n <EditClipDetails\n video={video.data}\n clip={{\n id: clip?.data?.id,\n name: props.isCopying ? `${getPhrase('copyPrefix')} ${clip?.data?.name}` : clip?.data?.name,\n description: clip?.data?.description,\n startTime,\n endTime,\n status: CurationStatus.Published,\n thumbnail: clip?.data?._thumbnail\n }}\n saveClip={saveClip}\n onClickCancel={props.closePopup}\n isCopying={!!props.isCopying}\n allowInitialSubmit\n />\n </Popup>\n );\n}"],"names":["FormCheckbox","props","label","checkboxLabelClassName","checkboxLabelFontWeight","className","fieldProps","Form","FieldWrapper","htmlFor","id","checkboxAppLink","checkboxAppLinkText","AppLink","appLink","CharacterCounter","field","values","fieldName","length","limit","namespace","children","showLoadingSpinner","type","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","size","containerClassName","disabled","SvgContainer","svgName","onClick","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","name","as","title","tooltipPlacement","tooltipSpanHack","Text","phrase","maxLength","errorMessage","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formikProps","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","value","useFormikContextWrapper","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","getPhrase","LanguageService","ClipValidationSchema","shape","trim","max","required","description","startTime","endTime","status","noUnknown","EditClipDetailsForm","VideoThumbnail","video","_parentVideo","typeId","MasterType","imageOptions","textPosition","ThumbnailTextPosition","preload","placeholder","autoFocus","component","PopupButtons","onClickCancel","isNew","text","variant","EditClipDetails","clip","saveClip","isCopying","EditClipDetailsView","dispatch","alerts","ClipRequests","videoId","data","VideoRequests","isNaN","dataLoaded","Popup","closePopup","CurationStatus","thumbnail","_thumbnail","success","savedClip","escapeText","AnalyticsHelper","actionType","entity","location","workflowPhase","application","action","args","TextHelper","error","always","request"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/4138-b9b03c9900-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/libs/shared/src/apps/clips/components/edit-clip-details/EditClipDetails.tsx","file:///app/packages/projects/lite/src/shared/views/edit-clip-details/EditClipDetailsView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span> </span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = values[props.fieldName];\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className='form-group'>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className='d-flex align-items-center'>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'> <Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n\n <FieldWrapper {...fieldWrapperProps} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback type='invalid'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\n }\n};","import * as React from 'react';\nimport { Form } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper, useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Clip, CreateOrUpdateClipRequest, Video } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.editClipDetails';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst ClipValidationSchema = Yup.object().shape<CreateOrUpdateClipRequest>({\n name: Yup.string()\n .trim()\n .max(255, () => getPhrase('titleTooLong'))\n .required(() => getPhrase('titleRequired'))\n .default(''),\n\n description: Yup.string()\n .trim()\n .max(16000, () => getPhrase('descriptionTooLong'))\n .default(''),\n\n startTime: Yup.number()\n .required(),\n\n endTime: Yup.number()\n .required(),\n\n status: Yup.mixed<CurationStatus>()\n\n}).noUnknown();\n\ninterface EditClipDetailsFormProps {\n video: Video;\n onClickCancel: () => void;\n isNew?: boolean;\n}\n\nfunction EditClipDetailsForm(props: EditClipDetailsFormProps): React.ReactElement {\n const formikProps = useFormikContextWrapper<CreateOrUpdateClipRequest>();\n\n return (\n <Form>\n <div className='row form-group'>\n <div className='col-5'>\n <VideoThumbnail\n video={{\n _parentVideo: props.video,\n typeId: MasterType.Clip,\n ...formikProps.values as Clip\n }}\n type='cosmetic'\n imageOptions={{ size: ImageSize.Small }}\n textPosition={ThumbnailTextPosition.Independent}\n preload\n />\n </div>\n <div className='col-7'>\n <h2 className='h6'>{formikProps.values.name}</h2>\n </div>\n </div>\n <FormField\n label={getPhrase('nameLabel')}\n type='text'\n name='name'\n id ='name'\n placeholder={getPhrase('namePlaceholder')}\n autoFocus\n value={formikProps.values.name}\n />\n <FormField\n label={getPhrase('descriptionLabel')}\n component='textarea'\n name='description'\n id ='description'\n placeholder={getPhrase('descriptionPlaceholder')}\n value={formikProps.values.description}\n />\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.onClickCancel} />\n <PopupButtons.Submit\n isNew={props.isNew}\n text={props.isNew && getPhrase('createClip')}\n variant='dark'\n />\n </PopupButtons>\n </Form>\n );\n}\n\ninterface EditClipDetailsProps {\n video: Video;\n clip: Clip;\n saveClip: (data: CreateOrUpdateClipRequest, onDone: () => void) => void;\n onClickCancel: () => void;\n allowInitialSubmit?: boolean;\n isCopying: boolean;\n}\n\nexport function EditClipDetails(props: EditClipDetailsProps): React.ReactElement {\n return (\n <FormWrapper<CreateOrUpdateClipRequest>\n initialValues={props.clip}\n validationSchema={ClipValidationSchema}\n onSubmit={props.saveClip}\n allowInitialSubmit={props.allowInitialSubmit}\n >\n <EditClipDetailsForm\n video={props.video}\n isNew={!props.clip?.id || props.isCopying}\n onClickCancel={props.onClickCancel}\n />\n </FormWrapper>\n );\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { EditClipDetails } from 'libs/shared/apps/clips/components/edit-clip-details/EditClipDetails';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Clip, CreateOrUpdateClipRequest, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.editClipDetailsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface EditClipDetailsViewProps extends PopupViewProps {\n id?: string;\n videoId?: string;\n startTime?: number;\n endTime?: number;\n isCopying?: boolean;\n}\n\nexport function EditClipDetailsView(props: EditClipDetailsViewProps): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const clip = Flight.useBasicFetch<Clip>(!!props.id && ClipRequests.clip(props.id));\n const videoId = clip.data?._parentVideo?.id || props.videoId;\n const video = Flight.useBasicFetch<Video>(!!videoId && VideoRequests.video(videoId));\n\n const startTime = isNaN(props.startTime) ? clip?.data?.startTime : props.startTime;\n const endTime = isNaN(props.endTime) ? clip?.data?.endTime : props.endTime;\n \n function saveClip(data: CreateOrUpdateClipRequest): void {\n const success = (savedClip: Clip) => {\n alerts.success(getPhrase('success', { name: data.name, escapeText: true }));\n\n AnalyticsHelper.logUserAction({ ...savedClip, videoId }, {\n actionType: props.id ? UserAction.Edit : UserAction.Create,\n entity: EntityType.Clip,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ savedClip.id, TextHelper.slugify(savedClip.name) ]\n });\n };\n\n const error = () => {\n alerts.error(getPhrase('error'));\n };\n\n const always = () => {\n props.closePopup();\n };\n\n const request = props.id && !props.isCopying\n ? ClipRequests.updateClip(props.id, data, success, error, always)\n : ClipRequests.createClip(videoId, data, success, error, always);\n\n Flight.fetch(dispatch, request);\n }\n\n if (!props.id && !props.videoId)\n return <></>;\n\n const dataLoaded = !!video.data && (!props.id || !!clip.data);\n\n return (\n <Popup\n title={getPhrase(props.id ? 'editPopupHeading' : 'createPopupHeading')}\n closePopup={props.closePopup}\n showLoadingSpinner={!dataLoaded}\n >\n <EditClipDetails\n video={video.data}\n clip={{\n id: clip?.data?.id,\n name: props.isCopying ? `${getPhrase('copyPrefix')} ${clip?.data?.name}` : clip?.data?.name,\n description: clip?.data?.description,\n startTime,\n endTime,\n status: CurationStatus.Published,\n thumbnail: clip?.data?._thumbnail\n }}\n saveClip={saveClip}\n onClickCancel={props.closePopup}\n isCopying={!!props.isCopying}\n allowInitialSubmit\n />\n </Popup>\n );\n}"],"names":["FormCheckbox","props","label","checkboxLabelClassName","checkboxLabelFontWeight","className","fieldProps","Form","FieldWrapper","htmlFor","id","checkboxAppLink","checkboxAppLinkText","AppLink","appLink","CharacterCounter","field","values","fieldName","length","limit","namespace","children","showLoadingSpinner","type","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","size","containerClassName","disabled","SvgContainer","svgName","onClick","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","name","as","title","tooltipPlacement","tooltipSpanHack","Text","phrase","maxLength","errorMessage","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formikProps","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","value","useFormikContextWrapper","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","getPhrase","LanguageService","ClipValidationSchema","shape","trim","max","required","description","startTime","endTime","status","noUnknown","EditClipDetailsForm","VideoThumbnail","video","_parentVideo","typeId","MasterType","imageOptions","textPosition","ThumbnailTextPosition","preload","placeholder","autoFocus","component","PopupButtons","onClickCancel","isNew","text","variant","EditClipDetails","clip","saveClip","isCopying","EditClipDetailsView","dispatch","alerts","ClipRequests","videoId","data","VideoRequests","isNaN","dataLoaded","Popup","closePopup","CurationStatus","thumbnail","_thumbnail","success","savedClip","escapeText","AnalyticsHelper","actionType","entity","location","workflowPhase","application","action","args","TextHelper","error","always","request"],"sourceRoot":""}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/*! For license information please see 4778-
|
|
1
|
+
/*! For license information please see 4778-3c9f2b7f76-lite.chunk.js.LICENSE.txt */
|
|
2
2
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4778],{34778:(t,e,r)=>{r.r(e),r.d(e,{AddVideoView:()=>N});var n=r(32735),o=r(60139),i=r(23481),a=r(20354),c=r(49985),u=r(65858),l=r(36848),s=r(9111),f=r(13876),h=r(83345),p=r(4594),d=r(1575),y=r(69883),v=r(65185),m=r(99742),g=r(14070),w=r(97291),b=r(99940),E={addVideo:function(t,e){return{key:"add:video:exchange",url:"{gateway}/v1/users/me/add-videos",data:{libraryId:t,objectId:e},type:b.k.POST,invalidationKeys:["videos:".concat(e,":"),"my:videos"]}}};function x(t){return x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},x(t)}function L(){L=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function l(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{l({},"")}catch(t){l=function(t,e,r){return t[e]=r}}function s(t,e,r,n){var i=e&&e.prototype instanceof m?e:m,a=Object.create(i.prototype),c=new A(n||[]);return o(a,"_invoke",{value:j(t,r,c)}),a}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=s;var h="suspendedStart",p="suspendedYield",d="executing",y="completed",v={};function m(){}function g(){}function w(){}var b={};l(b,a,(function(){return this}));var E=Object.getPrototypeOf,k=E&&E(E(I([])));k&&k!==r&&n.call(k,a)&&(b=k);var S=w.prototype=m.prototype=Object.create(b);function O(t){["next","throw","return"].forEach((function(e){l(t,e,(function(t){return this._invoke(e,t)}))}))}function _(t,e){function r(o,i,a,c){var u=f(t[o],t,i);if("throw"!==u.type){var l=u.arg,s=l.value;return s&&"object"==x(s)&&n.call(s,"__await")?e.resolve(s.__await).then((function(t){r("next",t,a,c)}),(function(t){r("throw",t,a,c)})):e.resolve(s).then((function(t){l.value=t,a(l)}),(function(t){return r("throw",t,a,c)}))}c(u.arg)}var i;o(this,"_invoke",{value:function(t,n){function o(){return new e((function(e,o){r(t,n,e,o)}))}return i=i?i.then(o,o):o()}})}function j(e,r,n){var o=h;return function(i,a){if(o===d)throw Error("Generator is already running");if(o===y){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=N(c,n);if(u){if(u===v)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===h)throw o=y,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=d;var l=f(e,r,n);if("normal"===l.type){if(o=n.done?y:p,l.arg===v)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(o=y,n.method="throw",n.arg=l.arg)}}}function N(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,N(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var i=f(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,v;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,v):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function P(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function T(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function A(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(P,this),this.reset(!0)}function I(e){if(e||""===e){var r=e[a];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function r(){for(;++o<e.length;)if(n.call(e,o))return r.value=e[o],r.done=!1,r;return r.value=t,r.done=!0,r};return i.next=i}}throw new TypeError(x(e)+" is not iterable")}return g.prototype=w,o(S,"constructor",{value:w,configurable:!0}),o(w,"constructor",{value:g,configurable:!0}),g.displayName=l(w,u,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===g||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,w):(t.__proto__=w,l(t,u,"GeneratorFunction")),t.prototype=Object.create(S),t},e.awrap=function(t){return{__await:t}},O(_.prototype),l(_.prototype,c,(function(){return this})),e.AsyncIterator=_,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new _(s(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},O(S),l(S,u,"Generator"),l(S,a,(function(){return this})),l(S,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},e.values=I,A.prototype={constructor:A,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(T),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function o(n,o){return c.type="throw",c.arg=e,r.next=n,o&&(r.method="next",r.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=n.call(a,"catchLoc"),l=n.call(a,"finallyLoc");if(u&&l){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,v):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),T(r),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;T(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:I(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),v}},e}function k(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,c=[],u=!0,l=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=i.call(r)).done)&&(c.push(n.value),c.length!==e);u=!0);}catch(t){l=!0,o=t}finally{try{if(!u&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(l)throw o}}return c}}(t,e)||function(t,e){if(t){if("string"==typeof t)return S(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?S(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function S(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}var O=function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function a(t){try{u(n.next(t))}catch(t){i(t)}}function c(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,c)}u((n=n.apply(t,e||[])).next())}))},_="shared.addVideo",j=i.T.encloseNamespace(_);function N(t){var e,r=(0,y.Z)(),i=a.a.useGetFetchAsync(),b=a.a.useBasicFetch(d.R.video(t.id)),x=k(n.useState(!1),2),S=x[0],N=x[1],P=k(n.useState(!1),2),T=P[0],A=P[1];return n.useEffect((function(){b.data&&!T&&function(){var e;O(this,void 0,void 0,L().mark((function n(){var a;return L().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return A(!0),n.prev=1,a=null===(e=b.data.libraries)||void 0===e?void 0:e.data.find((function(t){return t.typeId===p.E.ExchangeCollection})),n.next=5,i(E.addVideo(null==a?void 0:a.id,b.data.id));case 5:N(!0),r.success({heading:v.R.Success,message:j("success",{video:b.data.name}),type:o.NK.Success}),c.k.logUserAction({id:b.data.id,name:b.data.name},{actionType:u.Vw.Submit,descriptor:u.XX.AddToWorkspace,location:u.LZ.Popup,entity:u.py.Video}),n.next=14;break;case 10:n.prev=10,n.t0=n.catch(1),r.error(j("error")),t.closePopup();case 14:case"end":return n.stop()}}),n,null,[[1,10]])})))}()}),[null===(e=b.data)||void 0===e?void 0:e.id]),n.createElement(s.G,{title:j("title"),closePopup:t.closePopup,showLoadingSpinner:!S},S&&n.createElement(n.Fragment,null,n.createElement("div",{className:"mx-auto w-75 mt-1 mb-2"},n.createElement("img",{src:m.W.MyVideos.CONFETTI,className:"img-fluid",draggable:!1})),n.createElement("div",{className:"text-center pb-3"},n.createElement("h4",{className:"mb-2"},n.createElement(h.x,{namespace:_,phrase:"added"})))),n.createElement(f.u,null,n.createElement(f.u.Cancel,{text:j("close"),onClick:t.closePopup,variant:"link"}),n.createElement(l.F,{appLink:{application:w.O.MY_VIDEOS,action:g.e.MyVideos.MY_VIDEOS},onClick:t.closePopup,className:"btn btn-dark"},n.createElement(h.x,{namespace:_,phrase:"open"}))))}}}]);
|
|
3
|
-
//# sourceMappingURL=4778-
|
|
3
|
+
//# sourceMappingURL=4778-3c9f2b7f76-lite.chunk.js.map
|
package/dist/scripts/{4778-ebe369973c-lite.chunk.js.map → 4778-3c9f2b7f76-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/4778-
|
|
1
|
+
{"version":3,"file":"scripts/4778-3c9f2b7f76-lite.chunk.js","mappings":";6VAGaA,EAAmB,CAC9BC,SAAQ,SACNC,EACAC,GAEA,MAAO,CACLC,IAAK,qBACLC,IAAK,mCACLC,KAAM,CACJJ,UAAAA,EACAC,SAAAA,GAEFI,KAAMC,EAAA,OACNC,iBAAkB,CAAC,UAAD,OAAYN,EAAQ,KAAK,aAE/C,m4PCMIO,EAAY,kBACZC,EAAYC,EAAA,mBAAiCF,GAM7C,SAAUG,EAAaC,SACrBC,GAAS,SACTC,EAAa,uBAEbC,EAAQ,kBAA4BC,EAAA,QAAoBJ,EAAMK,KAEV,IAA9B,YAAwB,GAAM,GAAlDC,EAAK,KAAEC,EAAQ,KACqC,IAA9B,YAAwB,GAAM,GAApDC,EAAM,KAAEC,EAAS,KA6CzB,OA3CA,aAAgB,WACTN,EAAMX,OAAQgB,GAMrB,oIAQI,OAPFC,GAAU,GAAM,SAGRC,EAAsC,QAApB,EAAAP,EAAMX,KAAKmB,iBAAS,eAAEnB,KAAKoB,MACjD,SAAAC,GAAO,OAAIA,EAAQC,SAAWC,EAAA,oBAA6B,IAC5D,SAEKb,EAAkBhB,EAAiBC,SACvCuB,aAAe,EAAfA,EAAiBL,GACjBF,EAAMX,KAAKa,KACX,OAEFE,GAAS,GAETN,EAAOe,QAAQ,CACbC,QAASC,EAAA,UACTC,QAAStB,EAAU,UAAW,CAAEM,MAAOA,EAAMX,KAAK4B,OAClD3B,KAAM,eAGR4B,EAAA,gBACE,CAAEhB,GAAIF,EAAMX,KAAKa,GAAIe,KAAMjB,EAAMX,KAAK4B,MACtC,CACEE,WAAY,YACZC,WAAY,oBACZC,SAAU,WACVC,OAAQ,aAEV,kDAEFxB,EAAOyB,MAAM7B,EAAU,UACvBG,EAAM2B,aAAa,yDAEtB,CArCCxC,EACF,GAAG,CAAW,QAAV,EAAAgB,EAAMX,YAAI,eAAEa,KAuCd,gBAACuB,EAAA,EAAK,CACJC,MAAOhC,EAAU,SACjB8B,WAAY3B,EAAM2B,WAClBG,oBAAqBxB,GAEpBA,GACC,gCACE,uBAAKyB,UAAU,0BACb,uBAAKC,IAAKC,EAAA,oBAA6BF,UAAU,YAAYG,WAAW,KAG1E,uBAAKH,UAAU,oBACb,sBAAIA,UAAU,QACZ,gBAACI,EAAA,EAAI,CAACvC,UAAWA,EAAWwC,OAAQ,aAM5C,gBAACC,EAAA,EAAY,KACX,gBAACA,EAAA,SAAmB,CAClBC,KAAMzC,EAAU,SAChB0C,QAASvC,EAAM2B,WACfa,QAAQ,SAEV,gBAACC,EAAA,EAAO,CACNC,QAAS,CACPC,YAAa,cACbC,OAAQ,wBAEVL,QAASvC,EAAM2B,WACfI,UAAU,gBAEV,gBAACI,EAAA,EAAI,CAACvC,UAAWA,EAAWwC,OAAQ,WAK9C","sources":["file:///app/packages/projects/lite/src/shared/flight-requests/ExchangeRequets.ts","file:///app/packages/projects/lite/src/shared/views/add-video/AddVideoView.tsx"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nexport const ExchangeRequests = {\n addVideo(\n libraryId: string,\n objectId: string\n ): Flight.Request {\n return {\n key: 'add:video:exchange',\n url: '{gateway}/v1/users/me/add-videos',\n data: {\n libraryId,\n objectId\n },\n type: HttpVerbs.POST,\n invalidationKeys: [ `videos:${objectId}:`, 'my:videos' ]\n };\n }\n};","import React from 'react';\n\nimport { AlertType } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { DefaultAlertHeading } from 'shared/constants/DefaultAlertHeading';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ExchangeRequests } from 'shared/flight-requests/ExchangeRequets';\n\nconst namespace = 'shared.addVideo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface AddVideoViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function AddVideoView(props: AddVideoViewProps): JSX.Element {\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n\n const [ added, setAdded ] = React.useState<boolean>(false);\n const [ adding, setAdding ] = React.useState<boolean>(false);\n\n React.useEffect(() => {\n if (!video.data || adding)\n return;\n\n addVideo();\n }, [video.data?.id]);\n\n async function addVideo() {\n setAdding(true);\n\n try {\n const exchangeLibrary = video.data.libraries?.data.find(\n library => library.typeId === MasterType.ExchangeCollection\n );\n\n await fetchAsync<Video>(ExchangeRequests.addVideo(\n exchangeLibrary?.id,\n video.data.id\n ));\n\n setAdded(true);\n\n alerts.success({\n heading: DefaultAlertHeading.Success,\n message: getPhrase('success', { video: video.data.name }),\n type: AlertType.Success\n });\n\n AnalyticsHelper.logUserAction(\n { id: video.data.id, name: video.data.name },\n {\n actionType: UserAction.Submit,\n descriptor: VideoActionDescriptor.AddToWorkspace,\n location: LocationContext.Popup,\n entity: EntityType.Video\n }\n );\n } catch {\n alerts.error(getPhrase('error'));\n props.closePopup();\n }\n }\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n showLoadingSpinner={!added}\n >\n {added &&\n <>\n <div className='mx-auto w-75 mt-1 mb-2'>\n <img src={ImageUrls.MyVideos.CONFETTI} className='img-fluid' draggable={false} />\n </div>\n\n <div className='text-center pb-3'>\n <h4 className='mb-2'>\n <Text namespace={namespace} phrase={'added'} />\n </h4>\n </div>\n </>\n }\n\n <PopupButtons>\n <PopupButtons.Cancel\n text={getPhrase('close')}\n onClick={props.closePopup}\n variant='link'\n />\n <AppLink\n appLink={{\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS\n }}\n onClick={props.closePopup}\n className='btn btn-dark'\n >\n <Text namespace={namespace} phrase={'open'} />\n </AppLink>\n </PopupButtons>\n </Popup>\n );\n}"],"names":["ExchangeRequests","addVideo","libraryId","objectId","key","url","data","type","HttpVerbs","invalidationKeys","namespace","getPhrase","LanguageService","AddVideoView","props","alerts","fetchAsync","video","VideoRequests","id","added","setAdded","adding","setAdding","exchangeLibrary","libraries","find","library","typeId","MasterType","success","heading","DefaultAlertHeading","message","name","AnalyticsHelper","actionType","descriptor","location","entity","error","closePopup","Popup","title","showLoadingSpinner","className","src","ImageUrls","draggable","Text","phrase","PopupButtons","text","onClick","variant","AppLink","appLink","application","action"],"sourceRoot":""}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/*! For license information please see 4942-
|
|
1
|
+
/*! For license information please see 4942-acce40b333-lite.chunk.js.LICENSE.txt */
|
|
2
2
|
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4942],{23455:(e,t,r)=>{r.d(t,{h:()=>i});var n=r(32735),o=r(81886),a=r(20470);function i(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];n.useEffect((function(){t.length&&t.some(o.Q.Ry.isStatusCodeError)&&o.Q.Ry.throw(new a.x)}),t)}},12617:(e,t,r)=>{r.d(t,{E:()=>u});var n=r(99940),o=r(97395),a=r(62803),i=r(5960),c=r(4594),l=r(78417),u={videos:function(e,t,r){var n=a.v.VIDEO_COLLECTION,u=a.v.CLIP_COLLECTION,s=a.v.INTERACTIVE,d="videos[".concat(n,"]{libraries.typeid:").concat(c.E.WorkspaceCollection,"}"),f="clips[".concat(u,"]{status:").concat(i.X.Published,"}"),h="interactives[".concat(s,"]{status:[").concat(i.X.Published,",").concat(i.X.Draft,"]}"),p=[];(null==r?void 0:r.length)?(r.includes("video")&&p.push(d),r.includes("clip")&&p.push(f),r.includes("interactive")&&p.push(h)):p.push(d,f,h);var y={query:"(".concat(p.join("|"),"){orderbydesc:timestamp}"),permissionFilterOption:l.r.StripMetadata};return t&&(y.cursor=t),{url:o._.urlBuilder("{gateway}/v1/objects/".concat(e,"/members"),y),key:"my:videos:".concat(e,":").concat(t).concat(r?":".concat(Array.isArray(r)?r.join(":"):r):"")}},workspaceWithCategories:function(){return{url:o._.urlBuilder("/api/domain/v2/me/libraries",{type:["workspace"],maxCategoryDepth:6}),key:"workspace:folders",normalize:!1}},exchangeWithCategories:function(){return{url:o._.urlBuilder("/api/domain/v2/me/libraries",{type:["exchange"],maxCategoryDepth:5}),key:"exchange:folders",normalize:!1}},addFolder:function(e){var t="/api/domain/v2/collections/".concat(e.collectionId,"/categories");return e.parentCategoryId&&(t=o._.urlBuilder(t,{parentCategoryId:e.parentCategoryId})),{url:t,key:"add:folder",type:n.k.POST,data:{name:e.name},invalidationKeys:["workspace","folder"]}},deleteFolder:function(e){return{url:"{gateway}/v1/objects/".concat(e),key:"delete:folder",type:n.k.DELETE,invalidationKeys:["workspace","folder"]}},moveFolder:function(e){return{url:"/api/domain/v2/objects/move",key:"move:folder",type:n.k.POST,data:{assocType:"has",newCollectionId:e.newFolderId,oldCollectionId:e.oldFolderId,objectIds:[e.moveFolderId]},invalidationKeys:["workspace","folder"]}},updateFolder:function(e,t){return{url:"{gateway}/v1/objects/".concat(e),key:"rename:folder",type:n.k.PUT,data:{name:t},invalidationKeys:["workspace","folder"]}},videoFolders:function(e,t){return{url:"/api/domain/v2/objects/".concat(e,"/categories?query=libraries{id:").concat(t,"}"),key:"video:folders:".concat(e)}},moveVideo:function(e){var t={newCollectionId:e.newFolderId,oldCollectionId:e.oldFolderId,objectIds:e.videoId};return{url:"/api/domain/v3/objects/move",key:"move:folder:".concat(t.objectIds.join(",")),type:n.k.POST,data:t,invalidationKeys:["video"]}},addToExchange:function(e){return{url:"{gateway}/v1/users/me/videos/exchange",key:"add:to:exchange",type:n.k.POST,data:e}}}},54485:(e,t,r)=>{r.d(t,{b:()=>c});var n=r(32735),o=r(23481),a=r(11462),i=o.T.encloseNamespace("myVideos.hooks");function c(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return n.useMemo((function(){return(null==e?void 0:e.length)?{children:e.map((function(e){return Object.assign(Object.assign({},e),{data:Object.assign(Object.assign({},e.data),{name:t?i("myVideos"):e.data.name})})})).map(a.d.convertNestedObjectToTree)}:null}),[e])}},43482:(e,t,r)=>{r.r(t),r.d(t,{MoveFolderView:()=>N});var n=r(32735),o=r(23481),a=r(81886),i=r(20354),c=r(49985),l=r(65858),u=r(82644),s=r(9111),d=r(20470),f=r(98064),h=r(69883),p=r(23455),y=r(11462),v=r(14070),m=r(97291),g=r(12617),w=r(54485),b=r(42648),k=r(92802),E=r(5173),x=r(38365),I=r(13876),L=r(55367),O=o.T.encloseNamespace("myVideos.moveFolder"),j=E.Ry().shape({folder:E.Ry().required()});function C(e){var t=(0,k.u6)(),r=n.useMemo((function(){return y.d.getParent(e.folders,e.folderId)}),[e.folders,e.folderId]);return n.createElement(k.l0,null,n.createElement(x.W,{label:O("parentFolder"),name:"folder"},(function(){var o;return n.createElement(b.$B,{autoHeight:!0,autoHeightMax:300,className:"border rounded-3"},n.createElement(L.m,{tree:e.folders,onSelect:function(e){e&&t.setFieldValue("folder",e)},selectedIds:(null===(o=t.values.folder)||void 0===o?void 0:o.id)?[t.values.folder.id]:void 0,selectedLinkClassName:"bg-light",openDepth:1,isDisabled:function(e){return e.id===r.id},isClickDisabled:function(t){return t.id===e.folderId},disabledTooltip:function(t){return O(t.id===e.folderId?"sameFolder":"parentFolderWarning")},maxDisplayDepth:6}))})),n.createElement(I.u,null,n.createElement(I.u.Cancel,{onClick:e.onClickCancel}),n.createElement(I.u.Submit,{variant:"dark",showSpinner:e.showSpinner,text:O("moveFolder")})))}function F(e){return F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},F(e)}function S(){S=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function s(e,t,r,n){var a=t&&t.prototype instanceof m?t:m,i=Object.create(a.prototype),c=new P(n||[]);return o(i,"_invoke",{value:O(e,r,c)}),i}function d(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=s;var f="suspendedStart",h="suspendedYield",p="executing",y="completed",v={};function m(){}function g(){}function w(){}var b={};u(b,i,(function(){return this}));var k=Object.getPrototypeOf,E=k&&k(k(T([])));E&&E!==r&&n.call(E,i)&&(b=E);var x=w.prototype=m.prototype=Object.create(b);function I(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function L(e,t){function r(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var u=l.arg,s=u.value;return s&&"object"==F(s)&&n.call(s,"__await")?t.resolve(s.__await).then((function(e){r("next",e,i,c)}),(function(e){r("throw",e,i,c)})):t.resolve(s).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,n){function o(){return new t((function(t,o){r(e,n,t,o)}))}return a=a?a.then(o,o):o()}})}function O(t,r,n){var o=f;return function(a,i){if(o===p)throw Error("Generator is already running");if(o===y){if("throw"===a)throw i;return{value:e,done:!0}}for(n.method=a,n.arg=i;;){var c=n.delegate;if(c){var l=j(c,n);if(l){if(l===v)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===f)throw o=y,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=p;var u=d(t,r,n);if("normal"===u.type){if(o=n.done?y:h,u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(o=y,n.method="throw",n.arg=u.arg)}}}function j(t,r){var n=r.method,o=t.iterator[n];if(o===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,j(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var a=d(o,t.iterator,r.arg);if("throw"===a.type)return r.method="throw",r.arg=a.arg,r.delegate=null,v;var i=a.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function _(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function P(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function T(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(F(t)+" is not iterable")}return g.prototype=w,o(x,"constructor",{value:w,configurable:!0}),o(w,"constructor",{value:g,configurable:!0}),g.displayName=u(w,l,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,w):(e.__proto__=w,u(e,l,"GeneratorFunction")),e.prototype=Object.create(x),e},t.awrap=function(e){return{__await:e}},I(L.prototype),u(L.prototype,c,(function(){return this})),t.AsyncIterator=L,t.async=function(e,r,n,o,a){void 0===a&&(a=Promise);var i=new L(s(e,r,n,o),a);return t.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},I(x),u(x,l,"Generator"),u(x,i,(function(){return this})),u(x,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=T,P.prototype={constructor:P,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(_),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function o(n,o){return c.type="throw",c.arg=t,r.next=n,o&&(r.method="next",r.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(l&&u){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!u)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=t,a?(this.method="next",this.next=a.finallyLoc,v):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),_(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;_(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:T(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var P=function(e,t,r,n){return new(r||(r=Promise))((function(o,a){function i(e){try{l(n.next(e))}catch(e){a(e)}}function c(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,c)}l((n=n.apply(e,t||[])).next())}))},T=o.T.encloseNamespace("myVideos.moveFolder");function N(e){var t,r,o=(t=n.useState(!1),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a,i,c=[],l=!0,u=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=a.call(r)).done)&&(c.push(n.value),c.length!==t);l=!0);}catch(e){u=!0,o=e}finally{try{if(!l&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw o}}return c}}(t,r)||function(e,t){if(e){if("string"==typeof e)return _(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_(e,t):void 0}}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),b=o[0],k=o[1],E=i.a.useGetFetchAsync(),x=(0,h.Z)(),I=i.a.useBasicFetch(f.D.folder(e.id)),L=i.a.useBasicFetch(g.E.workspaceWithCategories()),O=(0,w.b)(L.data);(0,p.h)(I.statusCode,L.statusCode);var F=!!I.data&&!!L.data;return n.createElement(s.G,{title:T("title"),closePopup:e.closePopup,showLoadingSpinner:!F},F&&n.createElement(u.n,{initialValues:{folder:null},validationSchema:j,onSubmit:function(t){return P(this,void 0,void 0,S().mark((function r(){var n;return S().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(!y.d.isMaxDepth(L.data,I.data.id,t.folder.id)){r.next=4;break}return a.Q.C$.trigger({application:m.O.MY_VIDEOS,action:v.e.MyVideos.MAX_FOLDER_DEPTH,args:[y.q]}),e.closePopup(),r.abrupt("return");case 4:if(k(!0),n=y.d.getParent(O,e.id)){r.next=9;break}return a.Q.Ry.throw(new d.x),r.abrupt("return");case 9:return r.prev=9,r.next=12,E(g.E.moveFolder({moveFolderId:I.data.id,newFolderId:t.folder.id,oldFolderId:n.id}));case 12:x.success(T("success")),e.closePopup(),c.k.logUserAction({id:I.data.id,name:I.data.name,newFolderId:t.folder.id,oldFolderId:n.id},{entity:l.py.Folder,actionType:l.Vw.Move,workflowPhase:l.eu.Complete,location:l.LZ.Popup}),r.next=21;break;case 17:r.prev=17,r.t0=r.catch(9),x.error(T("error")),e.closePopup();case 21:case"end":return r.stop()}}),r,null,[[9,17]])})))},validateOnMount:!0},n.createElement(C,{folderId:e.id,onClickCancel:e.closePopup,folders:O,showSpinner:b})))}}}]);
|
|
3
|
-
//# sourceMappingURL=4942-
|
|
3
|
+
//# sourceMappingURL=4942-acce40b333-lite.chunk.js.map
|
package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.map → 4942-acce40b333-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/4942-a27a31e79e-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/hooks/UseHandleDialogError.ts","file:///app/packages/projects/lite/src/apps/my-videos/flight-requests/MyVideosRequests.ts","file:///app/packages/projects/lite/src/apps/my-videos/hooks/useShapeTree.ts","file:///app/packages/projects/lite/src/apps/my-videos/views/move-folder/MoveFolderForm.tsx","file:///app/packages/projects/lite/src/apps/my-videos/views/move-folder/MoveFolderView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { UnspecifiedDialogError } from 'libs/shared/errors/general/unspecified-dialog/UnspecifiedDialogError';\n\nexport function useHandleDialogError(...statusCodes: HttpStatus[]): void {\n React.useEffect(() => {\n if (!statusCodes.length)\n return;\n\n const hasErrorCode = statusCodes.some(Core.ErrorHelper.isStatusCodeError);\n\n if (!hasErrorCode)\n return;\n\n Core.ErrorHelper.throw(new UnspecifiedDialogError());\n }, statusCodes);\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\n\nimport { AddFolderRequest } from 'apps/my-videos/interfaces/requests/AddFolderRequest';\nimport { AddToExchangeRequest } from 'apps/my-videos/interfaces/requests/AddToExchangeRequest';\nimport { MoveFolderRequest } from 'apps/my-videos/interfaces/requests/MoveFolderRequest';\nimport { MoveVideoRequest } from 'apps/my-videos/interfaces/requests/MoveVideoRequest';\n\nexport const MyVideosRequests = {\n videos(id: string, cursor?: string, typeFilter?: SearchIndices | SearchIndices[]): Flight.Request {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const videoQuery = `videos[${VIDEO_COLLECTION}]{libraries.typeid:${MasterType.WorkspaceCollection}}`;\n const clipQuery = `clips[${CLIP_COLLECTION}]{status:${CurationStatus.Published}}`;\n const interactiveQuery = `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`;\n\n const query = [];\n if (typeFilter?.length) {\n if (typeFilter.includes('video'))\n query.push(videoQuery);\n if (typeFilter.includes('clip'))\n query.push(clipQuery);\n if (typeFilter.includes('interactive'))\n query.push(interactiveQuery);\n } else {\n query.push(videoQuery, clipQuery, interactiveQuery);\n }\n\n const params: HashObject = {\n query: `(${query.join('|')}){orderbydesc:timestamp}`,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}/members`, params),\n key: `my:videos:${id}:${cursor}${typeFilter ? `:${Array.isArray(typeFilter) ? typeFilter.join(':') : typeFilter}` : ''}`\n };\n },\n\n workspaceWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['workspace'],\n maxCategoryDepth: 6\n }),\n key: 'workspace:folders',\n normalize: false\n };\n },\n\n exchangeWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['exchange'],\n maxCategoryDepth: 5\n }),\n key: 'exchange:folders',\n normalize: false\n };\n },\n\n addFolder(data: AddFolderRequest): Flight.Request {\n // TODO: Need to stop using domain\n let url = `/api/domain/v2/collections/${data.collectionId}/categories`;\n\n if (data.parentCategoryId)\n url = UrlHelper.urlBuilder(url, { parentCategoryId: data.parentCategoryId });\n\n return {\n url,\n key: 'add:folder',\n type: HttpVerbs.POST,\n data: { name: data.name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n deleteFolder(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'delete:folder',\n type: HttpVerbs.DELETE,\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n moveFolder(data: MoveFolderRequest): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: '/api/domain/v2/objects/move',\n key: 'move:folder',\n type: HttpVerbs.POST,\n data: {\n assocType: 'has',\n newCollectionId: data.newFolderId,\n oldCollectionId: data.oldFolderId,\n objectIds: [data.moveFolderId]\n },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n updateFolder(id: string, name: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'rename:folder',\n type: HttpVerbs.PUT,\n data: { name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n videoFolders(videoId: string, libraryId: string): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: `/api/domain/v2/objects/${videoId}/categories?query=libraries{id:${libraryId}}`,\n key: `video:folders:${videoId}`\n };\n },\n\n moveVideo(request: MoveVideoRequest): Flight.Request {\n const data: HashObject = {\n newCollectionId: request.newFolderId,\n oldCollectionId: request.oldFolderId,\n objectIds: request.videoId\n };\n\n return {\n url: '/api/domain/v3/objects/move',\n key: `move:folder:${data.objectIds.join(',')}`,\n type: HttpVerbs.POST,\n data,\n invalidationKeys: ['video']\n };\n },\n\n addToExchange(data: AddToExchangeRequest): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/videos/exchange',\n key: 'add:to:exchange',\n type: HttpVerbs.POST,\n data\n };\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { BaseObject, BaseTree, MasterNestedObject } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nconst namespace = 'myVideos.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useShapeTree<T extends BaseObject>(\n trees: MasterNestedObject<T>[],\n rename: boolean = true\n): BaseTree<T> {\n return React.useMemo(() => {\n if (!trees?.length)\n return null;\n\n /**\n * Renaming \"<fullName>'s Workspace\"\n * to \"My Videos\"\n */\n const renamed = trees.map(t => ({\n ...t,\n data: {\n ...t.data,\n name: rename ? getPhrase('myVideos') : t.data.name\n }\n }));\n\n const rootBranches = renamed.map(TreeHelper.convertNestedObjectToTree);\n\n return {\n children: rootBranches\n } as BaseTree<T>;\n }, [trees]);\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport { Form, useFormikContext } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Tree } from 'libs/shared/components/tree/Tree';\nimport { BaseTree, Folder } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nconst namespace = 'myVideos.moveFolder';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const MoveFolderValidationSchema = Yup.object().shape({\n folder: Yup.object().required()\n});\n\nexport interface MoveFolderFormData {\n folder: Folder;\n}\n\ninterface MoveFolderFormProps {\n folderId: string;\n onClickCancel: () => void;\n folders: BaseTree<Folder>;\n showSpinner: boolean;\n}\n\nexport function MoveFolderForm(props: MoveFolderFormProps): JSX.Element {\n const formikProps = useFormikContext<MoveFolderFormData>();\n\n const parent = React.useMemo(() => {\n return TreeHelper.getParent(props.folders, props.folderId);\n }, [ props.folders, props.folderId ]);\n\n return (\n <Form>\n <FormField\n label={getPhrase('parentFolder')}\n name='folder'\n >\n {() => (\n <Scrollbars autoHeight autoHeightMax={300} className='border rounded-3'>\n <Tree\n tree={props.folders}\n onSelect={(folder: Folder) => {\n if (!folder) return;\n formikProps.setFieldValue('folder', folder);\n }}\n selectedIds={formikProps.values.folder?.id ? [formikProps.values.folder.id] : undefined}\n selectedLinkClassName='bg-light'\n openDepth={1}\n isDisabled={tree => tree.id === parent.id}\n isClickDisabled={tree => tree.id === props.folderId}\n disabledTooltip={folder => getPhrase(folder.id === props.folderId ? 'sameFolder' : 'parentFolderWarning')}\n maxDisplayDepth={6}\n />\n </Scrollbars>\n )}\n </FormField>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.onClickCancel} />\n <PopupButtons.Submit variant='dark' showSpinner={props.showSpinner} text={getPhrase('moveFolder')} />\n </PopupButtons>\n </Form>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { UnspecifiedDialogError } from 'libs/shared/errors/general/unspecified-dialog/UnspecifiedDialogError';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleDialogError } from 'libs/shared/hooks/UseHandleDialogError';\nimport { Folder, LibraryTree, PopupViewProps } from 'libs/shared/interfaces';\nimport { DEFAULT_MAX_DEPTH, TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MyVideosRequests } from 'apps/my-videos/flight-requests/MyVideosRequests';\nimport { useShapeTree } from 'apps/my-videos/hooks/useShapeTree';\n\nimport { MoveFolderForm, MoveFolderFormData, MoveFolderValidationSchema } from './MoveFolderForm';\n\nconst namespace = 'myVideos.moveFolder';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MoveFolderViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function MoveFolderView(props: MoveFolderViewProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const folder = Flight.useBasicFetch<Folder>(LibraryRequests.folder(props.id));\n const workspaceFolders = Flight.useBasicFetch<LibraryTree[]>(MyVideosRequests.workspaceWithCategories());\n const folders = useShapeTree(workspaceFolders.data);\n\n useHandleDialogError(folder.statusCode, workspaceFolders.statusCode);\n \n async function onSubmit(data: MoveFolderFormData): Promise<void> {\n if (TreeHelper.isMaxDepth(workspaceFolders.data, folder.data.id, data.folder.id)) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MAX_FOLDER_DEPTH,\n args: [DEFAULT_MAX_DEPTH]\n });\n props.closePopup();\n return;\n }\n\n setShowSpinner(true);\n\n const parent = TreeHelper.getParent(folders, props.id);\n\n if (!parent) {\n // This is a classic \"This should never happen\" comment\n Core.ErrorHelper.throw(new UnspecifiedDialogError());\n return;\n }\n\n try {\n await fetchAsync(MyVideosRequests.moveFolder({\n moveFolderId: folder.data.id,\n newFolderId: data.folder.id,\n oldFolderId: parent.id\n }));\n alerts.success(getPhrase('success'));\n props.closePopup();\n\n AnalyticsHelper.logUserAction({\n id: folder.data.id,\n name: folder.data.name,\n newFolderId: data.folder.id,\n oldFolderId: parent.id\n }, {\n entity: EntityType.Folder,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n } catch {\n alerts.error(getPhrase('error'));\n props.closePopup();\n }\n }\n\n const hasLoaded = (\n !!folder.data &&\n !!workspaceFolders.data\n );\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n showLoadingSpinner={!hasLoaded}\n >\n {hasLoaded &&\n <FormWrapper<MoveFolderFormData>\n initialValues={{ folder: null }}\n validationSchema={MoveFolderValidationSchema}\n onSubmit={onSubmit}\n validateOnMount\n >\n <MoveFolderForm\n folderId={props.id}\n onClickCancel={props.closePopup}\n folders={folders}\n showSpinner={showSpinner}\n />\n </FormWrapper>\n }\n </Popup>\n );\n}"],"names":["useHandleDialogError","statusCodes","length","some","MyVideosRequests","videos","id","cursor","typeFilter","VIDEO_COLLECTION","CLIP_COLLECTION","INTERACTIVE","videoQuery","clipQuery","interactiveQuery","query","includes","push","params","join","permissionFilterOption","url","key","Array","isArray","workspaceWithCategories","type","maxCategoryDepth","normalize","exchangeWithCategories","addFolder","data","collectionId","parentCategoryId","name","invalidationKeys","deleteFolder","moveFolder","assocType","newCollectionId","newFolderId","oldCollectionId","oldFolderId","objectIds","moveFolderId","updateFolder","videoFolders","videoId","libraryId","moveVideo","request","addToExchange","getPhrase","useShapeTree","trees","rename","children","map","t","LanguageService","MoveFolderValidationSchema","shape","folder","required","MoveFolderForm","props","formikProps","parent","TreeHelper","folders","folderId","FormField","label","autoHeight","autoHeightMax","className","Tree","tree","onSelect","setFieldValue","selectedIds","values","undefined","selectedLinkClassName","openDepth","isDisabled","isClickDisabled","disabledTooltip","maxDisplayDepth","PopupButtons","onClick","onClickCancel","variant","showSpinner","text","MoveFolderView","setShowSpinner","fetchAsync","alerts","LibraryRequests","workspaceFolders","statusCode","hasLoaded","Popup","title","closePopup","showLoadingSpinner","FormWrapper","initialValues","validationSchema","onSubmit","application","action","args","UnspecifiedDialogError","success","AnalyticsHelper","entity","actionType","workflowPhase","location","error","validateOnMount"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/4942-acce40b333-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/hooks/UseHandleDialogError.ts","file:///app/packages/projects/lite/src/apps/my-videos/flight-requests/MyVideosRequests.ts","file:///app/packages/projects/lite/src/apps/my-videos/hooks/useShapeTree.ts","file:///app/packages/projects/lite/src/apps/my-videos/views/move-folder/MoveFolderForm.tsx","file:///app/packages/projects/lite/src/apps/my-videos/views/move-folder/MoveFolderView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { UnspecifiedDialogError } from 'libs/shared/errors/general/unspecified-dialog/UnspecifiedDialogError';\n\nexport function useHandleDialogError(...statusCodes: HttpStatus[]): void {\n React.useEffect(() => {\n if (!statusCodes.length)\n return;\n\n const hasErrorCode = statusCodes.some(Core.ErrorHelper.isStatusCodeError);\n\n if (!hasErrorCode)\n return;\n\n Core.ErrorHelper.throw(new UnspecifiedDialogError());\n }, statusCodes);\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\n\nimport { AddFolderRequest } from 'apps/my-videos/interfaces/requests/AddFolderRequest';\nimport { AddToExchangeRequest } from 'apps/my-videos/interfaces/requests/AddToExchangeRequest';\nimport { MoveFolderRequest } from 'apps/my-videos/interfaces/requests/MoveFolderRequest';\nimport { MoveVideoRequest } from 'apps/my-videos/interfaces/requests/MoveVideoRequest';\n\nexport const MyVideosRequests = {\n videos(id: string, cursor?: string, typeFilter?: SearchIndices | SearchIndices[]): Flight.Request {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const videoQuery = `videos[${VIDEO_COLLECTION}]{libraries.typeid:${MasterType.WorkspaceCollection}}`;\n const clipQuery = `clips[${CLIP_COLLECTION}]{status:${CurationStatus.Published}}`;\n const interactiveQuery = `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`;\n\n const query = [];\n if (typeFilter?.length) {\n if (typeFilter.includes('video'))\n query.push(videoQuery);\n if (typeFilter.includes('clip'))\n query.push(clipQuery);\n if (typeFilter.includes('interactive'))\n query.push(interactiveQuery);\n } else {\n query.push(videoQuery, clipQuery, interactiveQuery);\n }\n\n const params: HashObject = {\n query: `(${query.join('|')}){orderbydesc:timestamp}`,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}/members`, params),\n key: `my:videos:${id}:${cursor}${typeFilter ? `:${Array.isArray(typeFilter) ? typeFilter.join(':') : typeFilter}` : ''}`\n };\n },\n\n workspaceWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['workspace'],\n maxCategoryDepth: 6\n }),\n key: 'workspace:folders',\n normalize: false\n };\n },\n\n exchangeWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['exchange'],\n maxCategoryDepth: 5\n }),\n key: 'exchange:folders',\n normalize: false\n };\n },\n\n addFolder(data: AddFolderRequest): Flight.Request {\n // TODO: Need to stop using domain\n let url = `/api/domain/v2/collections/${data.collectionId}/categories`;\n\n if (data.parentCategoryId)\n url = UrlHelper.urlBuilder(url, { parentCategoryId: data.parentCategoryId });\n\n return {\n url,\n key: 'add:folder',\n type: HttpVerbs.POST,\n data: { name: data.name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n deleteFolder(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'delete:folder',\n type: HttpVerbs.DELETE,\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n moveFolder(data: MoveFolderRequest): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: '/api/domain/v2/objects/move',\n key: 'move:folder',\n type: HttpVerbs.POST,\n data: {\n assocType: 'has',\n newCollectionId: data.newFolderId,\n oldCollectionId: data.oldFolderId,\n objectIds: [data.moveFolderId]\n },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n updateFolder(id: string, name: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'rename:folder',\n type: HttpVerbs.PUT,\n data: { name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n videoFolders(videoId: string, libraryId: string): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: `/api/domain/v2/objects/${videoId}/categories?query=libraries{id:${libraryId}}`,\n key: `video:folders:${videoId}`\n };\n },\n\n moveVideo(request: MoveVideoRequest): Flight.Request {\n const data: HashObject = {\n newCollectionId: request.newFolderId,\n oldCollectionId: request.oldFolderId,\n objectIds: request.videoId\n };\n\n return {\n url: '/api/domain/v3/objects/move',\n key: `move:folder:${data.objectIds.join(',')}`,\n type: HttpVerbs.POST,\n data,\n invalidationKeys: ['video']\n };\n },\n\n addToExchange(data: AddToExchangeRequest): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/videos/exchange',\n key: 'add:to:exchange',\n type: HttpVerbs.POST,\n data\n };\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { BaseObject, BaseTree, MasterNestedObject } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nconst namespace = 'myVideos.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useShapeTree<T extends BaseObject>(\n trees: MasterNestedObject<T>[],\n rename: boolean = true\n): BaseTree<T> {\n return React.useMemo(() => {\n if (!trees?.length)\n return null;\n\n /**\n * Renaming \"<fullName>'s Workspace\"\n * to \"My Videos\"\n */\n const renamed = trees.map(t => ({\n ...t,\n data: {\n ...t.data,\n name: rename ? getPhrase('myVideos') : t.data.name\n }\n }));\n\n const rootBranches = renamed.map(TreeHelper.convertNestedObjectToTree);\n\n return {\n children: rootBranches\n } as BaseTree<T>;\n }, [trees]);\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport { Form, useFormikContext } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Tree } from 'libs/shared/components/tree/Tree';\nimport { BaseTree, Folder } from 'libs/shared/interfaces';\nimport { TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nconst namespace = 'myVideos.moveFolder';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const MoveFolderValidationSchema = Yup.object().shape({\n folder: Yup.object().required()\n});\n\nexport interface MoveFolderFormData {\n folder: Folder;\n}\n\ninterface MoveFolderFormProps {\n folderId: string;\n onClickCancel: () => void;\n folders: BaseTree<Folder>;\n showSpinner: boolean;\n}\n\nexport function MoveFolderForm(props: MoveFolderFormProps): JSX.Element {\n const formikProps = useFormikContext<MoveFolderFormData>();\n\n const parent = React.useMemo(() => {\n return TreeHelper.getParent(props.folders, props.folderId);\n }, [ props.folders, props.folderId ]);\n\n return (\n <Form>\n <FormField\n label={getPhrase('parentFolder')}\n name='folder'\n >\n {() => (\n <Scrollbars autoHeight autoHeightMax={300} className='border rounded-3'>\n <Tree\n tree={props.folders}\n onSelect={(folder: Folder) => {\n if (!folder) return;\n formikProps.setFieldValue('folder', folder);\n }}\n selectedIds={formikProps.values.folder?.id ? [formikProps.values.folder.id] : undefined}\n selectedLinkClassName='bg-light'\n openDepth={1}\n isDisabled={tree => tree.id === parent.id}\n isClickDisabled={tree => tree.id === props.folderId}\n disabledTooltip={folder => getPhrase(folder.id === props.folderId ? 'sameFolder' : 'parentFolderWarning')}\n maxDisplayDepth={6}\n />\n </Scrollbars>\n )}\n </FormField>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.onClickCancel} />\n <PopupButtons.Submit variant='dark' showSpinner={props.showSpinner} text={getPhrase('moveFolder')} />\n </PopupButtons>\n </Form>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { UnspecifiedDialogError } from 'libs/shared/errors/general/unspecified-dialog/UnspecifiedDialogError';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleDialogError } from 'libs/shared/hooks/UseHandleDialogError';\nimport { Folder, LibraryTree, PopupViewProps } from 'libs/shared/interfaces';\nimport { DEFAULT_MAX_DEPTH, TreeHelper } from 'libs/shared/utils/TreeHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MyVideosRequests } from 'apps/my-videos/flight-requests/MyVideosRequests';\nimport { useShapeTree } from 'apps/my-videos/hooks/useShapeTree';\n\nimport { MoveFolderForm, MoveFolderFormData, MoveFolderValidationSchema } from './MoveFolderForm';\n\nconst namespace = 'myVideos.moveFolder';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MoveFolderViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function MoveFolderView(props: MoveFolderViewProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const folder = Flight.useBasicFetch<Folder>(LibraryRequests.folder(props.id));\n const workspaceFolders = Flight.useBasicFetch<LibraryTree[]>(MyVideosRequests.workspaceWithCategories());\n const folders = useShapeTree(workspaceFolders.data);\n\n useHandleDialogError(folder.statusCode, workspaceFolders.statusCode);\n \n async function onSubmit(data: MoveFolderFormData): Promise<void> {\n if (TreeHelper.isMaxDepth(workspaceFolders.data, folder.data.id, data.folder.id)) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MAX_FOLDER_DEPTH,\n args: [DEFAULT_MAX_DEPTH]\n });\n props.closePopup();\n return;\n }\n\n setShowSpinner(true);\n\n const parent = TreeHelper.getParent(folders, props.id);\n\n if (!parent) {\n // This is a classic \"This should never happen\" comment\n Core.ErrorHelper.throw(new UnspecifiedDialogError());\n return;\n }\n\n try {\n await fetchAsync(MyVideosRequests.moveFolder({\n moveFolderId: folder.data.id,\n newFolderId: data.folder.id,\n oldFolderId: parent.id\n }));\n alerts.success(getPhrase('success'));\n props.closePopup();\n\n AnalyticsHelper.logUserAction({\n id: folder.data.id,\n name: folder.data.name,\n newFolderId: data.folder.id,\n oldFolderId: parent.id\n }, {\n entity: EntityType.Folder,\n actionType: UserAction.Move,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n } catch {\n alerts.error(getPhrase('error'));\n props.closePopup();\n }\n }\n\n const hasLoaded = (\n !!folder.data &&\n !!workspaceFolders.data\n );\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n showLoadingSpinner={!hasLoaded}\n >\n {hasLoaded &&\n <FormWrapper<MoveFolderFormData>\n initialValues={{ folder: null }}\n validationSchema={MoveFolderValidationSchema}\n onSubmit={onSubmit}\n validateOnMount\n >\n <MoveFolderForm\n folderId={props.id}\n onClickCancel={props.closePopup}\n folders={folders}\n showSpinner={showSpinner}\n />\n </FormWrapper>\n }\n </Popup>\n );\n}"],"names":["useHandleDialogError","statusCodes","length","some","MyVideosRequests","videos","id","cursor","typeFilter","VIDEO_COLLECTION","CLIP_COLLECTION","INTERACTIVE","videoQuery","clipQuery","interactiveQuery","query","includes","push","params","join","permissionFilterOption","url","key","Array","isArray","workspaceWithCategories","type","maxCategoryDepth","normalize","exchangeWithCategories","addFolder","data","collectionId","parentCategoryId","name","invalidationKeys","deleteFolder","moveFolder","assocType","newCollectionId","newFolderId","oldCollectionId","oldFolderId","objectIds","moveFolderId","updateFolder","videoFolders","videoId","libraryId","moveVideo","request","addToExchange","getPhrase","useShapeTree","trees","rename","children","map","t","LanguageService","MoveFolderValidationSchema","shape","folder","required","MoveFolderForm","props","formikProps","parent","TreeHelper","folders","folderId","FormField","label","autoHeight","autoHeightMax","className","Tree","tree","onSelect","setFieldValue","selectedIds","values","undefined","selectedLinkClassName","openDepth","isDisabled","isClickDisabled","disabledTooltip","maxDisplayDepth","PopupButtons","onClick","onClickCancel","variant","showSpinner","text","MoveFolderView","setShowSpinner","fetchAsync","alerts","LibraryRequests","workspaceFolders","statusCode","hasLoaded","Popup","title","closePopup","showLoadingSpinner","FormWrapper","initialValues","validationSchema","onSubmit","application","action","args","UnspecifiedDialogError","success","AnalyticsHelper","entity","actionType","workflowPhase","location","error","validateOnMount"],"sourceRoot":""}
|