@clickview/lite 0.81.2 → 0.82.0-rc.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.
Files changed (28) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/languages/en.json +1 -1
  3. package/dist/scripts/{1969-800b184fc1-lite.chunk.js → 1969-ad6210f903-lite.chunk.js} +3 -3
  4. package/dist/scripts/1969-ad6210f903-lite.chunk.js.map +1 -0
  5. package/dist/scripts/3700-183b5127a1-lite.chunk.js +3 -0
  6. package/dist/scripts/3700-183b5127a1-lite.chunk.js.map +1 -0
  7. package/dist/scripts/{4134-7c9953ed9c-lite.chunk.js → 4134-0351c9f683-lite.chunk.js} +2 -2
  8. package/dist/scripts/{4134-7c9953ed9c-lite.chunk.js.map → 4134-0351c9f683-lite.chunk.js.map} +1 -1
  9. package/dist/scripts/7288-aeb358a012-lite.chunk.js +2 -0
  10. package/dist/scripts/7288-aeb358a012-lite.chunk.js.map +1 -0
  11. package/dist/scripts/{7604-bd0283d577-lite.chunk.js → 7604-f664281904-lite.chunk.js} +3 -3
  12. package/dist/scripts/7604-f664281904-lite.chunk.js.map +1 -0
  13. package/dist/scripts/7996-ad1567eb42-lite.chunk.js +2 -0
  14. package/dist/scripts/7996-ad1567eb42-lite.chunk.js.map +1 -0
  15. package/dist/scripts/bundle-b6ada106d1.min.js +3 -0
  16. package/dist/scripts/{bundle-d51ac7bd71.min.js.map → bundle-b6ada106d1.min.js.map} +1 -1
  17. package/package.json +1 -1
  18. package/dist/scripts/1969-800b184fc1-lite.chunk.js.map +0 -1
  19. package/dist/scripts/3700-b077e78193-lite.chunk.js +0 -3
  20. package/dist/scripts/3700-b077e78193-lite.chunk.js.map +0 -1
  21. package/dist/scripts/7288-0749315a12-lite.chunk.js +0 -2
  22. package/dist/scripts/7288-0749315a12-lite.chunk.js.map +0 -1
  23. package/dist/scripts/7604-bd0283d577-lite.chunk.js.map +0 -1
  24. package/dist/scripts/bundle-d51ac7bd71.min.js +0 -3
  25. /package/dist/scripts/{1969-800b184fc1-lite.chunk.js.LICENSE.txt → 1969-ad6210f903-lite.chunk.js.LICENSE.txt} +0 -0
  26. /package/dist/scripts/{3700-b077e78193-lite.chunk.js.LICENSE.txt → 3700-183b5127a1-lite.chunk.js.LICENSE.txt} +0 -0
  27. /package/dist/scripts/{7604-bd0283d577-lite.chunk.js.LICENSE.txt → 7604-f664281904-lite.chunk.js.LICENSE.txt} +0 -0
  28. /package/dist/scripts/{bundle-d51ac7bd71.min.js.LICENSE.txt → bundle-b6ada106d1.min.js.LICENSE.txt} +0 -0
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7288],{70197:(e,r,t)=>{var s;t.d(r,{q:()=>s}),function(e){e.YearGroupValues="yearGroups.value",e.UserProfilesStatus="userProfiles.status"}(s||(s={}))},47288:(e,r,t)=>{t.d(r,{N:()=>k});var s,a,n=t(99940),o=t(97395),u=t(1048),c=t(39739),i=t(62803),l=t(70197);!function(e){e.yearGroups="yearGroups",e.userProfiles="userProfiles"}(s||(s={})),function(e){e.TermsGroupBy="terms-group-by",e.NestedTermsGroupBy="nested-terms-group-by"}(a||(a={}));var d,y=t(5960),v=t(54610),g=t(78417);function m(e){return m="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},m(e)}function p(e){return function(e){if(Array.isArray(e))return f(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,r){if(e){if("string"==typeof e)return f(e,r);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?f(e,r):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,s=Array(r);t<r;t++)s[t]=e[t];return s}function h(e,r,t){return(r=function(e){var r=function(e){if("object"!=m(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var t=r.call(e,"string");if("object"!=m(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(r)?r:r+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}!function(e){e.Content="content",e.OnlineContent="online_content",e.User="user",e.Customer="customer",e.Tag="tag",e.Organisation="organisation",e.Channel="channel"}(d||(d={}));var k={getUsers:function(e,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=arguments.length>3?arguments[3]:void 0,a=arguments.length>4?arguments[4]:void 0,n=arguments.length>5?arguments[5]:void 0,u={query:c.P.buildGetUsersQuery(r,t)};s&&(u.cursor=s);var i="school:users:".concat(e,":").concat(r);return i+=Object.keys(u).map(function(e){return u[e]}).join(":"),{url:o._.urlBuilder("{gateway}/v1/customers/".concat(e,"/users"),u),key:i,success:a,error:n}},getUser:function(e){return{url:"{gateway}/v1/users/".concat(e,"?query=avatar"),key:"school:users:".concat(e)}},getStudentVideos:function(e,r){var t=i.v.VIDEO_COLLECTION,s=i.v.CLIP_COLLECTION,a=i.v.INTERACTIVE,n=["videos[".concat(t,"]{status:[").concat(y.X.Published,",").concat(y.X.Draft,"]}"),"clips[".concat(s,"]{status:[").concat(y.X.Published,",").concat(y.X.Draft,"]}"),"interactives[".concat(a,"]{status:[").concat(y.X.Published,",").concat(y.X.Draft,"]}")],u={query:"(".concat(n.join("|"),"){orderbydesc:timestamp}"),permissionFilterOption:g.r.StripMetadata};return r&&(u.cursor=r),{url:o._.urlBuilder("{gateway}/v1/objects/".concat(e,"/members"),u),key:"school:users:videos:".concat(e,":").concat(r)}},bulkRemoveUsers:function(e,r,t,s){var a,o=["school:users","search:users","search:aggregation"];return(null===(a=e.userIds)||void 0===a?void 0:a.length)&&e.userIds.forEach(function(e){return o.push("school:users:".concat(e))}),{url:"{gateway}/v1/users/delete",key:"delete:school:users",invalidationKeys:o,type:n.k.POST,data:e,success:r,error:t,always:s}},removeUsersFromSchool:function(e){return{url:"{gateway}/v1/users/remove",key:"remove:school:users",invalidationKeys:["school:users","search:users","search:aggregation"],type:n.k.POST,data:e}},createUsers:function(e){var r=e.users,t=e.success,s=e.error,a=e.always;return{url:"{gateway}/v1/users",key:"create:users",data:r,type:n.k.POST,invalidationKeys:["school:users","user:count","search:users"],success:t,error:s,always:a}},updateUser:function(e,r,t,s,a,o){var u=["school:users:".concat(e.userId)];return r.toString()===e.userId.toString()&&u.push("currentuser"),{url:"{gateway}/v1/users",key:"edit:user",type:n.k.PUT,data:e,invalidationKeys:["search:aggregation"],success:t,error:s,always:a,updateState:{keys:"search:user:count",updateData:function(e){if(!o)return e;var r=Object.keys(e),t=Object.assign({},e);return r.forEach(function(r){r.includes("filters.yearGroup.value:0")&&(t[r].count=e[r].count-1)}),t}}}},updateCurrentUser:function(e,r,t,s){return{url:"{gateway}/v1/users/me/profile",key:"edit:current:user",type:n.k.PUT,data:e,invalidationKeys:["search:aggregation","currentuser"],success:r,error:t,always:s}},searchUsers:function(e,r,t){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=arguments.length>4?arguments[4]:void 0,o=arguments.length>5?arguments[5]:void 0,u=arguments.length>6?arguments[6]:void 0,i=c.P.buildSearchDataAndKey({customerId:e,userId:r,userType:t,queryParams:s,cursor:a}),l=i.data,d=i.key;return{url:"{gateway}/v3/search",data:l,type:n.k.POST,key:d,success:o,error:u}},getSearchUserIds:function(e,r,t){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=arguments.length>4?arguments[4]:void 0,o=arguments.length>5?arguments[5]:void 0,i=c.P.buildSearchData({customerId:e,userId:r,userType:t,queryParams:s}),l="search:user:ids";return{url:"{gateway}/v3/search/ids",key:l+=u.t.flattenObjectToString(i),data:i,type:n.k.POST,normalize:!1,success:a,error:o}},getSearchAggregation:function(e){var r=e.userId,t=e.customerId,o=e.userType,u=e.queryParams,i=void 0===u?{}:u,y=e.userIds,v=e.field,g=v===l.q.UserProfilesStatus?s.userProfiles:s.yearGroups,m=c.P.buildSearchFiltersObject(t,o,i),p="search:aggregation:".concat(r,":").concat(t,":").concat(v,":");p+=Object.keys(m).sort().map(function(e){return m[e]}).join(":"),p+=":"+y.join(":");var f={indices:["user"],searchType:d.User,isLearner:!1,type:a.NestedTermsGroupBy,userId:r.toString(),customerId:t.toString(),data:{field:v,nestedPath:g,termsFilters:h({},"".concat(g,".customerId"),[t])},idFilters:y,filters:m};return{url:"{gateway}/v1/search/aggregation",type:n.k.POST,key:p,data:f,normalize:!1,formatData:function(e){var r=e.termCount;return v!==l.q.UserProfilesStatus?r:Object.keys(r).reduce(function(e,t){return e[t.charAt(0).toUpperCase()+t.slice(1)]=r[t],e},{})}}},bulkToggleActivation:function(e,r,t,s,a){return{url:"{gateway}/v1/users/status",key:"update:users:status",type:n.k.PUT,data:e,success:t,error:s,always:a,invalidationKeys:["school:users:".concat(e.customerId,":").concat(r)].concat(p(e.users.map(function(e){return"school:users:".concat(e.userId)})),["search:aggregation"])}},bulkValidate:function(e,r,t,s,a){return{url:"{gateway}/v1/users/validate",type:n.k.POST,key:"validate:users",data:e,success:t,error:s,always:a,normalize:!1,formatData:function(e){return e.failedResults.map(function(e){return{errorCodes:e.errorCodes,users:[e.user]}})}}},bulkCheckEmail:function(e,r,t,s,a){return{url:"{gateway}/v1/customers/".concat(r,"/users/email-statuses"),type:n.k.POST,key:"validate:".concat(r,":email:").concat(e.userEmails.map(function(e){return e.email}).join(",")),data:e,success:t,error:s,always:a}},bulkUsersValidate:function(e,r,t,s,a,o){return{url:"{gateway}/v2/users/validate?allowEmailInUse=".concat(r),type:n.k.POST,key:"validate:email:in:use:users:".concat(r),data:e.users,success:s,error:a,always:o,formatData:function(e){var r,t,s=(null===(r=e.failedResults)||void 0===r?void 0:r.map(function(e){return{errorCodes:e.errorCodes,users:[e.user]}}))||[],a=(null===(t=e.successfulResults)||void 0===t?void 0:t.map(function(e){return{errorCodes:e.errorCodes,users:[e.user]}}))||[];return[].concat(p(s),p(a))}}},yearGroups:function(e){return{url:"{gateway}/v1/customers/".concat(e,"/year-groups?query={orderby:value}"),key:"yeargroups:".concat(e)}},updateAvatar:function(e,r,t,s){return{url:"{gateway}/v1/users/me/avatar",key:"update:avatar",type:n.k.PUT,invalidationKeys:["currentuser","school:users:".concat(r)],data:{fileId:e,fileIdType:v.z9.ImageAPIv2},success:t,error:s}},deleteAvatar:function(e,r,t,s){return{url:"{gateway}/v1/users/me/avatar/".concat(e),key:"delete:avatar",type:n.k.DELETE,updateState:{keys:["school:users:".concat(r),"currentuser"],updateData:function(e){var t=e["school:users:".concat(r)],s=e.currentuser;return t.avatar=null,s.avatar=null,h(h({},"school:users:".concat(r),t),"currentuser",s)}},success:t,error:s}},changeEmail:function(e,r,t,s){return{url:"{gateway}/v1/users/me/email",key:"change:email",type:n.k.PUT,data:{email:e},success:r,error:t,always:s}},changePassword:function(e,r,t,s){return{url:"{gateway}/v1/users/me/password",key:"change:password",type:n.k.PUT,data:{currentPassword:e.currentPassword,newPassword:e.newPassword},success:r,error:t,always:s}},changeUserPassword:function(e,r,t,s,a,o,u){return{url:"{gateway}/v1/users/admin/change-password",key:"change:password:".concat(r,":").concat(e),type:n.k.PUT,data:{userId:e,newPassword:t,changeOnNextLogin:s},success:a,error:o,always:u}},resendActivationEmail:function(e,r,t){return{url:"{gateway}/v1/users/admin/activation",key:"send:activation:email",type:n.k.POST,data:{userId:e},success:r,error:t}},sendPasswordResetEmail:function(e,r,t,s){return{url:"{gateway}/v1/users/admin/account-reminder",key:"send:password:reset:email",type:n.k.POST,data:{userIds:[e],customerId:r},success:t,error:s}},resendVerificationEmail:function(e,r,t,s){return{url:"{gateway}/v1/users/admin/email-verification",key:"send:verification:email",type:n.k.POST,data:{userId:e,customerId:r},success:t,error:s}},userCount:function(e,r,t){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=c.P.buildSearchData({customerId:e,userId:r,userType:t,queryParams:s}),o="search:user:count";return o+=u.t.flattenObjectToString(a),{url:"{gateway}/v3/search/count",data:a,type:n.k.POST,key:o,normalize:!1}},authenticationMethods:function(e){return{url:o._.urlBuilder("{gateway}/v1/users/authentication-methods",{id:e}),key:"login:methods:".concat(e.sort().join(":")),normalizeOptions:{idAttribute:"userId"}}},getIdentityProviders:function(e){return{url:"{gateway}/v1/customers/".concat(e,"/identity-providers"),key:"identity:providers:".concat(e),normalize:!1}},getSsoMappings:function(e){return{url:"{gateway}/v1/customers/".concat(e,"/sso-year-group-mappings"),key:"sso:year:group:mappings:".concat(e),normalize:!1}},updateSsoMappings:function(e,r){return{url:"{gateway}/v1/customers/".concat(e,"/sso-year-group-mappings"),key:"sso:year:group:mappings:".concat(e,":update"),type:n.k.POST,invalidationKeys:"sso:year:group:mappings:".concat(e),data:r}},joinRequests:function(){return{url:"{gateway}/v1/customers/join-requests?status=pending",key:"join:requests",normalize:!1}},resolveJoinRequest:function(e,r){return{url:"{gateway}/v1/customers/join-requests/".concat(e),key:"resolve:join:request",type:n.k.PUT,data:{status:r},normalize:!1,invalidationKeys:["join:requests"]}},inviteUserToCustomer:function(e,r,t,s){return{url:"{gateway}/v1/customers/".concat(e,"/users/invitation"),key:"invite:user:customer:".concat(e),type:n.k.PUT,data:r,invalidationKeys:["school:users","search:users"],success:t,error:s}}}}}]);
2
- //# sourceMappingURL=7288-0749315a12-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/7288-0749315a12-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/enums/AggregateSearchField.ts","file:///app/packages/libs/shared/src/enums/AggregateSearchNestedPath.ts","file:///app/packages/libs/shared/src/enums/AggregateSearchType.ts","file:///app/packages/libs/shared/src/enums/SearchType.ts","file:///app/packages/projects/lite/src/apps/user-manager/flight-requests/UserManagerRequests.ts"],"sourcesContent":["export enum AggregateSearchField {\n YearGroupValues = 'yearGroups.value',\n UserProfilesStatus = 'userProfiles.status'\n}","export enum AggregateSearchNestedPath {\n yearGroups = 'yearGroups',\n userProfiles = 'userProfiles'\n}","export enum AggregateSearchType {\n TermsGroupBy = 'terms-group-by',\n NestedTermsGroupBy = 'nested-terms-group-by',\n}","export enum SearchType {\n Content = 'content',\n OnlineContent = 'online_content',\n User = 'user',\n Customer = 'customer',\n Tag = 'tag',\n Organisation = 'organisation',\n Channel = 'channel'\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/HashObject';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { SearchResults, SearchResultsObject } from 'libs/shared/apps/search/interfaces';\nimport { BulkCreateOrValidateUserRequest, BulkCreateUsersResponse, BulkDeleteUsersRequest, BulkInviteUsersRequest, BulkInviteUsersResponse, BulkUpdateUserStatusRequest, BulkUserEmailCheckRequest, BulkUserEmailCheckResponse, BulkUsersCreationOrAddValidateResponse, BulkValidateUsersResponse, ChangePasswordRequest, EditCurrentUserDetails, EditUserRequest, ErroredUsers } from 'libs/shared/apps/user-manager/interfaces';\nimport { UserManagerQueryParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserManagerQueryParams';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { AggregateSearchField } from 'libs/shared/enums/AggregateSearchField';\nimport { AggregateSearchNestedPath } from 'libs/shared/enums/AggregateSearchNestedPath';\nimport { AggregateSearchType } from 'libs/shared/enums/AggregateSearchType';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { FileIdType } from 'libs/shared/enums/Images';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { SearchType } from 'libs/shared/enums/SearchType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { User, UserCollection } from 'libs/shared/interfaces';\nimport { AggregateSearchRequest } from 'libs/shared/interfaces/requests/AggregateSearchRequest';\n\nimport { JoinRequestStatus } from 'apps/user-manager/enums/JoinRequestStatus';\n\nimport { UpdateSsoYearGroupMappings } from '../interfaces/UpdateSsoYearGroupMappings';\n\n\nexport const UserManagerRequests = {\n getUsers(\n customerId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams = {},\n cursor?: string,\n success?: (users: UserCollection) => void,\n error?: () => void\n ): Flight.Request {\n const backendParams: HashObject = { query: UserManagerHelper.buildGetUsersQuery(userType, queryParams) };\n\n if (cursor)\n backendParams.cursor = cursor;\n\n let key = `school:users:${customerId}:${userType}`;\n key += Object.keys(backendParams).map(key => backendParams[key]).join(':');\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/customers/${customerId}/users`, backendParams),\n key,\n success,\n error\n };\n },\n\n getUser(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/users/${id}?query=avatar`,\n key: `school:users:${id}`\n };\n },\n\n getStudentVideos(id: string, cursor?: string): Flight.Request {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const query = [\n `videos[${VIDEO_COLLECTION}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`,\n `clips[${CLIP_COLLECTION}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`,\n `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`\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: `school:users:videos:${id}:${cursor}`\n };\n },\n\n bulkRemoveUsers(\n data: BulkDeleteUsersRequest,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n const invalidationKeys = [ 'school:users', 'search:users', 'search:aggregation' ];\n\n if (data.userIds?.length)\n data.userIds.forEach(id => invalidationKeys.push(`school:users:${id}`));\n\n return {\n url: '{gateway}/v1/users/delete',\n key: 'delete:school:users',\n invalidationKeys,\n type: HttpVerbs.POST,\n data,\n success,\n error,\n always\n };\n },\n\n removeUsersFromSchool(data: BulkDeleteUsersRequest): Flight.Request {\n const invalidationKeys = [ 'school:users', 'search:users', 'search:aggregation' ];\n\n return {\n url: '{gateway}/v1/users/remove',\n key: `remove:school:users`,\n invalidationKeys,\n type: HttpVerbs.POST,\n data\n };\n },\n\n createUsers({\n users,\n success,\n error,\n always\n }: {\n users: BulkCreateOrValidateUserRequest,\n success?: (res: BulkCreateUsersResponse) => void,\n error?: () => void,\n always?: () => void,\n }): Flight.Request {\n return {\n url: '{gateway}/v1/users',\n key: 'create:users',\n data: users,\n type: HttpVerbs.POST,\n invalidationKeys: [ 'school:users', 'user:count', 'search:users' ],\n success,\n error,\n always\n };\n },\n\n updateUser(\n user: EditUserRequest,\n currentUserId: string,\n success?: (updatedUser?: User) => void,\n error?: () => void,\n always?: () => void,\n shouldUpdateCount?: boolean\n ): Flight.Request {\n const updateStateKeys = [`school:users:${user.userId}`];\n\n if (currentUserId.toString() === user.userId.toString())\n updateStateKeys.push('currentuser');\n\n return {\n url: '{gateway}/v1/users',\n key: 'edit:user',\n type: HttpVerbs.PUT,\n data: user,\n invalidationKeys: ['search:aggregation'],\n success,\n error,\n always,\n updateState: {\n keys: `search:user:count`,\n updateData: (state: any) => {\n if (!shouldUpdateCount)\n return state;\n\n const keys = Object.keys(state);\n const newState: HashObject = { ...state };\n keys.forEach(k => {\n // since there is a delay between the user being updated and the user count being updated from search api\n // we manually update the unknown year group user count in the state\n // so we can get the up-to-date count for the unknown year group warning banner\n if (k.includes('filters.yearGroup.value:0')) {\n newState[k].count = state[k].count - 1;\n }\n });\n return newState;\n }\n\n }\n };\n },\n\n updateCurrentUser(\n details: EditCurrentUserDetails,\n success?: (updatedUser?: User) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/profile',\n key: 'edit:current:user',\n type: HttpVerbs.PUT,\n data: details,\n invalidationKeys: [ 'search:aggregation', 'currentuser' ],\n success,\n error,\n always\n };\n },\n\n searchUsers(\n customerId: string,\n userId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams = {},\n cursor?: string,\n success?: (results: SearchResults<SearchResultsObject<User>>) => void,\n error?: () => void\n ): Flight.Request {\n const { data, key } = UserManagerHelper.buildSearchDataAndKey({\n customerId,\n userId,\n userType,\n queryParams,\n cursor\n });\n\n return {\n url: `{gateway}/v3/search`,\n data: data,\n type: HttpVerbs.POST,\n key,\n success,\n error\n };\n },\n\n getSearchUserIds(\n customerId: string,\n userId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams = {},\n success?: (userIds: string[]) => void,\n error?: () => void\n ): Flight.Request {\n const data = UserManagerHelper.buildSearchData({ customerId, userId, userType, queryParams });\n\n let key = `search:user:ids`;\n key += ObjectHelper.flattenObjectToString(data);\n\n return {\n url: '{gateway}/v3/search/ids',\n key,\n data,\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error\n };\n },\n\n getSearchAggregation(options: {\n userId: string,\n customerId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams,\n userIds: string[],\n field: AggregateSearchField\n }): Flight.Request {\n const { userId, customerId, userType, queryParams = {}, userIds, field } = options;\n\n const nestedPath = field === AggregateSearchField.UserProfilesStatus\n ? AggregateSearchNestedPath.userProfiles\n : AggregateSearchNestedPath.yearGroups;\n\n const filters = UserManagerHelper.buildSearchFiltersObject(customerId, userType, queryParams);\n\n let key = `search:aggregation:${userId}:${customerId}:${field}:`;\n key += Object.keys(filters).sort().map(key => filters[key]).join(':');\n key += ':' + userIds.join(':');\n \n const data: AggregateSearchRequest = {\n // Fixed\n indices: ['user'],\n searchType: SearchType.User,\n isLearner: false,\n type: AggregateSearchType.NestedTermsGroupBy,\n\n // Dynamic\n userId: userId.toString(),\n customerId: customerId.toString(),\n data: {\n field,\n nestedPath,\n termsFilters: {\n [`${nestedPath}.customerId`]: [customerId]\n }\n },\n idFilters: userIds,\n filters\n };\n\n const formatData = (data: any) => {\n const response = data.termCount;\n if (field !== AggregateSearchField.UserProfilesStatus)\n return response;\n\n return Object.keys(response).reduce((prev: HashObject, key: string) => {\n // Our ObjectStatus enum is capitalised, but it's lower case in the search index\n prev[key.charAt(0).toUpperCase() + key.slice(1)] = response[key];\n return prev;\n }, {});\n };\n\n return {\n url: '{gateway}/v1/search/aggregation',\n type: HttpVerbs.POST,\n key,\n data,\n normalize: false,\n formatData\n };\n },\n\n bulkToggleActivation(\n data: BulkUpdateUserStatusRequest,\n userType: UserGroup,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/users/status`,\n key: 'update:users:status',\n type: HttpVerbs.PUT,\n data,\n success,\n error,\n always,\n invalidationKeys: [ `school:users:${data.customerId}:${userType}`, ...data.users.map(u => `school:users:${u.userId}`), 'search:aggregation' ]\n };\n },\n\n bulkValidate(\n data: BulkCreateOrValidateUserRequest,\n customerId?: string,\n success?: (res: ErroredUsers) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/users/validate',\n type: HttpVerbs.POST,\n key: 'validate:users',\n data,\n success,\n error,\n always,\n normalize: false,\n formatData: (data: BulkValidateUsersResponse) => {\n return data.failedResults.map(result => ({\n errorCodes: result.errorCodes,\n users: [result.user]\n }));\n }\n };\n },\n\n bulkCheckEmail(\n data: BulkUserEmailCheckRequest,\n customerId: string,\n success?: (res: BulkUserEmailCheckResponse) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/users/email-statuses`,\n type: HttpVerbs.POST,\n key: `validate:${customerId}:email:${data.userEmails.map(({ email }) => email).join(',')}`,\n data,\n success,\n error,\n always\n };\n },\n\n bulkUsersValidate(\n data: BulkCreateOrValidateUserRequest,\n canInviteExistingUsers: boolean,\n customerId?: string,\n success?: (res: BulkUserEmailCheckResponse) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v2/users/validate?allowEmailInUse=${canInviteExistingUsers}`,\n type: HttpVerbs.POST,\n key: `validate:email:in:use:users:${canInviteExistingUsers}`,\n data: data.users,\n success,\n error,\n always,\n formatData: (data: BulkUsersCreationOrAddValidateResponse) => {\n const failed = data.failedResults?.map(result => ({\n errorCodes: result.errorCodes,\n users: [result.user]\n })) || [];\n\n const succeed = data.successfulResults?.map(res => ({\n errorCodes: res.errorCodes,\n users: [res.user]\n })) || [];\n\n return [ ...failed, ...succeed ];\n }\n };\n },\n\n yearGroups(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/year-groups?query={orderby:value}`,\n key: `yeargroups:${customerId}`\n };\n },\n\n /**\n * Avatar requests\n */\n updateAvatar(imageId: string, userId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/avatar',\n key: 'update:avatar',\n type: HttpVerbs.PUT,\n invalidationKeys: [ 'currentuser', `school:users:${userId}` ],\n data: {\n fileId: imageId,\n fileIdType: FileIdType.ImageAPIv2\n },\n success,\n error\n };\n },\n\n deleteAvatar(avatarId: string, userId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/avatar/${avatarId}`,\n key: 'delete:avatar',\n type: HttpVerbs.DELETE,\n updateState: {\n keys: [ `school:users:${userId}`, 'currentuser' ],\n updateData: (data: HashObject) => {\n const userObj = data[`school:users:${userId}`];\n const currentUserObj = data.currentuser;\n\n userObj.avatar = null;\n currentUserObj.avatar = null;\n\n return {\n [`school:users:${userId}`]: userObj,\n ['currentuser']: currentUserObj\n };\n }\n },\n success,\n error\n };\n },\n\n /**\n * Account settings\n */\n changeEmail(\n email: string,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/email`,\n key: 'change:email',\n type: HttpVerbs.PUT,\n data: {\n email\n },\n success,\n error,\n always\n };\n },\n\n changePassword(\n passwordModel: ChangePasswordRequest,\n success?: () => void,\n error?: (jqXHR: JQuery.jqXHR) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/password`,\n key: 'change:password',\n type: HttpVerbs.PUT,\n data: {\n currentPassword: passwordModel.currentPassword,\n newPassword: passwordModel.newPassword\n },\n success,\n error,\n always\n };\n },\n\n changeUserPassword(\n userId: string,\n userType: UserGroup,\n newPassword: string,\n changeOnNextLogin: boolean,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/users/admin/change-password`,\n key: `change:password:${userType}:${userId}`,\n type: HttpVerbs.PUT,\n data: {\n userId,\n newPassword,\n changeOnNextLogin\n },\n success,\n error,\n always\n };\n },\n\n resendActivationEmail(userId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: '{gateway}/v1/users/admin/activation',\n key: 'send:activation:email',\n type: HttpVerbs.POST,\n data: { userId },\n success,\n error\n };\n },\n\n sendPasswordResetEmail(userId: string, customerId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: '{gateway}/v1/users/admin/account-reminder',\n key: 'send:password:reset:email',\n type: HttpVerbs.POST,\n data: { userIds: [userId], customerId },\n success,\n error\n };\n },\n\n resendVerificationEmail(\n userId: string,\n customerId: string,\n success?: () => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/users/admin/email-verification',\n key: 'send:verification:email',\n type: HttpVerbs.POST,\n data: { userId, customerId },\n success,\n error\n };\n },\n \n /**\n * Other\n */\n userCount(\n customerId: string,\n userId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams = {}\n ): Flight.Request {\n const data = UserManagerHelper.buildSearchData({ customerId, userId, userType, queryParams });\n\n let key = `search:user:count`;\n key += ObjectHelper.flattenObjectToString(data);\n\n return {\n url: `{gateway}/v3/search/count`,\n data,\n type: HttpVerbs.POST,\n key,\n normalize: false\n };\n },\n\n authenticationMethods(ids: string[]): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/users/authentication-methods`, { id: ids }),\n key: `login:methods:${ids.sort().join(':')}`,\n normalizeOptions: {\n idAttribute: 'userId'\n }\n };\n },\n\n getIdentityProviders(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/identity-providers`,\n key: `identity:providers:${customerId}`,\n normalize: false\n };\n },\n\n getSsoMappings(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/sso-year-group-mappings`,\n key: `sso:year:group:mappings:${customerId}`,\n normalize: false\n };\n },\n\n updateSsoMappings(customerId: string, mappings: UpdateSsoYearGroupMappings): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/sso-year-group-mappings`,\n key: `sso:year:group:mappings:${customerId}:update`,\n type: HttpVerbs.POST,\n invalidationKeys: `sso:year:group:mappings:${customerId}`,\n data: mappings\n };\n },\n\n joinRequests(): Flight.Request {\n return {\n url: '{gateway}/v1/customers/join-requests?status=pending',\n key: 'join:requests',\n normalize: false\n };\n },\n\n resolveJoinRequest(\n requestId: string,\n status: JoinRequestStatus\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/join-requests/${requestId}`,\n key: 'resolve:join:request',\n type: HttpVerbs.PUT,\n data: { status },\n normalize: false,\n invalidationKeys: ['join:requests']\n };\n },\n // to invite or add a existing user to a customer\n inviteUserToCustomer(\n customerId: string,\n data: BulkInviteUsersRequest,\n success?: (res: BulkInviteUsersResponse) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/users/invitation`,\n key: `invite:user:customer:${customerId}`,\n type: HttpVerbs.PUT,\n data,\n invalidationKeys: [ 'school:users', 'search:users' ],\n success,\n error\n };\n }\n};\n\n"],"names":["AggregateSearchField","AggregateSearchNestedPath","AggregateSearchType","SearchType","UserManagerRequests","getUsers","customerId","userType","queryParams","cursor","success","error","backendParams","query","UserManagerHelper","key","Object","keys","map","join","url","UrlHelper","getUser","id","getStudentVideos","VIDEO_COLLECTION","CLIP_COLLECTION","INTERACTIVE","CurationStatus","params","permissionFilterOption","PermissionFilterOption","bulkRemoveUsers","data","always","invalidationKeys","userIds","length","forEach","push","type","HttpVerbs","removeUsersFromSchool","createUsers","users","updateUser","user","currentUserId","shouldUpdateCount","updateStateKeys","userId","toString","updateState","updateData","state","newState","k","includes","count","updateCurrentUser","details","searchUsers","getSearchUserIds","ObjectHelper","normalize","getSearchAggregation","options","field","nestedPath","userProfiles","yearGroups","filters","sort","indices","searchType","User","isLearner","NestedTermsGroupBy","termsFilters","idFilters","formatData","response","termCount","reduce","prev","charAt","toUpperCase","slice","bulkToggleActivation","u","bulkValidate","failedResults","result","errorCodes","bulkCheckEmail","userEmails","email","bulkUsersValidate","canInviteExistingUsers","failed","succeed","successfulResults","res","updateAvatar","imageId","fileId","fileIdType","deleteAvatar","avatarId","userObj","currentUserObj","currentuser","avatar","changeEmail","changePassword","passwordModel","currentPassword","newPassword","changeUserPassword","changeOnNextLogin","resendActivationEmail","sendPasswordResetEmail","resendVerificationEmail","userCount","authenticationMethods","ids","normalizeOptions","idAttribute","getIdentityProviders","getSsoMappings","updateSsoMappings","mappings","joinRequests","resolveJoinRequest","requestId","status","inviteUserToCustomer"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/7604-bd0283d577-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/components/delete-share-content/DeleteShareContent.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-link-privacy/share-link-privacy.scss","file:///app/packages/libs/shared/src/apps/share-v2/components/share-link-privacy/ShareLinkPrivacy.tsx","file:///app/packages/libs/shared/src/apps/share-v2/utils/get-share-privacy-config/getSharePrivacyConfig.ts","file:///app/packages/libs/shared/src/apps/share-v2/views/delete-share-link-confirmation-view/DeleteShareLinkConfirmationView.tsx","file:///app/packages/libs/shared/src/apps/share-v2/views/main-share-view/hooks/use-main-share-data/useMainShareData.ts","file:///app/packages/libs/shared/src/apps/share/views/share/components/share-integrations/ShareIntegrationsHelper.ts","file:///app/packages/libs/shared/src/components/multistep-popup/MultiStepPopup.tsx","file:///app/packages/libs/shared/src/components/new-badge/NewBadge.tsx","file:///app/packages/libs/shared/src/apps/share-v2/views/copy-embed-view/CopyEmbedView.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-integrations/share-integrations.scss","file:///app/packages/libs/shared/src/apps/share-v2/components/share-integrations/ShareIntegrations.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-permanent-link-delete/SharePermanentLinkDelete.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-permanent-link-setting/SharePermanentLinkSetting.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-permanent-link-actions/SharePermanentLinkActions.tsx","file:///app/packages/libs/shared/src/hooks/useCopyToClipboard.ts","file:///app/packages/libs/shared/src/apps/share-v2/components/assign-prompt/assign-prompt.scss","file:///app/packages/libs/shared/src/apps/share-v2/components/assign-prompt/AssignPrompt.tsx","file:///app/packages/libs/shared/src/apps/share-v2/views/create-share-view/create-share.scss","file:///app/packages/libs/shared/src/apps/share-v2/views/create-share-view/CreateShareView.tsx","file:///app/packages/libs/shared/src/apps/share-v2/views/create-share-view/hooks/useCreateShareData.ts","file:///app/packages/libs/shared/src/apps/share-v2/components/share-permanent-link/SharePermanentLink.tsx","file:///app/packages/libs/shared/src/apps/share-v2/views/main-share-view/MainShareView.tsx","file:///app/packages/libs/shared/src/apps/share-v2/views/share-settings-view/ShareSettingsView.tsx","file:///app/packages/libs/shared/src/apps/share-v2/views/share-view/ShareView.tsx","file:///app/packages/projects/lite/src/apps/share/views/share-view/ShareView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\n\nconst namespace = 'sharev2.deleteShareContent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DeleteShareContentProps {\n loading: boolean;\n phrases: {\n leadingSentence: string;\n bulletPoints: string[];\n acknowledgement: string;\n deleteButton: string;\n backButton?: string;\n };\n onDelete: () => void;\n onBack?: () => void;\n}\n\nexport function DeleteShareContent(props: DeleteShareContentProps) {\n const [ ack, setAck ] = React.useState(false);\n\n function onDelete() {\n if (!ack || props.loading)\n return;\n\n props.onDelete();\n }\n\n return (\n <div className='d-flex flex-column gap-3'>\n <p className='m-0'>{props.phrases.leadingSentence}</p>\n <ul className='m-0'>\n {props.phrases.bulletPoints.map((phrase, index) => (\n <li key={index}>\n {phrase}\n </li>\n ))}\n </ul>\n <Checkbox\n id='ack'\n checked={ack}\n onChange={e => setAck(e.target.checked)}\n label={props.phrases.acknowledgement}\n />\n <PopupButtons>\n {props.onBack && (\n <PopupButtons.Cancel\n onClick={props.onBack}\n text={props.phrases.backButton ?? getPhrase('backButton')}\n variant='link'\n />\n )}\n <PopupButtons.Submit\n onClick={onDelete}\n text={props.phrases.deleteButton}\n variant='danger'\n disabled={!ack || props.loading}\n showSpinner={props.loading}\n />\n </PopupButtons>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"active\":\"NV2KW\"};","import React from 'react';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { type SharePrivacyResponse } from 'libs/shared/apps/share-v2/interfaces/SharePrivacyResponse';\nimport { ShareLinkHelper } from 'libs/shared/apps/share-v2/utils/ShareLinkHelper';\nimport { type SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport type { YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getSharePrivacyConfig } from '../../utils/get-share-privacy-config/getSharePrivacyConfig';\n\nimport styles from './share-link-privacy.scss';\n\ninterface SharePrivacyItemProps {\n title: string;\n activePrivacy: SharePrivacy;\n description: string;\n sharePrivacy: SharePrivacy;\n onClick: (sharePrivacy: SharePrivacy) => void\n}\n\nfunction SharePrivacyItem(props: SharePrivacyItemProps) {\n const active = props.activePrivacy === props.sharePrivacy;\n\n function onClick() {\n if (active)\n return;\n\n props.onClick(props.sharePrivacy);\n }\n\n return (\n <li>\n <button\n className={`${active ? styles.active : ''} dropdown-item d-flex align-items-center justify-content-between py-2`}\n onClick={onClick}\n >\n <div className='me-4'>\n <p className='font-label mb-1'>{props.title}</p>\n <p className='font-size-sm mb-0'>{props.description}</p>\n </div>\n {active && <SvgContainer svgName={cvSvgLibrary.Check} />}\n </button>\n </li>\n );\n}\n\ninterface ShareLinkPrivacyProps {\n hasStudentExp: boolean;\n shareOverrideRestrictions: boolean;\n entity: SharableEntity;\n entityTypeId: MasterType;\n yearGroups: YearGroup[];\n sharePrivacy: SharePrivacy;\n entityPrivacy: SharePrivacyResponse;\n onClickSavePrivacy: (privacy: SharePrivacy) => void;\n}\n\nexport function ShareLinkPrivacy(props: ShareLinkPrivacyProps): JSX.Element {\n const canUpdatePrivacy = props.shareOverrideRestrictions && !props.hasStudentExp;\n\n const config = getSharePrivacyConfig({\n entity: props.entity,\n entityPrivacy: props.entityPrivacy,\n hasStudentExp: props.hasStudentExp,\n yearGroups: props.yearGroups,\n _showPasswordProtected: props.sharePrivacy === SharePrivacy.PasswordProtected\n });\n\n const { icon, text } = ShareLinkHelper.getPrivateIconAndText({\n privacy: props.sharePrivacy,\n entityTypeId: props.entityTypeId,\n hasStudentExp: props.hasStudentExp,\n entity: props.entity,\n yearGroups: props.yearGroups\n });\n\n if (!canUpdatePrivacy) {\n return (\n <div className='d-flex align-items-center'>\n <SvgContainer svgName={icon} className='svg-container me-1' />\n <span>{text}</span>\n </div>\n );\n }\n \n return (\n <div className='btn-group'>\n <button\n className={`btn border-0 info-link dropdown-toggle p-1 bg-light-blue-hover`}\n data-bs-toggle='dropdown'\n >\n <SvgContainer svgName={icon} className='svg-container me-1' />\n <span className='me-1'>{text}</span>\n </button>\n <ul className='dropdown-menu cursor-pointer'>\n {Object.values(SharePrivacy).map(sharePrivacy => {\n const { title, description, predicate } = config[sharePrivacy];\n \n if (!predicate())\n return;\n\n return (\n <SharePrivacyItem\n key={sharePrivacy}\n sharePrivacy={sharePrivacy}\n activePrivacy={props.sharePrivacy}\n title={title}\n description={description}\n onClick={props.onClickSavePrivacy}\n />\n );\n })}\n </ul>\n </div>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { type SharePrivacyResponse } from 'libs/shared/apps/share-v2/interfaces/SharePrivacyResponse';\nimport { ShareLinkHelper } from 'libs/shared/apps/share-v2/utils/ShareLinkHelper';\nimport { type SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport type { YearGroup } from 'libs/shared/interfaces';\n\nconst namespace = 'sharev2.getSharePrivacyConfig';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype SharePrivacyConfigItem = {\n title: string;\n description: string;\n predicate: () => boolean;\n}\n\ninterface UseSharePrivacyConfigOptions {\n entityPrivacy: SharePrivacyResponse;\n entity: SharableEntity;\n yearGroups: YearGroup[];\n hasStudentExp: boolean;\n /**\n * To support legacy password protected share links\n */\n _showPasswordProtected?: boolean;\n}\n\nexport function getSharePrivacyConfig(\n options: UseSharePrivacyConfigOptions\n): {[key in SharePrivacy]: SharePrivacyConfigItem} {\n const accessType = ShareLinkHelper.getShareLinkAccessType(options.entityPrivacy);\n const respectRatingText = ShareLinkHelper.getRespectRatingText(\n options.entity,\n options.yearGroups,\n options.hasStudentExp\n );\n\n const SharePrivacyItemConfig: {[key in SharePrivacy]: SharePrivacyConfigItem} = {\n [SharePrivacy.JustMySchool]: {\n title: getPhrase('respectRatings'),\n description: respectRatingText,\n predicate: () => accessType !== 'protected'\n },\n [SharePrivacy.Protected]: {\n title: getPhrase('respectRatings'),\n description: respectRatingText,\n predicate: () => accessType === 'protected'\n },\n [SharePrivacy.JustMySchoolOverrideRestriction]: {\n title: getPhrase('justMySchool'),\n description: getPhrase('justMySchoolDescription'),\n predicate: () => accessType !== 'protected'\n },\n [SharePrivacy.ProtectedOverrideRestriction]: {\n title: getPhrase('justMySchool'),\n description: getPhrase('clickViewOnly'),\n predicate: () => accessType === 'protected'\n },\n [SharePrivacy.Public]: {\n title: getPhrase('public'),\n description: getPhrase('publicDescription'),\n predicate: () => accessType === 'owner'\n },\n /**\n * Not supported\n */\n [SharePrivacy.Direct]: {\n title: '',\n description: '',\n predicate: () => false\n },\n [SharePrivacy.PasswordProtected]: {\n title: getPhrase('passwordProtectedTitle'),\n description: getPhrase('passwordProtectedDescription'),\n predicate: () => options._showPasswordProtected\n },\n [SharePrivacy.PinCode]: {\n title: getPhrase('pinCode'),\n description: getPhrase('pinCodeDescription'),\n predicate: () => false\n }\n };\n\n return SharePrivacyItemConfig;\n}\n\nexport function getDefaultSharePrivacy(options: UseSharePrivacyConfigOptions): SharePrivacy {\n const items = getSharePrivacyConfig(options);\n\n const validItems = Object.entries(items).filter(([ , config ]) => config.predicate());\n\n if (!validItems.length)\n return;\n\n return ArrayHelper.first(validItems)[0] as SharePrivacy;\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EventVersion, LocationContext } from 'libs/analytics/interfaces';\n\nimport { DeleteShareContent } from 'libs/shared/apps/share-v2/components/delete-share-content/DeleteShareContent';\nimport { useShareLinkActions } from 'libs/shared/apps/share-v2/hooks/useShareLinkActions';\nimport { useShareLinkData } from 'libs/shared/apps/share-v2/hooks/useShareLinkData';\nimport { getShareEventLogger } from 'libs/shared/apps/share-v2/utils/get-share-event-logger/getShareEventLogger';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\n\nconst namespace = 'sharev2.deleteShareLinkConfirmation';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DeleteShareLinkConfirmationViewProps extends MultiStepPopupViewProps {\n entityId: string;\n entityType: SharableEntityType;\n previousAppLink?: Core.AppLink;\n goToSettingsStep?: () => void;\n}\n\nexport function DeleteShareLinkConfirmationView(props: DeleteShareLinkConfirmationViewProps) {\n const alerts = useAlerts();\n\n const [ loading, setLoading ] = React.useState(false);\n\n const { share, entity } = useShareLinkData({\n entityId: props.entityId,\n entityType: props.entityType\n });\n\n const { deleteShareLink } = useShareLinkActions({\n entityId: props.entityId\n });\n\n const { log } = getShareEventLogger({\n data: {\n entity: {\n id: props.entityId,\n type: props.entityType\n }\n },\n analyticsOptions: {\n location: LocationContext.Popup,\n eventVersion: EventVersion.V3\n }\n });\n \n function onClickDelete() {\n setLoading(true);\n\n deleteShareLink(share.data?.shareId).then(() => {\n log({\n type: 'delete-share-link',\n share: share.data\n });\n\n setLoading(false);\n alerts.success(getPhrase('deleteSuccess'));\n props.closePopup();\n\n if (props.previousAppLink) {\n AppLinkHelper.trigger(props.previousAppLink);\n }\n }).catch(() => {\n alerts.error(getPhrase('deleteFailed', { name: entity.data.name, escapeText: true }));\n }).finally(() => {\n setLoading(false);\n });\n }\n\n const loaded = !!share.data && !!entity.data;\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n showLoadingSpinner={!loaded || props.loading}\n animation={props.animate}\n >\n <DeleteShareContent\n loading={loading}\n phrases={{\n leadingSentence: getPhrase('intro'),\n bulletPoints: [\n getPhrase('loseAccessInfo'),\n getPhrase('loseAccessUsage')\n ],\n acknowledgement: getPhrase('acknowledgement'),\n backButton: getPhrase('back'),\n deleteButton: getPhrase('delete')\n }}\n onDelete={onClickDelete}\n onBack={props.goToSettingsStep ? props.goToSettingsStep : undefined}\n />\n </Popup>\n );\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { useShareLinkActions } from 'libs/shared/apps/share-v2/hooks/useShareLinkActions';\nimport { useShareLinkData } from 'libs/shared/apps/share-v2/hooks/useShareLinkData';\nimport { ShareLogFn } from 'libs/shared/apps/share-v2/utils/get-share-event-logger/getShareEventLogger';\nimport { SharableEntityType, ShareViewHelper } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport type { YearGroup } from 'libs/shared/interfaces';\n\nconst namespace = 'sharev2.useMainShareData';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface UseMainShareDataOptions {\n entityId: string;\n entityType: SharableEntityType;\n log: ShareLogFn;\n}\n\nexport function useMainShareData(options: UseMainShareDataOptions) {\n const alerts = useAlerts();\n const { hasPermissions } = usePermissions();\n\n const {\n shareToGoogleClassroom,\n shareToMicrosoftTeams,\n isLoadingSettings,\n shareOverrideRestrictions\n } = useSettings(null);\n \n const {\n currentUser,\n entity,\n privacy,\n share,\n config\n } = useShareLinkData({ entityId: options.entityId, entityType: options.entityType });\n \n const {\n loaded: shareActionLoaded,\n updateShareLink\n } = useShareLinkActions({ entityId: options.entityId });\n \n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n async function onClickSavePrivacy(updatedPrivacy: SharePrivacy): Promise<void> {\n try {\n const updatedShare = await updateShareLink(share.data.shareId, { privacy: updatedPrivacy });\n options.log({\n type: 'update-share-link',\n share: updatedShare\n });\n alerts.success(getPhrase('privaciesSuccess', { name: entity.data.name, escapeText: true }));\n } catch {\n alerts.error(getPhrase('privaciesError', { name: entity.data.name, escapeText: true }));\n }\n }\n \n const canEmbed = ShareViewHelper.canEmbed(options.entityType);\n const integrations = ShareViewHelper.getEnabledIntegrations(shareToGoogleClassroom, shareToMicrosoftTeams);\n const hasManageIntegrationsPermission = hasPermissions(PermissionName.ManageIntegrations);\n const hasStudentExp = hasPermissions(PermissionName.StudentExperience);\n const hasManageShareLinkSettings = hasPermissions(PermissionName.ManageShareLinkSettings);\n const canAccessSettings = share.data && ShareViewHelper.canAddPolicies(options.entityType);\n \n const loaded = shareActionLoaded\n && !!share.data\n && !!entity.data\n && !!privacy.data\n && !!config.data\n && !!currentUser.data\n && !!yearGroups\n && !isLoadingSettings;\n\n\n return {\n data: {\n share,\n loaded,\n entity,\n privacy,\n config,\n yearGroups,\n shareOverrideRestrictions,\n currentUser\n },\n canEmbed,\n integrations,\n hasStudentExp,\n canAccessSettings,\n hasManageShareLinkSettings,\n hasManageIntegrationsPermission,\n onClickSavePrivacy\n };\n}","import { LocationUtils } from 'libs/common/backbone/core/LocationUtils';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nconst POPUP_FEATURES = 'toolbar=0,location=0,menubar=0,width=600,height=600';\n\n/**\n * ⚠️ Hacky solution warning ⚠️\n * \n * Both Google Classroom and MS Teams provide an SDK to do essentially what this file does.\n * However when using their SDK, we lose control of how the items are displayed on our page.\n * \n * Ed-puzzle seems like it does what we've done here\n * so i've taken a leaf out of their book and taken a similar approach.\n * This puts us at risk of them changing their SDK and our implementation not changing\n * \n * If MS Teams or Google Classroom stop working, this is most likely why. But we should be able\n * to simply find out what their new parameters are and open a popup to the new shape in\n * order to fix any issues \n * \n * High risk, low reward 🤙\n * \n * - Sha\n */\nexport const ShareIntegrationsHelper = {\n launchGoogleClassroom(link: string) {\n const url = UrlHelper.urlBuilder('https://classroom.google.com/share', { link });\n LocationUtils.PageLoad(url, true, POPUP_FEATURES);\n },\n launchMicrosoftTeams(link: string) {\n const url = UrlHelper.urlBuilder('https://teams.microsoft.com/share', {\n href: link,\n preview: false,\n referrer: LocationUtils.GetCurrentHostname(),\n s: Date.now()\n });\n LocationUtils.PageLoad(url, true, POPUP_FEATURES);\n }\n};","import React from 'react';\n\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nexport interface MultiStepPopupViewProps extends PopupViewProps {\n animate?: boolean;\n loading?: boolean;\n}\n\nexport type MultiStepItemConfig<TProps, TSteps extends string> = {\n [Key in TSteps]: {\n view: (props: TProps) => JSX.Element;\n }\n}\n\ninterface MultiStepPopupProps<\n TProps,\n TSteps extends string\n> {\n step: TSteps;\n data: TProps;\n steps: MultiStepItemConfig<TProps, TSteps>;\n loading?: boolean;\n animate?: boolean;\n setStep: (step: TSteps) => void;\n closePopup: () => void;\n}\n\nexport function MultiStepPopup<TProps, TSteps extends string>(\n props: MultiStepPopupProps<TProps, TSteps>\n): JSX.Element {\n const [ animate, setAnimate ] = React.useState<boolean>(props.animate ?? true);\n\n function setStep(step: TSteps) {\n /**\n * We want to animate the popup for the first time it loads in.\n * After that every step changes should not animate other popups\n */\n setAnimate(false);\n props.setStep(step);\n }\n\n function closePopup() {\n props.closePopup();\n }\n\n const stepConfig = props.steps[props.step];\n /**\n * This is so that we do not override `loading` prop \n * passed into `ViewComponent` from `props.data` if `props.loading` is undefined.\n * We only want to override the prop if this is set.\n */\n const loading = typeof props.loading !== 'undefined' ? { loading: props.loading } : {};\n \n const viewProps: TProps = {\n ...props.data,\n ...loading,\n animate: props.animate ?? animate,\n closePopup,\n setStep\n };\n\n if (!stepConfig)\n return <></>;\n\n const ViewComponent = stepConfig.view;\n\n return <ViewComponent {...viewProps} />;\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.newBadge';\n\ninterface NewBadgeProps {\n size: 'sm' | 'std';\n invert?: boolean;\n text?: string;\n className?: string;\n}\n\nexport function NewBadge(props: NewBadgeProps): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex justify-content-center',\n 'fw-medium text-blue',\n props.size === 'sm' ? 'badge-sm' : 'badge-std',\n props.invert ? 'bg-white' : 'bg-light-blue',\n props.className\n )}>\n {props.text || <Text phrase='new' namespace={namespace} />}\n </span>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EventVersion, LocationContext } from 'libs/analytics/interfaces';\n\nimport { EmbedDetails } from 'libs/shared/apps/share/components/copy-embed-html/CopyEmbedHtml';\nimport { CopyEmbedHtml } from 'libs/shared/apps/share-v2/components/copy-embed-html/CopyEmbedHtml';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { useShareLinkData } from 'libs/shared/apps/share-v2/hooks/useShareLinkData';\nimport { getShareEventLogger } from 'libs/shared/apps/share-v2/utils/get-share-event-logger/getShareEventLogger';\nimport { type SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\n\nconst namespace = 'sharev2.copyEmbed';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface CopyEmbedViewProps extends MultiStepPopupViewProps{\n entityId: string;\n entityType: SharableEntityType;\n goToShareLinkStep: () => void;\n showEmbedCopiedText: boolean;\n}\n\nexport function CopyEmbedView(props: CopyEmbedViewProps): JSX.Element {\n const fetch = Flight.useGetFetch();\n const { config, share, entity } = useShareLinkData({\n entityId: props.entityId,\n entityType: props.entityType\n });\n\n const { log } = getShareEventLogger({\n data: {\n entity: {\n id: props.entityId,\n type: props.entityType\n }\n },\n analyticsOptions: {\n location: LocationContext.Popup,\n eventVersion: EventVersion.V3\n }\n });\n\n function onCopy(embedDetails: EmbedDetails) {\n log({\n type: 'copy-embed-html',\n id: props.entityId,\n shareId: share.data.shareId,\n shareType: share.data.type,\n embedDetails\n });\n fetch(ShareRequests.updateDateShared(share.data.shareId));\n }\n \n const loaded = !!share.data\n && !!config.data;\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n showLoadingSpinner={!loaded || props.loading}\n animation={props.animate}\n >\n {loaded &&\n <>\n <div className='mb-3'>\n <CopyEmbedHtml\n analyticsOptions={{}}\n entity={entity.data}\n embedUrl={share.data.link.shortenedEmbedUrl}\n entityId={props.entityId}\n entityType={props.entityType}\n liteUrl={config.data.liteUrl}\n shareId={share.data.shareId}\n onCopy={onCopy}\n showEmbedCopiedText={props.showEmbedCopiedText}\n styling='normal-v2'\n />\n </div>\n <PopupButtons>\n <PopupButtons.Cancel variant='link' onClick={props.goToShareLinkStep} text={getPhrase('back')} />\n </PopupButtons>\n </>\n }\n </Popup>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"integration\":\"pIUQ7\"};","import React from 'react';\n\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\n\nimport styles from './share-integrations.scss';\n\ninterface ShareIntegrationsProps {\n integrations: IntegrationId[];\n onClickGoogleClassroom?: () => void;\n onClickMicrosoftTeams?: () => void;\n googleClassroomIcon: string;\n microsoftTeamsIcon: string;\n}\n\nexport function ShareIntegrations(props: ShareIntegrationsProps): JSX.Element {\n if (!props.integrations.length)\n return <></>;\n\n return (\n <div className='d-flex gap-1 align-items-start'>\n {props.integrations.includes(IntegrationId.GoogleClassroom) &&\n <button\n type='button'\n onClick={props.onClickGoogleClassroom}\n className={styles.integration}\n style={{ backgroundImage: `url(${props.googleClassroomIcon})` }}\n />\n }\n {props.integrations.includes(IntegrationId.MicrosoftTeams) &&\n <button\n type='button'\n onClick={props.onClickMicrosoftTeams}\n className={`${styles.integration} rounded`}\n style={{ backgroundImage: `url(${props.microsoftTeamsIcon})` }}\n />\n }\n </div>\n );\n}\n","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'sharev2.sharePermanentLinkDelete';\n\ninterface SharePermanentLinkDeleteProps {\n onClick: () => void;\n}\n\nexport function SharePermanentLinkDelete(props: SharePermanentLinkDeleteProps): JSX.Element {\n return (\n <div className='d-flex flex-row justify-content-between align-items-center'>\n <DivButton\n onClick={props.onClick}\n className='d-inline-block p-1 pe-2 rounded-1 hover-bg-light-blue'\n >\n <div className='d-flex align-items-center'>\n <div className='me-2'>\n <SvgContainer svgName={cvSvgLibrary.Delete} size={SvgContainerSize.Standard} />\n </div>\n <Text namespace={namespace} phrase='deleteLink' />\n </div>\n </DivButton>\n </div>\n );\n}","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'sharev2.sharePermanentLinkSetting';\n\ninterface SharePermanentLinkSettingProps {\n manageShareLinkSettings: boolean;\n \n onClickEditSettings: () => void;\n}\n\nexport function SharePermanentLinkSetting(props: SharePermanentLinkSettingProps): JSX.Element {\n if (!props.manageShareLinkSettings)\n return null;\n \n return (\n <div className='d-flex flex-row justify-content-between align-items-center'>\n <DivButton\n onClick={props.onClickEditSettings}\n className={`d-inline-block p-1 pe-2 rounded-1 hover-bg-light-blue`}\n >\n <div className='d-flex align-items-center'>\n <div className='me-2'>\n <SvgContainer svgName={cvSvgLibrary.Cog} size={SvgContainerSize.Standard} />\n </div>\n <Text namespace={namespace} phrase='editSettings' />\n </div>\n </DivButton>\n </div>\n );\n}","import React from 'react';\n\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\n\nimport { GetEmbedCode } from '../get-embed-code/GetEmbedCode';\nimport { ShareIntegrations } from '../share-integrations/ShareIntegrations';\nimport { SharePermanentLinkDelete } from '../share-permanent-link-delete/SharePermanentLinkDelete';\nimport { SharePermanentLinkSetting } from '../share-permanent-link-setting/SharePermanentLinkSetting';\n\ninterface SharePermanentLinkActionsProps {\n canEmbed: boolean;\n showIntegrations: boolean;\n canAccessSettings: boolean;\n integrations: IntegrationId[];\n hasManageShareLinkSettings: boolean;\n hideSettings?: boolean;\n goToDeleteStep: () => void;\n goToSettingsStep: () => void;\n onClickGetEmbedCode: () => void;\n onClickGoogleClassroom: () => void;\n onClickMicrosoftTeams: () => void;\n googleClassroomIcon: string;\n microsoftTeamsIcon: string;\n}\n\nexport function SharePermanentLinkActions(props: SharePermanentLinkActionsProps): JSX.Element {\n return (\n <div className='d-flex flex-row justify-content-between gap-2'>\n <div>\n {props.canEmbed &&\n <GetEmbedCode onClickGetEmbedCode={props.onClickGetEmbedCode} minimal />\n }\n\n {!props.hideSettings && (props.canAccessSettings ?\n <SharePermanentLinkSetting\n manageShareLinkSettings={props.hasManageShareLinkSettings}\n onClickEditSettings={props.goToSettingsStep}\n /> :\n <SharePermanentLinkDelete onClick={props.goToDeleteStep} />)}\n </div>\n <div>\n {props.showIntegrations && !!props.integrations.length &&\n <ShareIntegrations\n integrations={props.integrations}\n onClickGoogleClassroom={props.onClickGoogleClassroom}\n onClickMicrosoftTeams={props.onClickMicrosoftTeams}\n googleClassroomIcon={props.googleClassroomIcon}\n microsoftTeamsIcon={props.microsoftTeamsIcon}\n />\n }\n </div>\n </div>\n );\n}","import { useCallback, useState } from 'react';\n\n/**\n * The copied text as `string` or `null` if nothing has been copied yet.\n */\ntype CopiedValue = string | null\n\n/**\n * Function to copy text to the clipboard.\n * @param text - The text to copy to the clipboard.\n * @returns {Promise<boolean>} A promise that resolves to `true` if the text was copied successfully, or `false` otherwise.\n */\ntype CopyFn = (text: string) => Promise<boolean>\n\n/**\n * Custom hook that copies text to the clipboard using the [`Clipboard API`](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API)\n * if available else it falls back to [`document.execCommand`](https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand)\n * @see [Documentation](https://usehooks-ts.com/react-hook/use-copy-to-clipboard)\n * @see [Documentation](https://github.com/jaredLunde/react-hook/blob/master/packages/copy/src/index.tsx)\n * @example\n * ```tsx\n * const [copiedText, copyToClipboard] = useCopyToClipboard();\n * const textToCopy = 'Hello, world!';\n *\n * // Attempt to copy text to the clipboard\n * copyToClipboard(textToCopy)\n * .then(success => {\n * if (success) {\n * console.log(`Text \"${textToCopy}\" copied to clipboard successfully.`);\n * } else {\n * console.error('Failed to copy text to clipboard.');\n * }\n * });\n * ```\n */\nexport function useCopyToClipboard(): {copiedText: CopiedValue, copyToClipboard: CopyFn} {\n const [ copiedText, setCopiedText ] = useState<CopiedValue>(null);\n\n const copy: CopyFn = useCallback(async text => {\n // Try to save to clipboard then save it in the state if worked\n try {\n await copyToClipboard(text);\n setCopiedText(text);\n return true;\n } catch (error) {\n console.warn('Copy failed', error);\n setCopiedText(null);\n return false;\n }\n }, []);\n\n return { copiedText, copyToClipboard: copy };\n}\n\nfunction copyToClipboard(text: string) {\n // uses the Async Clipboard API when available. Requires a secure browing\n // context (i.e. HTTPS)\n if (navigator.clipboard) return navigator.clipboard.writeText(text);\n // puts the text to copy into a <span>\n const span = document.createElement('span');\n span.textContent = text;\n // preserves consecutive spaces and newlines\n span.style.whiteSpace = 'pre';\n // adds the <span> to the page\n document.body.appendChild(span);\n // makes a selection object representing the range of text selected by the user\n const selection = window.getSelection();\n if (!selection) return Promise.reject();\n const range = window.document.createRange();\n selection.removeAllRanges();\n range.selectNode(span);\n selection.addRange(range);\n // copies text to the clipboard\n try {\n window.document.execCommand('copy');\n } catch (err) {\n return Promise.reject();\n }\n // cleans up the dom element and selection\n selection.removeAllRanges();\n window.document.body.removeChild(span);\n // the Async Clipboard API returns a promise that may reject with `undefined`\n // so we match that here for consistency\n return Promise.resolve();\n}","// extracted by mini-css-extract-plugin\nexport default {\"assignPrompt\":\"R73Xv\",\"badge\":\"urP15\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'sharev2.assignPrompt';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nimport { NewBadge } from 'libs/shared/components/new-badge/NewBadge';\n\nimport styles from './assign-prompt.scss';\n\ninterface AssignPromptProps {\n appLink: Core.AppLink;\n}\n\nexport function AssignPrompt(props: AssignPromptProps): JSX.Element {\n return (\n <AppLink\n appLink={props.appLink}\n className={classNames(\n 'd-flex flex-row gap-3 p-3 justify-content-between rounded-3 bg-white hover-bg-light-blue',\n styles.assignPrompt\n )}\n >\n <div className='d-flex flex-row gap-2 align-items-center fw-medium'>\n <Text namespace={namespace} phrase='title' />\n <NewBadge size='sm' text={getPhrase('badgeText')} className={styles.badge} />\n </div>\n <div>\n <SvgContainer svgName={cvSvgLibrary.ChevronRight} />\n </div>\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"mc17h\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EventVersion, LocationContext } from 'libs/analytics/interfaces';\n\nimport { ShareIntegrationsHelper } from 'libs/shared/apps/share/views/share/components/share-integrations/ShareIntegrationsHelper';\nimport { SharePermanentLinkActions } from 'libs/shared/apps/share-v2/components/share-permanent-link-actions/SharePermanentLinkActions';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { getShareEventLogger } from 'libs/shared/apps/share-v2/utils/get-share-event-logger/getShareEventLogger';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { useCreateShareData } from 'libs/shared/apps/share-v2/views/create-share-view/hooks/useCreateShareData';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useCopyToClipboard } from 'libs/shared/hooks/useCopyToClipboard';\nimport { AssignHelper } from 'libs/shared/utils/AssignHelper';\nimport { EmbedHelper } from 'libs/shared/utils/EmbedHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { AssignPrompt } from '../../components/assign-prompt/AssignPrompt';\n\nimport styles from './create-share.scss';\n\ntype CreateLinkType = 'link' | 'embed' | 'google-classroom' | 'microsoft-teams';\n\nconst namespace = 'sharev2.createShare';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface CreateShareViewProps extends MultiStepPopupViewProps {\n entityId: string;\n entityType: SharableEntityType\n setShowCopiedText: (val: boolean) => void;\n setShowEmbedCopiedText: (val: boolean) => void;\n goToShareLinkStep: () => void;\n goToCopyEmbedStep: () => void;\n assignFlowSelectorAppLink?: Core.AppLink;\n enableIntegrationBanner: boolean;\n googleClassroomIcon: string;\n microsoftTeamsIcon: string;\n}\n\nconst PLACEHOLDER_TEXT = 'https://clickv.ie/...';\n\nexport function CreateShareView(props: CreateShareViewProps): JSX.Element {\n const alerts = useAlerts();\n const { copyToClipboard } = useCopyToClipboard();\n\n const {\n data,\n hasClassrooms,\n hasStudentExp,\n canEmbed,\n integrations,\n createShareLink\n } = useCreateShareData({\n entityId: props.entityId,\n entityType: props.entityType\n });\n\n const {\n entity,\n share,\n currentUser,\n config,\n loaded\n } = data;\n\n const { log } = getShareEventLogger({\n data: {\n entity: {\n id: props.entityId,\n type: props.entityType\n }\n },\n analyticsOptions: {\n location: LocationContext.Popup,\n eventVersion: EventVersion.V4\n }\n });\n\n const [ loadingType, setLoadingType ] = React.useState<null | 'copy' | 'create'>(null);\n\n function onCreateLink(share: Share) {\n copyToClipboard(share.link?.shortenedUrl)\n .then(success => {\n /**\n * If the copy to clipboard somehow fails we still want to take\n * them to main share view where they can copy the link again.\n * Rather showing 'Copied' falsely we show them a toast that\n * says share link has been created.\n * - Nish\n */\n if (!success) {\n alerts.success(getPhrase('createSuccess', { name: entity.data.name, escapeText: true }));\n return;\n }\n \n /**\n * If we successfully copy the share link we show 'Copied' in the\n * button in main share link view\n * - Nish\n */\n log({\n type: 'copy-share-link',\n id: entity.data.id,\n shareId: share.shareId,\n shareType: share.type\n });\n props.setShowCopiedText(true);\n setTimeout(() => props.setShowCopiedText(false), 3000);\n })\n .finally(() => {\n props.goToShareLinkStep();\n });\n }\n\n function onCreateEmbed(share: Share) {\n const videoSizes = EmbedHelper.getEmbedResolutions();\n const url = EmbedHelper.buildEmbedUrl({\n embedUrl: share.link.shortenedEmbedUrl,\n host: config.data.liteUrl,\n shareId: share.shareId,\n autoplay: false\n });\n const embedString = EmbedHelper.getEmbedString({\n url,\n size: videoSizes[0]\n });\n \n copyToClipboard(embedString)\n .then(success => {\n if (!success) {\n alerts.success(getPhrase('createSuccess', { name: entity.data.name, escapeText: true }));\n return;\n }\n\n /**\n * If we successfully copy the share link we show 'Copied' in the\n * button in the embed view\n * - Nish\n */\n log({\n type: 'copy-embed-html',\n id: props.entityId,\n shareId: share.shareId,\n shareType: share.type,\n embedDetails: {\n size: videoSizes[0],\n autoplay: false\n }\n });\n props.setShowEmbedCopiedText(true);\n setTimeout(() => props.setShowEmbedCopiedText(false), 3000);\n })\n .finally(() => {\n props.goToCopyEmbedStep();\n });\n }\n\n function onCreateGoogleClassroom(share: Share) {\n ShareIntegrationsHelper.launchGoogleClassroom(share.link.shortenedUrl);\n props.goToShareLinkStep();\n }\n\n function onCreateMicrosoftTeams(share: Share) {\n ShareIntegrationsHelper.launchMicrosoftTeams(share.link.shortenedUrl);\n props.goToShareLinkStep();\n }\n\n function onSuccess(share: Share, type: CreateLinkType) {\n log({\n type: 'create-share-link',\n share\n });\n \n const handler: Record<CreateLinkType, (share: Share) => void> = {\n 'link': onCreateLink,\n 'embed': onCreateEmbed,\n 'google-classroom': onCreateGoogleClassroom,\n 'microsoft-teams': onCreateMicrosoftTeams\n };\n\n handler[type](share);\n }\n\n function getOnClickCreateLink(type: CreateLinkType) {\n return () => {\n setLoadingType(type === 'link' ? 'copy' : 'create');\n\n createShareLink()\n .then(share => onSuccess(share, type))\n .catch(() => {\n alerts.error(getPhrase('createError', { name: entity.data.name, escapeText: true }));\n })\n .finally(() => {\n setLoadingType(null);\n });\n };\n }\n\n React.useEffect(() => {\n if (!share.data)\n return;\n \n props.goToShareLinkStep();\n }, [share.data]);\n\n /**\n * We intentionally show the prompt here if hideAssignButtonOnVideoActions is true\n * This is the entry to assign when the assign button is hidden - Sha\n * \n * However, we do not want to show the prompt if the customer does\n * not have access to classrooms (like tertiary customers for example)\n * or if the user is a student - Boris\n */\n const showAssignPrompt = AssignHelper.hideAssignButtonOnVideoActions(currentUser.data)\n && hasClassrooms\n && !hasStudentExp;\n\n function getModalClassNames() {\n if (!showAssignPrompt || !loaded)\n return null;\n\n return {\n popupContentClassName: 'bg-transparent border-0',\n popupBodyClassName: 'p-0',\n topContentClassName: 'bg-white rounded-bottom-3 p-3 mb-3 d-flex flex-column gap-2'\n };\n }\n\n const modalClassNames = getModalClassNames();\n \n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n showLoadingSpinner={!loaded || props.loading}\n animation={props.animate}\n contentClassName={modalClassNames?.popupContentClassName}\n bodyClassName={modalClassNames?.popupBodyClassName}\n >\n <div className={modalClassNames?.topContentClassName}>\n <p className='mb-2'><Text namespace={namespace} phrase='info' /></p>\n <div className='d-flex gap-2 position-relative w-100'>\n <input\n type='text'\n autoComplete='off'\n className={`form-control ${styles.input}`}\n spellCheck={false}\n placeholder={PLACEHOLDER_TEXT}\n readOnly\n />\n <SpinnerButton\n variant='dark'\n showSpinner={!!loadingType}\n className='text-nowrap d-flex align-items-center gap-1'\n onClick={getOnClickCreateLink('link')}\n spinnerText={loadingType === 'copy' ? getPhrase('buttonLoading') : getPhrase('buttonLoadingCreate')}\n >\n <SvgContainer svgName={cvSvgLibrary.Link} />\n <Text namespace={namespace} phrase='button' />\n </SpinnerButton>\n </div>\n <SharePermanentLinkActions\n canEmbed={canEmbed}\n integrations={integrations}\n canAccessSettings={false}\n showIntegrations={props.enableIntegrationBanner}\n hasManageShareLinkSettings={false}\n goToDeleteStep={null}\n goToSettingsStep={null}\n onClickGetEmbedCode={getOnClickCreateLink('embed')}\n onClickGoogleClassroom={getOnClickCreateLink('google-classroom')}\n onClickMicrosoftTeams={getOnClickCreateLink('microsoft-teams')}\n hideSettings\n googleClassroomIcon={props.googleClassroomIcon}\n microsoftTeamsIcon={props.microsoftTeamsIcon}\n />\n </div>\n\n {showAssignPrompt && props.assignFlowSelectorAppLink && (\n <AssignPrompt appLink={props.assignFlowSelectorAppLink} />\n )}\n </Popup>\n );\n}","import { useShareLinkActions } from 'libs/shared/apps/share-v2/hooks/useShareLinkActions';\nimport { useShareLinkData } from 'libs/shared/apps/share-v2/hooks/useShareLinkData';\nimport { SharableEntityType, ShareViewHelper } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\ninterface UseCreateShareDataOptions {\n entityId: string;\n entityType: SharableEntityType;\n}\n\nexport function useCreateShareData(options: UseCreateShareDataOptions) {\n const { hasPermissions } = usePermissions();\n\n const {\n shareToGoogleClassroom,\n shareToMicrosoftTeams,\n hasClassrooms,\n isLoadingSettings\n } = useSettings(null);\n\n const canEmbed = ShareViewHelper.canEmbed(options.entityType);\n const integrations = ShareViewHelper.getEnabledIntegrations(shareToGoogleClassroom, shareToMicrosoftTeams);\n\n const { entity, share, currentUser, config } = useShareLinkData({\n entityId: options.entityId,\n entityType: options.entityType\n });\n\n const { loaded: shareLinkActionsLoaded, createShareLink } = useShareLinkActions({\n entityId: options.entityId\n });\n\n const hasStudentExp = hasPermissions(PermissionName.StudentExperience);\n\n const loaded = (\n !isLoadingSettings &&\n !!entity.data &&\n !!currentUser.data &&\n !!config.data &&\n !!shareLinkActionsLoaded\n );\n\n return {\n data: {\n entity,\n share,\n currentUser,\n config,\n loaded\n },\n hasClassrooms,\n hasStudentExp,\n canEmbed,\n integrations,\n createShareLink\n };\n}","import React from 'react';\n\nimport { ShareLinkPrivacy } from 'libs/shared/apps/share-v2/components/share-link-privacy/ShareLinkPrivacy';\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport type { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport type { SharePrivacyResponse } from 'libs/shared/apps/share-v2/interfaces/SharePrivacyResponse';\nimport { type SharableEntity, SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { CopyInput } from 'libs/shared/components/copy-input/CopyInput';\nimport type { YearGroup } from 'libs/shared/interfaces';\n\ninterface SharePermanentLinkProps {\n share: Share;\n entityType: SharableEntityType;\n hasStudentExp: boolean;\n shareOverrideRestrictions: boolean;\n entity: SharableEntity;\n yearGroups: YearGroup[];\n privacy: SharePrivacyResponse;\n onClickSavePrivacy: (privacy: SharePrivacy) => void;\n showCopiedText: boolean;\n onCopy?: () => void;\n}\n\nexport function SharePermanentLink(props: SharePermanentLinkProps): JSX.Element {\n const [ logged, setLogged ] = React.useState(false);\n \n function onCopy() {\n if (logged)\n return;\n\n setLogged(true);\n \n typeof props.onCopy === 'function' && props.onCopy();\n }\n\n return (\n <div className='d-flex justify-content-start align-items-start flex-column gap-2'>\n <ShareLinkPrivacy\n sharePrivacy={props.share.privacy}\n entityPrivacy={props.privacy}\n entityTypeId={props.entity.typeId}\n entity={props.entity}\n yearGroups={props.yearGroups}\n \n hasStudentExp={props.hasStudentExp}\n shareOverrideRestrictions={props.shareOverrideRestrictions}\n onClickSavePrivacy={props.onClickSavePrivacy}\n />\n <CopyInput\n styling='normal-v2'\n value={props.share.link.shortenedUrl}\n showCopiedText={props.showCopiedText}\n onCopy={onCopy}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EventVersion, LocationContext } from 'libs/analytics/interfaces';\n\nimport { ShareIntegrationsHelper } from 'libs/shared/apps/share/views/share/components/share-integrations/ShareIntegrationsHelper';\nimport { SharePermanentLink } from 'libs/shared/apps/share-v2/components/share-permanent-link/SharePermanentLink';\nimport { SharePermanentLinkActions } from 'libs/shared/apps/share-v2/components/share-permanent-link-actions/SharePermanentLinkActions';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { getShareEventLogger } from 'libs/shared/apps/share-v2/utils/get-share-event-logger/getShareEventLogger';\nimport { type SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { LookingForIntegration } from 'libs/shared/components/looking-for-integration/LookingForIntegration';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { AssignHelper } from 'libs/shared/utils/AssignHelper';\n\nimport { AssignPrompt } from '../../components/assign-prompt/AssignPrompt';\n\nimport { useMainShareData } from './hooks/use-main-share-data/useMainShareData';\n\nconst namespace = 'sharev2.mainShareView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface MainShareViewProps extends MultiStepPopupViewProps {\n entityId: string;\n showCopiedText?: boolean;\n entityType: SharableEntityType;\n enableIntegrationBanner: boolean;\n messagePopupAppLink?: Core.AppLink;\n integrationSettingAppLink?: Core.AppLink;\n assignFlowSelectorAppLink?: Core.AppLink;\n goToDeleteStep: () => void;\n goToSettingsStep: () => void;\n goToCopyEmbedStep: () => void;\n googleClassroomIcon: string;\n microsoftTeamsIcon: string;\n}\n\nexport function MainShareView(props: MainShareViewProps): JSX.Element {\n const fetch = Flight.useGetFetch();\n const { hasClassrooms } = useSettings(null);\n const { hasPermissions } = usePermissions();\n \n const { log } = getShareEventLogger({\n data: {\n entity: {\n id: props.entityId,\n type: props.entityType\n }\n },\n analyticsOptions: {\n eventVersion: EventVersion.V3,\n location: LocationContext.Popup\n }\n });\n \n const {\n data,\n canEmbed,\n integrations,\n hasStudentExp,\n canAccessSettings,\n hasManageShareLinkSettings,\n hasManageIntegrationsPermission,\n onClickSavePrivacy\n } = useMainShareData({\n entityId: props.entityId,\n entityType: props.entityType,\n log\n });\n\n const {\n share,\n loaded,\n entity,\n privacy,\n yearGroups,\n shareOverrideRestrictions,\n currentUser\n } = data;\n\n /**\n * We intentionally show the prompt here if hideAssignButtonOnVideoActions is true\n * This is the entry to assign when the assign button is hidden - Sha\n * \n * However, we do not want to show the prompt if the customer does\n * not have access to classrooms (like tertiary customers for example)\n * or if the user is a student - Boris\n */\n const showAssignPrompt = AssignHelper.hideAssignButtonOnVideoActions(currentUser.data)\n && hasClassrooms\n && !hasPermissions(PermissionName.StudentExperience);\n\n function onCopy() {\n log({\n type: 'copy-share-link',\n id: entity.data.id,\n shareId: share.data.shareId,\n shareType: share.data.type\n });\n fetch(ShareRequests.updateDateShared(share.data.shareId));\n }\n\n function getModalClassNames() {\n if (!showAssignPrompt || !loaded)\n return null;\n\n return {\n popupContentClassName: 'bg-transparent border-0',\n popupBodyClassName: 'p-0',\n topContentClassName: 'bg-white rounded-bottom-3 p-3 mb-3'\n };\n }\n\n const modalClassNames = getModalClassNames();\n\n const integrationAppLink = hasManageIntegrationsPermission\n ? props.integrationSettingAppLink\n : props.messagePopupAppLink;\n\n return (\n <Popup\n animation={props.animate}\n title={getPhrase('title')}\n closePopup={props.closePopup}\n showLoadingSpinner={!loaded || props.loading}\n contentClassName={modalClassNames?.popupContentClassName}\n bodyClassName={modalClassNames?.popupBodyClassName}\n >\n <div className={classNames('d-flex flex-column gap-2', modalClassNames?.topContentClassName)}>\n <SharePermanentLink\n share={share.data}\n entity={entity.data}\n privacy={privacy.data}\n yearGroups={yearGroups.data}\n entityType={props.entityType}\n hasStudentExp={hasStudentExp}\n showCopiedText={props.showCopiedText}\n shareOverrideRestrictions={shareOverrideRestrictions}\n onCopy={onCopy}\n onClickSavePrivacy={onClickSavePrivacy}\n />\n <SharePermanentLinkActions\n canEmbed={canEmbed}\n integrations={integrations}\n canAccessSettings={canAccessSettings}\n showIntegrations={props.enableIntegrationBanner}\n hasManageShareLinkSettings={hasManageShareLinkSettings}\n goToDeleteStep={props.goToDeleteStep}\n goToSettingsStep={props.goToSettingsStep}\n onClickGetEmbedCode={props.goToCopyEmbedStep}\n onClickGoogleClassroom={() => ShareIntegrationsHelper.launchGoogleClassroom(share.data.link.shortenedUrl)}\n onClickMicrosoftTeams={() => ShareIntegrationsHelper.launchMicrosoftTeams(share.data.link.shortenedUrl)}\n googleClassroomIcon={props.googleClassroomIcon}\n microsoftTeamsIcon={props.microsoftTeamsIcon}\n />\n {props.enableIntegrationBanner && !integrations.length &&\n <LookingForIntegration\n normalText\n hideDismiss\n hideBackground\n appLink={integrationAppLink}\n closePopup={props.closePopup}\n />\n }\n </div>\n\n {showAssignPrompt && props.assignFlowSelectorAppLink && (\n <AssignPrompt appLink={props.assignFlowSelectorAppLink} />\n )}\n </Popup>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EventVersion, LocationContext } from 'libs/analytics/interfaces';\n\nimport { ShareSettingsForm } from 'libs/shared/apps/share-v2/components/share-settings-form/ShareSettingsForm';\nimport { getShareEventLogger } from 'libs/shared/apps/share-v2/utils/get-share-event-logger/getShareEventLogger';\nimport { SharableEntityType, type ShareSettingsFormFields, ShareViewHelper } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { type FormSubmissionOptions } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\n\nimport { useShareSettingsData } from './hooks/use-share-settings-data/useShareSettingsData';\n\nconst namespace = 'sharev2.shareSettingsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface ShareSettingsViewProps extends MultiStepPopupViewProps {\n entityId: string;\n entityType: SharableEntityType;\n goToShareLinkStep: () => void;\n goToDeleteStep: () => void;\n}\n\n\nexport function ShareSettingsView(props: ShareSettingsViewProps): JSX.Element {\n const { log } = getShareEventLogger({\n data: {\n entity: {\n id: props.entityId,\n type: props.entityType\n }\n },\n analyticsOptions: {\n location: LocationContext.Popup,\n eventVersion: EventVersion.V3\n }\n });\n \n const { initialValues, onClickSaveLink } = useShareSettingsData({\n entityId: props.entityId,\n entityType: props.entityType,\n log\n });\n \n function onSubmit(\n data: ShareSettingsFormFields,\n onDone: (options?: FormSubmissionOptions<ShareSettingsFormFields>) => void\n ): void {\n onClickSaveLink({\n options: {\n immediateFeedback: data.immediateFeedback,\n preventScrubbing: data.preventScrubbing\n }\n }, onDone);\n }\n\n const {\n showImmediateFeedbackField,\n showPreventScrubbingField\n } = ShareViewHelper.getEnabledSettingsField(props.entityType);\n\n return (\n <Popup\n title={getPhrase('title')}\n showLoadingSpinner={props.loading}\n closePopup={props.closePopup}\n animation={props.animate}\n >\n <ShareSettingsForm\n initialValues={initialValues}\n onSubmit={onSubmit}\n onClickDelete={props.goToDeleteStep}\n showImmediateFeedbackField={showImmediateFeedbackField}\n showPreventScrubbingField={showPreventScrubbingField}\n />\n <PopupButtons className='mt-3'>\n <PopupButtons.Cancel onClick={props.goToShareLinkStep} text={getPhrase('back')} variant='link' />\n </PopupButtons>\n </Popup>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { useShareLinkData } from 'libs/shared/apps/share-v2/hooks/useShareLinkData';\nimport { AllShareLinkViewProps } from 'libs/shared/apps/share-v2/interfaces/MultiStepPopup';\nimport { ShareScreen } from 'libs/shared/apps/share-v2/interfaces/ShareScreen';\nimport { type SharableEntityType, ShareViewHelper } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { CopyEmbedView } from 'libs/shared/apps/share-v2/views/copy-embed-view/CopyEmbedView';\nimport { CreateShareView } from 'libs/shared/apps/share-v2/views/create-share-view/CreateShareView';\nimport { DeleteShareLinkConfirmationView } from 'libs/shared/apps/share-v2/views/delete-share-link-confirmation-view/DeleteShareLinkConfirmationView';\nimport { MainShareView } from 'libs/shared/apps/share-v2/views/main-share-view/MainShareView';\nimport { ShareSettingsView } from 'libs/shared/apps/share-v2/views/share-settings-view/ShareSettingsView';\nimport { MultiStepPopup } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport type { PopupViewProps } from 'libs/shared/interfaces';\n\ninterface ShareViewProps extends PopupViewProps {\n entityId: string;\n entityType: SharableEntityType\n enableIntegrationBanner: boolean;\n assignFlowSelectorAppLink?: Core.AppLink;\n integrationSettingAppLink?: Core.AppLink;\n messagePopupAppLink?: Core.AppLink;\n googleClassroomIcon?: string;\n microsoftTeamsIcon?: string;\n}\n\nexport function ShareView(props: ShareViewProps): JSX.Element {\n const { share } = useShareLinkData({ entityId: props.entityId, entityType: props.entityType });\n\n const [ animate, setAnimate ] = React.useState<boolean>(true);\n const [ screen, setScreen ] = React.useState<ShareScreen>(share.data ? 'share-link' : 'create-link');\n const [ showCopiedText, setShowCopiedText ] = React.useState(false);\n const [ showEmbedCopiedText, setShowEmbedCopiedText ] = React.useState(false);\n\n const canAccessSettings = ShareViewHelper.canAddPolicies(props.entityType);\n\n function setStep(step: ShareScreen) {\n setAnimate(false);\n setScreen(step);\n }\n\n function goToSettingsStep() {\n if (!canAccessSettings) {\n setStep('share-link');\n return;\n }\n \n setStep('link-settings');\n }\n\n const data: AllShareLinkViewProps = {\n entityId: props.entityId,\n entityType: props.entityType,\n showCopiedText: showCopiedText,\n showEmbedCopiedText: showEmbedCopiedText,\n messagePopupAppLink: props.messagePopupAppLink,\n enableIntegrationBanner: props.enableIntegrationBanner,\n integrationSettingAppLink: props.integrationSettingAppLink,\n assignFlowSelectorAppLink: props.assignFlowSelectorAppLink,\n goToShareLinkStep: () => setStep('share-link'),\n goToDeleteStep: () => setStep('delete-confirmation'),\n goToCopyEmbedStep: () => setStep('copy-embed'),\n goToSettingsStep,\n closePopup: props.closePopup,\n setShowCopiedText: setShowCopiedText,\n setShowEmbedCopiedText: setShowEmbedCopiedText,\n googleClassroomIcon: props.googleClassroomIcon,\n microsoftTeamsIcon: props.microsoftTeamsIcon\n };\n\n return (\n <MultiStepPopup<AllShareLinkViewProps, ShareScreen>\n step={screen}\n animate={animate}\n setStep={setStep}\n loading={!share.hasCompleted}\n closePopup={props.closePopup}\n data={data}\n steps={{\n 'create-link': {\n view: CreateShareView\n },\n 'share-link': {\n view: MainShareView\n },\n 'link-settings': {\n view: ShareSettingsView\n },\n 'copy-embed': {\n view: CopyEmbedView\n },\n 'delete-confirmation': {\n view: DeleteShareLinkConfirmationView\n }\n }}\n />\n );\n}\n","import React from 'react';\n\nimport { ShareView as OldShareView } from 'libs/shared/apps/share/views/share/ShareView';\nimport { SharableEntityType } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ShareView as NewShareView } from 'libs/shared/apps/share-v2/views/share-view/ShareView';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { AssignAppLinkHelper } from 'apps/assign/utils/AssignAppLinkHelper';\n\ninterface ShareViewProps extends PopupViewProps {\n entityId: string;\n entityType: SharableEntityType;\n enableIntegrationBanner?: boolean\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function ShareView(props: ShareViewProps) {\n const { hasShareFlowV2, isLoadingSettings } = useSettings(null);\n\n if (isLoadingSettings)\n return <></>;\n\n if (!hasShareFlowV2) {\n return (\n <OldShareView\n entityId={props.entityId}\n entityType={props.entityType}\n closePopup={props.closePopup}\n emptyStateImageUrl={ImageUrls.EmptyStates.TYPEAHEAD_RESULTS}\n errorStateImageUrl={ImageUrls.TYPEAHEAD_ERROR}\n messagePopupAppLink={{\n application: AppChannels.DEFAULT,\n action: Actions.Default.INTEGRATIONS_INFO\n }}\n integrationSettingAppLink={{\n application: AppChannels.SETTINGS,\n action: Actions.Settings.INTEGRATIONS\n }}\n enableIntegrationBanner={props.enableIntegrationBanner}\n />\n );\n }\n\n /**\n * Series can only be assigned to existing classrooms.\n */\n const assignFlowSelectorAppLink = props.entityType === 'series'\n ? AssignAppLinkHelper.existingClassroom({\n entityType: 'series',\n objectId: props.entityId\n })\n : AssignAppLinkHelper.flowSelector({\n entityType: props.entityType,\n objectId: props.entityId\n });\n\n return (\n <NewShareView\n entityId={props.entityId}\n entityType={props.entityType}\n closePopup={props.closePopup}\n messagePopupAppLink={{\n application: AppChannels.DEFAULT,\n action: Actions.Default.INTEGRATIONS_INFO\n }}\n integrationSettingAppLink={{\n application: AppChannels.SETTINGS,\n action: Actions.Settings.INTEGRATIONS\n }}\n enableIntegrationBanner={props.enableIntegrationBanner}\n assignFlowSelectorAppLink={assignFlowSelectorAppLink}\n googleClassroomIcon={ImageUrls.ShareIntegrations.GoogleClassroom}\n microsoftTeamsIcon={ImageUrls.ShareIntegrations.MicrosoftTeams}\n />\n );\n}"],"names":["getPhrase","DeleteShareContent","props","ack","setAck","className","phrases","leadingSentence","bulletPoints","map","phrase","index","key","id","checked","onChange","e","target","label","acknowledgement","onBack","onClick","text","backButton","variant","loading","onDelete","deleteButton","disabled","showSpinner","SharePrivacyItem","active","activePrivacy","sharePrivacy","title","description","SvgContainer","svgName","ShareLinkPrivacy","canUpdatePrivacy","shareOverrideRestrictions","hasStudentExp","config","getSharePrivacyConfig","entity","entityPrivacy","yearGroups","_showPasswordProtected","SharePrivacy","ShareLinkHelper","privacy","entityTypeId","icon","Object","values","predicate","onClickSavePrivacy","options","accessType","respectRatingText","getDefaultSharePrivacy","items","validItems","entries","filter","length","DeleteShareLinkConfirmationView","alerts","setLoading","entityId","entityType","share","deleteShareLink","log","data","type","analyticsOptions","location","eventVersion","loaded","closePopup","showLoadingSpinner","animation","animate","shareId","then","success","previousAppLink","error","name","escapeText","goToSettingsStep","undefined","useMainShareData","hasPermissions","shareToGoogleClassroom","shareToMicrosoftTeams","isLoadingSettings","currentUser","shareActionLoaded","updateShareLink","customerId","canEmbed","integrations","hasManageIntegrationsPermission","hasManageShareLinkSettings","canAccessSettings","updatedPrivacy","updatedShare","POPUP_FEATURES","ShareIntegrationsHelper","launchGoogleClassroom","link","url","launchMicrosoftTeams","href","preview","referrer","s","Date","now","MultiStepPopup","setAnimate","stepConfig","steps","step","viewProps","setStep","ViewComponent","view","namespace","NewBadge","size","invert","LanguageService","CopyEmbedView","fetch","useShareLinkData","getShareEventLogger","Popup","CopyEmbedHtml","embedUrl","shortenedEmbedUrl","liteUrl","onCopy","embedDetails","shareType","ShareRequests","showEmbedCopiedText","styling","PopupButtons","goToShareLinkStep","ShareIntegrations","includes","IntegrationId","onClickGoogleClassroom","style","backgroundImage","googleClassroomIcon","onClickMicrosoftTeams","microsoftTeamsIcon","SharePermanentLinkDelete","DivButton","S","Text","SharePermanentLinkSetting","manageShareLinkSettings","onClickEditSettings","SharePermanentLinkActions","GetEmbedCode","onClickGetEmbedCode","minimal","hideSettings","goToDeleteStep","showIntegrations","useCopyToClipboard","useState","copiedText","setCopiedText","copyToClipboard","useCallback","console","warn","navigator","clipboard","writeText","span","document","createElement","textContent","whiteSpace","body","appendChild","selection","window","getSelection","Promise","reject","range","createRange","removeAllRanges","selectNode","addRange","execCommand","err","removeChild","resolve","AssignPrompt","AppLink","appLink","PLACEHOLDER_TEXT","CreateShareView","usePermissions","useSettings","hasClassrooms","ShareViewHelper","useShareLinkActions","shareLinkActionsLoaded","createShareLink","PermissionName","useCreateShareData","loadingType","setLoadingType","onCreateLink","shortenedUrl","setShowCopiedText","setTimeout","onCreateEmbed","videoSizes","EmbedHelper","host","autoplay","embedString","setShowEmbedCopiedText","goToCopyEmbedStep","onCreateGoogleClassroom","onCreateMicrosoftTeams","getOnClickCreateLink","onSuccess","showAssignPrompt","AssignHelper","modalClassNames","popupContentClassName","popupBodyClassName","topContentClassName","contentClassName","bodyClassName","autoComplete","spellCheck","placeholder","readOnly","SpinnerButton","spinnerText","enableIntegrationBanner","assignFlowSelectorAppLink","SharePermanentLink","logged","setLogged","typeId","CopyInput","value","showCopiedText","MainShareView","integrationAppLink","integrationSettingAppLink","messagePopupAppLink","LookingForIntegration","normalText","hideDismiss","hideBackground","ShareSettingsView","useShareSettingsData","initialValues","onClickSaveLink","showImmediateFeedbackField","showPreventScrubbingField","ShareSettingsForm","onSubmit","onDone","immediateFeedback","preventScrubbing","onClickDelete","screen","setScreen","hasCompleted","hasShareFlowV2","emptyStateImageUrl","ImageUrls","errorStateImageUrl","application","action","AssignAppLinkHelper","objectId"],"sourceRoot":""}